使用Exchange Online从一个LightSwitch SharePoint 应用程序中发送电子邮件

[原文发表地址] Sending Email from a LightSwitch SharePoint App using Exchange Online

[原文发表时间] 2013-01-28 7:50 AM

约一个星期前,我给你们展示了如何通过注册一个免费的 Office 365 开发人员帐户来开始使用 LightSwitch HTML 客户端预览版 2构建 SharePoint 2013 应用程序,并演示了Survey(调查) App 教程。如果你错过了它:

使用 LightSwitch在几分钟内构建SharePoint 应用程序

在浏览完本教程后,你有一个 SharePoint 应用程序,它允许食品分销商的销售代表对合作伙伴的商店进行质量调查。对每种产品进行质量调查来衡量该产品在商店中的现状,像摆放、整洁情况等 — — 这些调查是通过销售代表的现场移动设备执行的。他们还可以拍照,并将它们直接上传到 SharePoint 图片库。

(点击图片放大)

imageimageimage

通过使用OAuth,本教程演示了LightSwitch 如何处理对 SharePoint 的身份验证。它还演示了如何使用来自服务器代码的SharePoint 客户端对象模型,以及编写可以从 HTML 客户端调用的WebAPI 方法

今天我要向你展示当完成一项调查时,如何发送电子邮件通知合作伙伴商店。因为此 SharePoint 应用程序是在 Office 365中运行,我将给你展示如何充分利用 Exchange Online发送电子邮件。

LightSwitch中发送电子邮件 — — 进入到Update管道

我以前就有关使用 Outlook 以及 SMTP 邮件如何发送电子邮件写过文章:如何从 LightSwitch 应用程序中发送 HTML 电子邮件

当从服务器端发送一封通知电子邮件时,你可以进入到服务器上的entity_Inserting/ed方法,这是 LightSwitch update管道的一部分。update管道可以与很多事件挂钩,而当处理实体时,这些事件都发生在服务器端。若要查看此,只需在数据设计器中打开实体,下拉设计器顶部的" write code "按钮:

image

在此示例中,我们会通过挂钩到 _Inserting方法来发送电子邮件。这样,如果发送电子邮件时出现了错误,用户将被在屏幕上通知,然后就不会保存。这允许用户重试此操作。但是,你可能认为替换 _Inserted方法中的代码会更好,那样记录就总是被保存,而不管是否可以发送出一封电子邮件。

将Email字段添加到应用程序中

为了向客户发送一封电子邮件,我们首先需要添加一个字段来获得Customer实体上的电子邮件。使用数据设计器,打开Customer实体, 添加一个称为Email的EmailAddress类型的字段,取消选中Required项。

image

接下来,通过点击第一个rows layout下的+Add按钮,然后选择" Other Screen Data…”来将email字段添加到 AddEditSurveys 屏幕中, image

然后指定 Customer.Email,单击OK:

image

然后将控件更改为Email Address Editor,并将显示名称更改为" Customer Email "。这将允许销售代表在Survey屏幕上输入/验证客户电子邮件。

将代码添加到Update管道

在数据设计器中,现在打开Survey实体,下拉" write code "按钮,然后选择 Surveys_Inserting 方法。这将打开ApplicationDataService 类,那里是所有的服务器端处理事件的地方。在Survey App 教程中已经有一些代码了,它将 SalesRepName 设置为登录的用户。现在我们需要做的就是编写代码来发送电子邮件。

 Namespace LightSwitchApplication
  
     Public Class ApplicationDataService
  
         Private Sub Surveys_Inserting(entity As Survey)
             entity.SalesRepName = Me.Application.User.Name
  
             'Write code to send email through Exchange online
  
         End Sub

通过Exchange Online发送电子邮件

好了,现在我们准备编写一些代码了 !你可以直接在 ApplicationDataService 类中编写代码或你可以创建你自己的类,就像我在这里所介绍的一样,你可以切换到File View,然后添加你自己的类文件到服务器项目中。对于此示例,我想让它简单一点,只是添加了一个SendSurveyMail 方法到ApplicationDataService 类中。

添加Exchange引用

我们需要做的第一件事是添加对Exchange Web Services Managed API 2.0的引用。当你安装预览版 2时, Exchange 服务器程序集也被安装了。(但你也可以在这里手动安装它们。)

若要添加引用,在Solution Explorer中首先切换到File View:

image

