教程:创建使用 Azure 逻辑应用、Azure Functions 和 Azure 存储处理电子邮件的工作流

适用于:Azure 逻辑应用(消耗)

Azure 逻辑应用有助于跨 Azure 服务、Microsoft 服务、其他软件即服务 (SaaS) 应用以及本地系统自动完成工作流和集成数据。 本教程介绍如何构建一个逻辑应用工作流,该工作流处理传入的电子邮件和任何附件,使用 Azure Functions 分析电子邮件内容,将内容保存到 Azure 存储,并发送电子邮件以审阅内容。

本教程介绍如何执行下列操作:

  • 设置 Azure 存储和存储资源管理器,以便查看保存的电子邮件和附件。
  • 创建用于从电子邮件中删除 HTML 的 Azure 函数。 本教程包括可以用于此函数的代码。
  • 创建空白的消耗逻辑应用工作流。
  • 添加一个触发器,用于监视电子邮件中的附件。
  • 添加一个条件,用于检查电子邮件是否有附件。
  • 添加一个操作,用于在电子邮件有附件时调用 Azure 函数。
  • 添加一个操作,用于为电子邮件和附件创建存储 Blob。
  • 添加一个操作,用于发送电子邮件通知。

以下屏幕截图显示了概要性的工作流:

Screenshot showing example high-level Consumption workflow for this tutorial.

先决条件

  • Azure 帐户和订阅。 如果没有订阅,可以注册 Azure 帐户

  • Azure 逻辑应用支持的电子邮件提供商(例如 Office 365 Outlook 或 Outlook.com)提供的电子邮件帐户。 至于其他提供商,请查看此处的连接器列表

    此逻辑应用工作流使用工作或学校帐户。 如果使用其他电子邮件帐户,则常规步骤保持不变,但 UI 显示可能稍有不同。

  • 下载并安装免费 Azure 存储资源管理器。 此工具可以用于检查存储容器是否已正确设置。

  • 如果工作流需要通过仅限流量流经特定 IP 地址的防火墙进行通信,则该防火墙需要允许访问该逻辑应用资源所在的 Azure 区域中的 Azure 逻辑应用使用的入站出站 IP 地址。 如果工作流还使用托管连接器(例如 Office 365 Outlook 连接器或 SQL 连接器),或使用自定义连接器,则防火墙还需要允许访问该逻辑应用所在的 Azure 区域中的所有托管连接器出站 IP 地址

设置用于保存附件的存储。

可以在 Azure 存储容器中以 Blob 形式保存传入电子邮件和附件。

  1. Azure 门户中,在“基本信息”选项卡上提供以下信息,使用你的 Azure 帐户凭据创建一个存储帐户(除非已有存储帐户):

    属性 价值 说明
    订阅 <Azure-subscription-name> Azure 订阅的名称
    资源组 <Azure-resource-group> 用于组织和管理相关资源的 Azure 资源组的名称。 此示例使用 LA-Tutorial-RG。

    注意:资源组位于特定的区域。 本教程中的项目可能不在所有区域提供,请尽可能尝试使用同一区域。
    存储帐户名称 <Azure-storage-account-name> 你的存储帐户名称,必须包含 3-24 个字符,并且只能包含小写字母和数字。 此示例使用 attachmentstorageacct。
    区域 <Azure-region> 用于存储存储帐户相关信息的区域。 此示例使用“中国北部”。
    性能 标准 此设置指定支持的数据类型以及用于存储数据的介质。 请参阅存储帐户的类型
    冗余 异地冗余存储 (GRS) 此设置用于存储多个数据副本,以防止数据受到计划内和计划外事件的影响。 有关详细信息,请参阅 Azure 存储冗余

    若要创建存储帐户,也可以使用 Azure PowerShellAzure CLI

  2. 完成后,选择“查看 > 创建”。

  3. 在 Azure 部署存储帐户后,请查找存储帐户并获取存储帐户的访问密钥:

    1. 在存储帐户菜单中的“安全性 + 网络”下,选择“访问密钥”。

    2. 复制存储帐户名称和“密钥 1”,然后将这些值保存到某个安全位置。

    若要获取存储帐户的访问密钥,也可以使用 Azure PowerShellAzure CLI

  4. 为电子邮件附件创建 Blob 存储容器。

    1. 在存储帐户菜单中的“数据存储”下,选择“容器”。

    2. 在“容器”页的工具栏中,选择“容器”。

    3. 在“新建容器”下,输入 attachments 作为容器名称。 在“公共访问级别”下依次选择“容器(对容器和 Blob 进行匿名读取访问)”>“确定” 。

    完成后,容器列表现在会显示新的存储容器。

    若要创建存储容器,也可以使用 Azure PowerShellAzure CLI