然后展开服务器项目,右击References,然后选择“Add Reference…”。然后浏览到 C:\%ProgramFiles%\Microsoft\Exchange\Web Services\2.0 和 Microsoft.Exchange.WebServices.dll 和 Microsoft.Exchange.WebServices.Auth.dll

image

下一步,确保你在属性窗口中将这些程序集设置为" Copy Local ",这样,当你将应用程序部署到 SharePoint时,程序集也被部署了。

image

至于我要编写的代码,我还需要引用System.Xml.Linq以便轻松地创建 HTML 格式的电子邮件。所以在Add Reference对话框中的Framework选项卡下, 还勾选 System.Xml.Linq程序集。由于这是核心框架的一部分,因此这个不需要Copy Local。

搞清楚 Service.Url

为了通过 Office 365的Exchange online服务发送电子邮件,你将需要知道Exchange 服务的 URL。登录到你的 Office 365 帐户, 点击顶部的 Outlook 选项卡,然后选择齿轮下的Options。

image

然后点击链接“Settings for POP or IMAP access…”,你将看到你的服务器名称。以我的为例,它是 outlook.office365.com。

image

我们需要的服务地址是以这种格式的:

https:// 服务器名 /EWS/Exchange.asmx

所以以我的为例,它是 https://outlook.office365.com/EWS/Exchange.asmx

另一个获取此 URL 的方法是使用AutoDiscover以编程方式获得。

编写代码

好了,现在我们可以编写代码来发送电子邮件。我将构造一封HTML 电子邮件,并从管理员帐户中发送它,同时抄送销售代表。我们可以从他们的登录中提取销售代表的电子邮件。我们需要做的第一件事是在ApplicationDataService 类的顶部导入Exchange web service命名空间。

 Imports Microsoft.Exchange.WebServices.Data

现在调用一个方法来从 Surveys_Inserting 方法中发送电子邮件。

 Private Sub Surveys_Inserting(entity As Survey)
     entity.SalesRepName = Me.Application.User.Name
  
     'Write code to send email through Exchange online
     Me.SendSurveyMail(entity)
 End Sub

最后,为 SendSurveyMail编写代码。请确保你拥有发送电子邮件的正确用户名/密码凭据。我正在使用我登录到我的Office 365 帐户上的同一管理员。

 Private Sub SendSurveyMail(entity As Survey)
     Try
         If entity.Customer.Email <> "" Then
  
             'Set up the connection the Exchange online service
             Dim service As New ExchangeService(ExchangeVersion.Exchange2013)
             service.Credentials = New WebCredentials("username", "password")
             service.Url = New Uri("https://outlook.office365.com/EWS/Exchange.asmx")
  
             'Get the sales rep email from their logged in username
             Dim salesRepEmail = entity.SalesRepName.
                     Substring(entity.SalesRepName.LastIndexOf("|") + 1)
  
             'Create a new HTML email message
             Dim message As New EmailMessage(service)
             message.Subject = "New survey!"
  
             Dim text = <html>
                 <body>
                   <p>Hello <%= entity.Customer.CompanyName %>!</p>
                   <p>We wanted to let you know that a survey has been created 
                   about one of your products: <%= entity.Product.ProductName %></p>
                   <p>This is an automated courtesy message, please do not reply directly. 
                   If you have any questions please contact your sales rep 
                   <%= Application.User.FullName %> at <%= salesRepEmail %></p>
                   <p>Thanks for your business!</p>
                  </body>
                 </html>.ToString
  
             Dim body As New MessageBody(BodyType.HTML, text)
             message.Body = body
  
             'Add the customer email and CC the sales rep
             message.ToRecipients.Add(entity.Customer.Email)
             message.CcRecipients.Add(salesRepEmail)
  
             'Send the email and save a copy in the Sent Items folder
             message.SendAndSaveCopy()
         End If
     Catch ex As Exception
         Throw New InvalidOperationException("Failed to create email.", ex)
     End Try
 End Sub

运行它

按 F5 来以调试模式运行 SharePoint 应用程序。现在当我们填写一个新调查时,我们看到客户的电子邮件地址,当我们保存一个调查时,会通过Exchange online生成一个电子邮件。

image

image

总结

在 Office 365 上构建SharePoint 应用程序为你提供了一套非常棒的连接服务。LightSwitch 大幅减少了构建自定义的业务应用程序的时间,你现在拥有一个强健的业务平台。

我鼓励你在dev.office.commsdn.com/lightswitch了解更多。

希望大家喜欢 !