接下来,将存储资源管理器连接到存储帐户。

设置存储资源管理器

现在,请将存储资源管理器连接到存储帐户,以确认工作流能否正确地在存储容器中将附件保存为 Blob。

  1. 启动 Azure 存储资源管理器。 使用 Azure 帐户登录。

    注意

    如果未显示任何提示,请在存储资源管理器活动栏上选择“帐户管理”(帐户图标)。

  2. 在“选择 Azure 环境”窗口中选择你的 Azure 环境,然后选择“下一步”。

    此示例选择全局多租户 Azure 并继续。

  3. 在出现的浏览器窗口中,使用你的 Azure 帐户登录。

  4. 返回到存储资源管理器和“帐户管理”窗口,并检查是否选择了正确的 Microsoft Entra 租户和订阅

  5. 在存储资源管理器活动栏上,选择“打开连接对话框”。

  6. 在“选择资源”窗口中,选择“存储帐户或服务”。

  7. 在“选择连接方法”窗口中,选择“帐户名称和密钥”>“下一步”。

  8. 在“连接到 Azure 存储”窗口中提供以下信息,然后选择“下一步”。

    属性
    显示名称 连接的易记名称
    帐户名称 你的存储帐户名称
    帐户密钥 之前保存的访问密钥
  9. 在“摘要”窗口中确认连接信息,然后选择“连接”。

    存储资源管理器会创建连接,并在“资源管理器”窗口中的“仿真器和附加”>“存储帐户”下显示你的存储帐户。

  10. 若要查找自己的 Blob 存储容器,请在“存储帐户”下展开自己的存储帐户(此处为 attachmentstorageacct),然后展开“Blob 容器”,在其中可以找到“附件”容器,例如 :

    Screenshot showing Storage Explorer - find storage container.

接下来,创建用于从传入电子邮件中删除 HTML 的 Azure 函数

创建函数以删除 HTML

现在,请使用这些步骤提供的代码片段,创建一个可从每封传入电子邮件中删除 HTML 的 Azure 函数。 这样就可以让电子邮件内容更干净,更容易处理。 然后可以从工作流中调用此函数。

  1. 在创建函数之前,请按照以下步骤创建一个函数应用

    1. 在“基本信息”选项卡上提供以下信息,然后选择“下一步: 托管”:

      属性 价值 说明
      订阅 <your-Azure-subscription-name> 以前使用过的同一 Azure 订阅
      资源组 LA-Tutorial-RG 以前使用过的同一 Azure 资源组
      函数应用名称 <function-app-name> 你的函数应用的名称,该名称在整个 Azure 中必须全局唯一。 此示例已使用 CleanTextFunctionApp,因此请提供不同的名称,例如 MyCleanTextFunctionApp-<your-name>
      发布 代码 发布代码文件
      运行时堆栈 <preferred-language> 选择支持你偏好的函数编程语言的运行时。 门户中编辑仅适用于 JavaScript、PowerShell、TypeScript 和 C# 脚本。 C# 类库、Java 和 Python 函数必须在本地开发。 对于 C# 和 F# 函数,请选择“.NET”。
      版本 <version-number> 选择已安装的运行时的版本。
      区域 <Azure-region> 先前使用的同一区域。 此示例使用“中国北部”。
      操作系统 <your-operating-system> 系统会根据选择的运行时堆栈预先选择一个操作系统,但你可以选择支持你所偏好的函数编程语言的操作系统。 仅在 Windows 上支持门户内编辑。 此示例选择了“Windows”。
      计划类型 消耗(无服务器) 选择托管计划,用于定义如何将资源分配给函数应用。 在默认的消耗计划中,根据函数需求动态添加资源。 在此无服务器托管中,只需为函数运行时间付费。 按应用服务计划运行时,必须管理函数应用的缩放
    2. 在“托管”选项卡上提供以下信息,然后选择“查看 + 创建”。

      属性 价值 说明
      存储帐户 cleantextfunctionstorageacct 创建函数应用使用的存储帐户。 存储帐户名称必须为 3 到 24 个字符,并且只能包含小写字母和数字。

      注意: 此存储帐户包含函数应用,不同于以前创建的用于电子邮件附件的存储帐户。 也可使用现有帐户,但该帐户必须符合存储帐户要求

      创建并部署你的函数应用后,Azure 会自动将其打开。

  2. 如果函数应用没有在部署后自动打开,请在 Azure 门户搜索框中找到该应用并选择“函数应用”。 在“函数应用”列表中选择你的函数应用。

  3. 在函数应用资源菜单中的“函数”下,选择“函数”。 在“函数”工具栏上选择“创建”。

  4. 在“创建函数”窗格中选择“HTTP 触发器”模板,提供以下信息,然后选择“创建”。

属性
新建函数 RemoveHTMLFunction
授权级别 函数

Azure 使用适用于 HTTP 触发函数的语言特定模板创建函数,然后打开该函数的“概述”页。

  1. 在函数菜单中的“开发人员”下,选择“代码 + 测试”。

  2. 打开编辑器后,将模板代码替换为以下示例代码,以便删除 HTML 并将结果返回给调用方:

    #r "Newtonsoft.Json"
    
    using System.Net;
    using Microsoft.AspNetCore.Mvc;
    using Microsoft.Extensions.Primitives;
    using Newtonsoft.Json;
    using System.Text.RegularExpressions;
    
    public static async Task<IActionResult> Run(HttpRequest req, ILogger log) 
    {
       log.LogInformation("HttpWebhook triggered");
    
       // Parse query parameter
       string emailBodyContent = await new StreamReader(req.Body).ReadToEndAsync();
    
       // Replace HTML with other characters
       string updatedBody = Regex.Replace(emailBodyContent, "<.*?>", string.Empty);
       updatedBody = updatedBody.Replace("\\r\\n", " ");
       updatedBody = updatedBody.Replace(@"&nbsp;", " ");
    
       // Return cleaned text
       return (ActionResult)new OkObjectResult(new { updatedBody });
    }
    
  3. 完成后,在工具栏上选择“保存”。

  4. 若要测试函数,请在工具栏上选择“测试/运行”。

  5. 在打开的窗格中,在“输入”选项卡上的“正文”框中输入以下行,然后选择“运行”。

    {"name": "<p><p>Testing my function</br></p></p>"}

    “输出”选项卡将显示函数的结果:

    {"updatedBody":"{\"name\": \"Testing my function\"}"}
    

检查函数是否正常工作后,创建逻辑应用资源和工作流。 虽然本教程介绍的是如何创建从电子邮件中删除 HTML 的函数,但 Azure 逻辑应用还提供了“HTML 到文本”连接器。

创建逻辑应用工作流

  1. 在 Azure 门户的顶级搜索框中输入“逻辑应用”,然后选择“逻辑应用”。

  2. 在“逻辑应用”页上,选择“添加” 。

  3. 在“创建逻辑应用”页上的“计划”下,选择“消耗”作为计划类型,这样,只会显示消耗型逻辑应用工作流的选项。 提供以下信息,然后选择“查看 + 创建”。

    属性 价值 说明
    订阅 <your-Azure-subscription-name> 以前使用过的同一 Azure 订阅
    资源组 LA-Tutorial-RG 以前使用过的同一 Azure 资源组
    逻辑应用名称 LA-ProcessAttachment 逻辑应用和工作流的名称。 消耗逻辑应用和工作流的名称始终相同。
    区域 中国北部 以前使用过的同一区域
    启用日志分析 对于本教程,请保留“关闭”设置。
  4. 确认提供的信息,然后选择“创建”。 在 Azure 部署应用后,选择“转到资源”。

    设计器将会打开并显示一个页面,其中包含简介视频以及常用逻辑应用工作流模式的模板。

  5. 在“模板”下,选择“空白逻辑应用”。

    Screenshot showing Azure portal, Consumption workflow designer, and blank logic app template selected.

接下来,请添加一个触发器,侦听有附件的传入电子邮件。 每个工作流必须从一个触发器开始,在满足触发条件时(例如,发生特定的事件或存在新数据时),该触发器将会激发。 有关更多信息,请参阅快速入门:在多租户 Azure 逻辑应用中创建“消耗”逻辑应用工作流

添加触发器以检查传入的电子邮件

  1. 在设计器中的搜索框下选择“标准”。 在搜索框中,输入“office 365 收到新电子邮件时”。

    此示例使用 Office 365 Outlook 连接器,这需要使用 Microsoft 工作或学校帐户登录。 如果你使用个人 Microsoft 帐户,请使用 Outlook.com 连接器。

  2. 从触发器列表中,为电子邮件提供程序选择名为“收到新电子邮件时”的触发器。

    Screenshot showing Consumption workflow designer with email trigger for

  3. 如果系统要求提供凭据,请登录到你的电子邮件帐户,以便工作流可以连接到该电子邮件帐户。

  4. 现在提供用于检查新电子邮件和运行工作流的触发条件。

    属性 价值 说明
    文件夹 Inbox 要检查的电子邮件文件夹
    仅限带附件 仅获取带有附件的电子邮件。

    注意: 此触发器不删除帐户中的任何电子邮件,仅检查新邮件,并且仅处理与主题筛选器匹配的电子邮件。
    包括附件 获取充当工作流输入的附件,而不是仅仅检查是否有附件。
  5. 在“添加新参数”列表中,选择“主题筛选器”。

  6. 操作中显示“主题筛选器”框之后,如下所述指定主题:

    属性 价值 说明
    主题筛选器 业务分析师 2 #423501 要在电子邮件主题中查找的文本
  7. 若要暂时隐藏触发器的详细信息,请在触发器的标题栏中单击以折叠操作。

    Screenshot that shows collapsed trigger to hide details.

  8. 保存工作流。 在设计器工具栏上选择“保存”。

    逻辑应用工作流现已生成,但它只会检查你的电子邮件,而不执行其他操作。 接下来,添加一个条件,用于指定继续执行工作流中的后续操作所要满足的条件。

检查是否有附件

现在添加一个条件,以便仅选择包含附件的电子邮件。

  1. 在设计器中的触发器下,选择“新建步骤”。

  2. 在“选择操作”搜索框中,选择“内置”。 在搜索框中输入“条件”。

  3. 从操作列表中,选择名为“条件”的操作。

  4. 重命名此条件并提供更好的说明。

    1. 在条件的标题栏中,依次选择省略号 (…) 按钮 >“重命名”。

      Screenshot showing the Condition action with the ellipses button and Rename button selected.

    2. 将默认名称替换为以下说明:“如果电子邮件包含附件和关键主题短语”

  5. 创建一个条件,用于检查包含附件的电子邮件。

    1. 在“和”运算列表下的第一行中,选中最左侧的框。 从显示的动态内容列表中,选择“包含附件”属性。

      Screenshot showing condition action, the second row with the cursor in leftmost box, the opened dynamic content list, and Has Attachment property selected.

    2. 在中间框中,保留运算符“等于”。

    3. 在最右侧的框中输入 true,这是要与触发器输出的“包含附件”属性值进行比较的值。 如果两个值相等,则电子邮件至少有一个附件,条件通过,工作流继续。

      Screenshot showing complete condition.

    在基础工作流定义中(可以通过在设计器上选择“代码视图”来显示),条件如以下示例所示:

    "Condition": {
       "actions": { <actions-to-run-when-condition-passes> },
       "expression": {
          "and": [ {
             "equals": [
                "@triggerBody()?['HasAttachment']",
                  "true"
             ]
          } ]
       },
       "runAfter": {},
       "type": "If"
    }
    
  6. 保存工作流。

测试条件

  1. 在设计器工具栏上,选择“运行触发器”>“运行”。

    此步骤手动启动并运行你的工作流,但在测试电子邮件进入你的收件箱之前不会发生任何情况。

  2. 给你自己发送一封满足以下条件的电子邮件:

    • 电子邮件主题的文本是在触发器的主题筛选器中指定的:Business Analyst 2 #423501

    • 电子邮件有一个附件。 现在,请直接创建一个空的文本文件,然后将该文件附加到电子邮件。

    收到该电子邮件时,工作流会检查其中是否包含附件和指定的主题文本。 如果满足条件,则激发触发器,导致 Azure 逻辑应用实例化并运行一个工作流实例。

  3. 若要检查触发器是否已成功激发以及工作流是否已成功运行,请在逻辑应用菜单中选择“概述”。

    • 若要查看成功激发的触发器,请选择“触发器历史记录”。

    • 若要查看成功运行的工作流,请选择“运行历史记录”。

    如果触发器未激发,或者尽管成功触发但工作流未运行,请参阅排查逻辑应用工作流问题

接下来,定义需要针对 True 分支执行的操作。 若要保存电子邮件及其附件,请从电子邮件正文中删除 HTML,然后在电子邮件和附件的存储容器中创建 Blob。

注意

工作流可以将 False 分支保留为空,并且在电子邮件不包含附件时不执行任何操作。 完成本教程后,可以针对 False 分支添加需要执行的适当操作,作为附加练习。

调用 RemoveHTMLFunction

此步骤将先前创建的 Azure 函数添加到工作流,并将电子邮件正文内容从电子邮件触发器传递给函数。

  1. 在逻辑应用菜单中选择“逻辑应用设计器”。 在“True”分支中选择“添加操作”。

  2. 在“选择操作”搜索框中,选择“内置”。 在搜索框中输入 azure functions,然后选择名为“选择 Azure 函数”的操作。

    Screenshot showing the selected action named Choose an Azure function.

  3. 选择先前创建的函数应用(在本示例中为 CleanTextFunctionApp):

  4. 现在选择你的函数(在本示例中名为 RemoveHTMLFunction)。

  5. 重命名函数形状并提供以下说明:“调用 RemoveHTMLFunction 以清理电子邮件正文”

  6. 现在,请指定函数要处理的输入。

    1. 在“请求正文”下,输入以下带尾随空格的文本:

      { "emailBody":

      在后续步骤中处理此输入时,会一直显示有关 JSON 无效的错误,直到正确将输入格式设置为 JSON。 以前测试此函数时,为此函数指定的输入使用 JavaScript 对象表示法 (JSON)。 因此,请求正文也必须使用同一格式。

      此外,将光标置于“请求正文”框中时,会显示动态内容列表,以便可以选择前述操作中可用的属性值。

    2. 在动态内容列表中的“收到新电子邮件时”下,选择“正文”属性。 请记得在此属性的后面添加右大括号“}”。

      Specify the request body for passing to the function

    完成后,函数的输入如以下示例所示:

    Finished request body to pass to your function

  7. 保存工作流。

接下来,请添加一个操作,以便在存储容器中创建用于保存电子邮件正文的 Blob。

创建用于电子邮件正文的 Blob

  1. 在设计器上的“True”块中,在你的 Azure 函数下选择“添加操作”。

  2. 在“选择操作”搜索框中,选择“所有” 。 在搜索框中输入“创建 blob”,然后选择名为“创建 Blob”的操作。

    Screenshot showing the Azure Blob Storage action named Create blob selected.

  3. 提供你的存储帐户的连接信息,然后选择“创建”,例如:

    属性 价值 说明
    连接名称 AttachmentStorageConnection 连接的描述性名称
    身份验证类型 访问密钥 用于连接的身份验证类型
    Azure 存储帐户名称或终结点 <存储帐户名称> 先前创建的存储帐户的名称(在本示例中为 attachmentstorageacct)
    Azure 存储帐户访问密钥 存储帐户访问密钥<> 先前创建的存储帐户的访问密钥
  4. 重命名“创建 Blob”操作并提供以下说明:“为电子邮件正文创建 Blob”

  5. 在“创建 Blob”操作中提供以下信息:

    属性 价值 描述
    存储帐户名称或 Blob 终结点 使用连接设置 (<storage-account-name>) 选择你的存储帐户(在本示例中为 attachmentstorageacct)。
    文件夹路径 <path-and-container-name> 以前创建的容器的路径和名称。 对于此示例,请选择文件夹图标,然后选择“attachments”容器。
    Blob 名称 <sender-name> 对于此示例,请使用发件人的姓名作为 Blob 名称。 选择此框以显示动态内容列表。 在“收到新电子邮件时”部分选择“发件人”字段。
    Blob 内容 <content-for-blob> 对于此示例,请使用不包含 HTML 的电子邮件正文作为 Blob 内容。 选择此框以显示动态内容列表。 在“调用 RemoveHTMLFunction 以清理电子邮件正文”部分选择“正文”。

    下图显示了要为“创建 Blob”操作选择的字段:

    Screenshot showing information about the HTML-free email body in the Create blob action.

    完成后,操作如以下示例所示:

    Screenshot showing example HTML-free email inputs for the finished Create blob action.

  6. 保存工作流。

检查附件处理情况

  1. 在设计器工具栏上,选择“运行触发器”>“运行”。

    此步骤手动启动并运行你的工作流,但在测试电子邮件进入你的收件箱之前不会发生任何情况。

  2. 给你自己发送一封满足以下条件的电子邮件:

    • 电子邮件主题的文本是在触发器的主题筛选器中指定的:Business Analyst 2 #423501

    • 电子邮件至少有一个附件。 现在,请直接创建一个空的文本文件,然后将该文件附加到电子邮件。

    • 电子邮件的正文中有一些测试内容,例如:Testing my logic app workflow

    如果工作流未触发,或者尽管成功触发但未运行,请参阅排查逻辑应用工作流问题

  3. 检查工作流是否已将电子邮件保存到正确的存储容器。

    1. 在存储资源管理器中,依次展开“仿真器和附加”>“存储帐户”>“attachmentstorageacct(密钥)”>“Blob 容器”>“附件”。

    2. 检查 attachments 容器中是否有电子邮件。

      此时只有电子邮件显示在容器中,因为工作流尚未处理附件。

      Screenshot showing Storage Explorer with only the saved email.

    3. 完成后,删除存储资源管理器中的电子邮件。

  4. (可选)若要测试 False 分支(目前不执行任何操作),可以发送一封不满足条件的电子邮件。

接下来,添加一个用于处理所有电子邮件附件的 For each 循环。

处理附件

若要处理电子邮件中的每个附件,请将 For each 循环添加到工作流。

  1. 返回到设计器。 在“创建用于电子邮件正文的 Blob”操作下,选择“添加操作”。

  2. 在“选择操作”搜索框中,选择“内置”。 在搜索框中输入 for each,然后选择名为“For each”的操作。

    Screenshot showing the selected action named For each.

  3. 重命名该循环并提供以下说明:“针对每个电子邮件附件”

  4. 现在选择供循环处理的数据。 在“针对每个电子邮件附件”循环中,选择“选择前面步骤的输出”框以显示动态内容列表。 在“收到新电子邮件时”部分选择“附件”。

    Screenshot showing dynamic content list with the selected field named Attachments.

    “附件”字段传入一个数组,其中包含电子邮件随附的所有附件。 For each 循环针对每个通过数组传入的项目重复操作。

  5. 保存工作流。

接下来,添加可在 attachments 存储容器中将每个附件另存为 Blob 的操作。

为每个附件创建 Blob

  1. 在设计器的“针对每个电子邮件附件”循环中选择“添加操作”,以指定要对每个已找到的附件执行的任务。

    Screenshot showing loop with the Add an action selected.

  2. 在“选择操作”搜索框中,选择“所有” 。 在搜索框中输入“创建 blob”,然后选择名为“创建 Blob”的操作。

    Screenshot showing the selected action named Create blob.

  3. 重命名“创建 Blob 2”操作并提供以下说明:“为每个电子邮件附件创建 Blob”

  4. 在“为每个电子邮件附件创建 Blob”操作中提供以下信息:

    属性 价值 描述
    存储帐户名称或 Blob 终结点 使用连接设置 (<storage-account-name>) 选择你的存储帐户(在本示例中为 attachmentstorageacct)。
    文件夹路径 <path-and-container-name> 以前创建的容器的路径和名称。 对于此示例,请选择文件夹图标,然后选择“attachments”容器。
    Blob 名称 <attachment-name> 对于此示例,请使用附件的名称作为 Blob 名称。 选择此框以显示动态内容列表。 在“收到新电子邮件时”部分选择“名称”字段。
    Blob 内容 <email-content> 对于此示例,请使用电子邮件内容作为 Blob 内容。 选择此框以显示动态内容列表。 在“收到新电子邮件时”部分选择“内容”。

    Screenshot showing information about the attachment in the Create blob action.

    完成后,操作如以下示例所示:

    Screenshot showing example attachment information for the finished Create blob action.

  5. 保存工作流。

检查附件处理情况

  1. 在设计器工具栏上,选择“运行触发器”>“运行”。

    此步骤手动启动并运行你的工作流,但在测试电子邮件进入你的收件箱之前不会发生任何情况。

  2. 给你自己发送一封满足以下条件的电子邮件:

    • 电子邮件主题包含在触发器的“主题筛选器”属性中指定的文本:Business Analyst 2 #423501

    • 电子邮件至少有两个附件。 现在,请直接创建两个空的文本文件,然后将这两个文件附加到电子邮件。

    如果工作流未触发,或者尽管成功触发但未运行,请参阅排查逻辑应用工作流问题

  3. 检查工作流是否已将电子邮件和附件保存到正确的存储容器。

    1. 在存储资源管理器中,依次展开“仿真器和附加”>“存储帐户”>“attachmentstorageacct(密钥)”>“Blob 容器”>“附件”。

    2. 检查 attachments 容器中是否有电子邮件和附件。

      Screenshot showing Storage Explorer and saved email and attachments.

    3. 完成后,删除存储资源管理器中的电子邮件和附件。

接下来添加一个操作,使工作流发送电子邮件来让你查看附件。

发送电子邮件通知

  1. 返回到设计器。 在“True”分支中,折叠“针对每个电子邮件附件”循环。

  2. 在该循环下,选择“添加操作”。

    Screenshot showing the collapsed for each loop. Under the loop, the Add an action option is selected.

  3. 在“选择操作”搜索框中,选择“标准”。 在搜索框中输入“发送电子邮件”。

  4. 从操作列表中,为电子邮件提供程序选择“发送电子邮件”操作。 若要根据特定的连接器筛选操作列表,可以先选择连接器。

    此示例使用 Office 365 Outlook 连接器继续,该连接器只能通过 Azure 工作或学校帐户使用。 对于个人 Microsoft 帐户,请选择 Outlook.com 连接器。

    Screenshot showing the Office 365 Outlook send email action selected.

  5. 如果系统要求提供凭据,请登录到你的电子邮件帐户,以便 Azure 逻辑应用与你的电子邮件帐户创建连接。

  6. 重命名“发送电子邮件”操作并提供以下说明:“发送电子邮件以供审阅”

  7. 提供以下操作信息并选择要包含在电子邮件中的字段。

    • 若要在编辑框中添加空行,请按 Shift + Enter。
    • 如果在动态内容列表中找不到所需的字段,请选择“收到新电子邮件时”旁边的“查看更多” 。
    属性 价值 说明
    To <recipient-email-address> 为进行测试,可以使用自己的电子邮件地址。
    主题 ASAP - Review applicant for position:主题 要包括的电子邮件主题。 单击此框的内部,输入示例文本,然后在动态内容列表中,选择“收到新电子邮件时”下面的“主题”字段。
    正文 Please review new applicant:

    Applicant name:发件人

    Application file location:路径

    Application email content:正文

    电子邮件的正文内容。 单击此框的内部,输入示例文本,然后从动态内容列表中选择以下字段:

    - “当收到新电子邮件时”
    下的“发件人”字段 -“创建用于电子邮件正文的 Blob”
    下的“路径”字段 -“调用 RemoveHTMLFunction 以清除电子邮件正文”下的“正文” 字段

    Screenshot showing the sample email to send.

    注意

    如果选择了一个包含数组的字段,例如“内容”字段(包含附件的数组),设计器会围绕引用该字段的操作自动添加“For each”循环。 这样,工作流就可以对每个数组项执行该操作。 若要删除该循环,请删除数组的字段,将引用操作移至循环外部,选择循环的标题栏中的省略号 (…),然后选择“删除” 。

  8. 保存工作流。

现在测试以下示例所示的工作流:

Screenshot showing the finished workflow.

运行工作流

  1. 向自己发送一封满足以下条件的电子邮件:

    • 电子邮件主题包含在触发器的“主题筛选器”属性中指定的文本:Business Analyst 2 #423501

    • 电子邮件包含一个或多个附件。 可以重复使用上一测试留下的任何空的文本文件。 如需更逼真的方案,请附加一个简历文件。

    • 电子邮件正文包含以下文本(可以复制和粘贴):

      
      Name: Jamal Hartnett
      
      Street address: 12345 Anywhere Road
      
      City: Any Town
      
      State or Country: Any State
      
      Postal code: 00000
      
      Email address: jamhartnett@outlook.com
      
      Phone number: 000-000-0000
      
      Position: Business Analyst 2 #423501
      
      Technical skills: Dynamics CRM, MySQL, Microsoft SQL Server, JavaScript, Perl, Power BI, Tableau, Microsoft Office: Excel, Visio, Word, PowerPoint, SharePoint, and Outlook
      
      Professional skills: Data, process, workflow, statistics, risk analysis, modeling; technical writing, expert communicator and presenter, logical and analytical thinker, team builder, mediator, negotiator, self-starter, self-managing  
      
      Certifications: Six Sigma Green Belt, Lean Project Management
      
      Language skills: English, Mandarin, Spanish
      
      Education: Master of Business Administration
      
  2. 运行工作流。 如果成功,工作流会向你发送一封以下示例所示的电子邮件:

    Screenshot showing example email sent by logic app workflow.

    如果没有收到任何电子邮件,请检查电子邮件的垃圾邮件文件夹。 垃圾电子邮件筛选器可能会将这些类型的邮件重定向。 否则,如果你不确定工作流是否正常运行,请参阅排查逻辑应用工作流问题

恭喜!你现已创建并运行一个工作流,它可以跨不同的 Azure 服务自动完成任务,并且可以调用某些自定义代码。

清理资源

不再需要此示例时,请删除包含你的逻辑应用工作流和相关资源的资源组。

  1. 在 Azure 门户上的顶级搜索框中输入“资源组”,然后选择“资源组”。

  2. 从“资源组”列表中,选择本教程的资源组。

  3. 在资源组的“概述”页工具栏上,选择“删除资源组”。

  4. 出现确认窗格时,输入资源组名称,然后选择“删除”。

后续步骤

在本教程中,你已创建一个逻辑应用工作流,它通过集成 Azure 存储和 Azure Functions 等 Azure 服务来处理和存储电子邮件附件。 现在,请详细了解可以用来构建逻辑应用工作流的其他连接器。