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

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

本教程演示如何使用 Azure 逻辑应用 生成集成Azure Functions和Azure 存储的示例工作流。 此示例专门创建一个消耗逻辑应用工作流,该工作流处理传入的电子邮件和任何附件,使用Azure Functions分析电子邮件内容,将内容保存到Azure存储,并发送电子邮件以查看内容。

完成后,你的工作流将呈现如下的高级示例:

显示高级示例消耗工作流的屏幕截图。

可以使用标准逻辑应用资源创建类似的工作流,其中某些连接器操作(如 Azure Blob 存储)也可用作基于提供程序的内置操作。 但是,用户体验和教程步骤与消耗版略有不同。

先决条件

  • Azure 帐户和订阅。 获取Azure帐户

  • Azure 逻辑应用支持的电子邮件提供商的电子邮件帐户,例如Office 365 Outlook、Outlook.com 或 Gmail。 有关其他受支持的电子邮件提供商,请参阅 Azure 逻辑应用 中的连接器

    此示例将Office 365 Outlook与工作或学校帐户配合使用。 如果你使用其他电子邮件帐户,则常规步骤保持不变,但用户体验可能稍有不同。 如果使用 Outlook.com,请使用个人 Microsoft 帐户登录。

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

  • 如果您的工作流需要通过防火墙进行通信,而该防火墙将流量限制为特定的 IP 地址,那么该防火墙需要同时允许访问 Azure 逻辑应用 在逻辑应用资源所在的 Azure 区域中使用的入站和出站 IP 地址。 如果工作流还使用 托管连接器,例如 Office 365 Outlook 连接器或 SQL 连接器,或者使用 自定义连接器,那么防火墙还需要允许访问您逻辑应用的 Azure 区域中的 托管连接器出站 IP 地址所有

设置用于存储附件的存储空间。

以下步骤设置 Azure 存储,以便可以将传入的电子邮件和附件存储为 Blob 存储。

  1. Azure 门户,使用Azure帐户凭据登录。

  2. 除非你已有存储帐户,否则请按照这些步骤创建一个存储帐户

    在“基本信息”选项卡中提供以下信息:

    属性 必需 说明
    订阅 < Azure-subscription-name> Azure订阅名称。

    此示例使用「Pay-As-You-Go」。
    资源组 < Azure-resource-group> 用于组织和管理相关资源的 Azure 资源组的名称。

    注意:资源组位于特定的区域。 本教程中的项目可能不在所有区域提供,请尽可能尝试使用同一区域。

    此示例使用 LA-Tutorial-RG。
    存储帐户名称 < Azure-storage-account-name> 唯一的存储帐户名称,必须包含 3-24 个字符,并且只能包含小写字母和数字。

    此示例使用attachmentstorageacct
    区域 < Azure-region> 存储帐户的Azure数据区域。

    此示例使用“中国北部”。
    主服务 < Azure-storage-service> 在存储帐户中使用的主存储类型。 请参阅 Review 选项,了解如何在 Azure 中存储数据。
    “性能” - 标准
    - 高级
    此设置指定支持的数据类型以及用于存储数据的介质。 请参阅存储帐户概述

    此示例使用“标准”
    冗余 - 本地冗余存储
    - 异地冗余存储 (GRS)
    此设置用于存储多个数据副本,以防止数据受到计划内和计划外事件的影响。 有关详细信息,请参阅 Azure 存储 冗余

    此示例使用“异地冗余存储(GRS)”

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

  3. 准备就绪后,选择“查看 + 创建”。 Azure验证存储帐户资源的相关信息后,请选择 Create

  4. Azure部署存储帐户后,请选择Go 到资源。 或者,使用Azure搜索框查找并选择存储帐户。

  5. 按照以下步骤获取存储帐户的访问密钥:

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

    2. 复制存储帐户名称和密钥 1。 将这些值保存在安全位置供稍后使用。

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

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

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

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

    3. 在“新建容器”窗格中提供以下信息

      属性 说明
      名称 附件 容器名称。
      匿名访问级别 容器(对容器和 Blob 进行匿名读取访问)
    4. 选择创建

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

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

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

设置“存储资源管理器”

以下步骤将 存储资源管理器 连接到您的存储帐户,以便您可以确认您的工作流是否正确地将附件保存为存储容器中的 blob。

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

    备注

    如果未出现提示,请在存储资源管理器活动栏上选择Account Management(配置文件图标)。

  2. Select Azure Environment 窗口中,选择Azure环境,然后选择 Next

    此示例接下来选择全球性的多租户Azure

  3. 在显示的浏览器窗口中,使用Azure帐户登录。

  4. 返回到 存储资源管理器 和 Account Management 窗口。 确认选择了正确的 Microsoft Entra 租户和订阅。

  5. 在存储资源管理器活动栏上,选择“Open Connect 对话框

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

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

  8. Connect 到 Azure 存储 窗口中,提供以下信息:

    属性
    显示名称 连接的友好名称
    帐户名称 你的存储帐户名称
    帐户密钥 之前保存的访问密钥
  9. 对于 Storage 域,请确认选中了 Azure core.chinacloudapi.cn,然后选择 Next

  10. “摘要”窗口中确认连接信息,然后选择“连接”

    存储资源管理器创建连接。 你的存储帐户将显示在资源管理器窗口中的模拟器和附加>存储帐户下。

  11. 要查找你的 Blob 存储容器,请在“存储帐户”下展开你的存储帐户(在本示例中为“attachmentstorageacct”)。 在“Blob 容器”下可找到“附件”容器,例如

    显示 存储资源管理器 的截图,查找存储容器。

接下来,创建一个Azure函数应用和一个从内容中删除 HTML 的函数。

创建函数应用

以下步骤将创建工作流调用的 Azure 函数,以便从传入电子邮件中删除 HTML。

  1. 在创建函数之前,请先选择“消耗”计划并按照以下步骤创建函数应用

    1. 在“基本信息”选项卡中提供以下信息:

      属性 必需 说明
      订阅 < Azure-subscription-name> 您以前用于存储帐户的同一个 Azure 订阅。
      资源组 < Azure-resource-group-name> 以前用于存储帐户的同一 Azure 资源组。

      对于此示例,请选择“LA-Tutorial-RG”
      函数应用名称 < function-app-name> 函数应用名称(必须在Azure区域中是唯一的,只能包含字母(不区分大小写)、数字(0-9)和连字符(-)。

      此示例已使用 CleanTextFunctionApp,因此请提供不同的名称,例如 MyCleanTextFunctionApp-your-name<
      运行时堆栈 <编程语言> 首选函数编程语言的运行时。 对于 C# 和 F# 函数,请选择 .NET

      此示例使用 .NET

      只能在门户中对以下语言进行编辑:

      - JavaScript
      - PowerShell
      - TypeScript
      - C# 脚本

      必须本地开发任何 C# 类库、Java和Python函数。
      版本 <版本号> 选择已安装运行时的版本。
      区域 < Azure-region> 以前使用过的同一区域。

      此示例使用“中国北部”。
      操作系统 <您的操作系统 系统会根据选择的运行时堆栈预先选择一个操作系统,但你可以选择支持你所偏好的函数编程语言的操作系统。 仅Windows支持门户内编辑。

      此示例选择 Windows
    2. 选择下一步:存储。 在“存储”选项卡上,提供以下信息:

      属性 必需 说明
      存储帐户 < Azure-storage-account-name> 创建一个存储帐户供函数应用使用。 存储帐户名称必须为 3 到 24 个字符,并且只能包含小写字母和数字。

      此示例使用“cleantextfunctionstorageacct”。

      注意: 此存储帐户包含函数应用,不同于以前创建的用于电子邮件附件的存储帐户。 也可使用现有帐户,但该帐户必须符合存储帐户要求
    3. 完成后,选择“查看 + 创建”。 Azure验证提供的信息后,请选择Create

    4. 在 Azure 部署函数应用资源后,选择转到资源

创建函数以删除 HTML

以下步骤在 C# 中创建一个Azure函数,该函数使用示例代码片段从每个传入电子邮件中删除 HTML。 此函数使电子邮件内容变得更简洁且更易于处理。 可以从工作流中调用此函数。

  1. Azure 门户中,打开函数应用(如果尚未打开)。

  2. 若要稍后在 Azure 门户中运行函数,请将函数应用设置为显式接受来自门户的请求。 在函数应用菜单的“API”下,选择“CORS”。 在“允许的源”下输入 https://portal.azure.cn,然后选择“保存”

  3. 在函数应用菜单中,选择“概述”。 在“函数”选项卡上,选择“创建”

    备注

    如果未看到 “创建 ”按钮, 则必须改为在本地创建函数

  4. 按照以下通用步骤使用 HTTP 触发器 模板在 C# 中创建函数,并为函数提供以下信息:

    参数
    函数名 RemoveHTMLFunction
    授权级别 功能
  5. 在“代码 + 测试”选项卡上输入以下 C# 示例代码,用于删除 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});
    }
    
  6. 完成后,在“代码 + 测试”工具栏上选择“保存”,然后选择“测试/运行”

  7. 在“测试/运行”窗格的“输入”选项卡上的“正文”框中,输入以下示例输入,然后选择“运行”:

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

    函数的输出如下所示:

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

确认函数正常工作后,创建逻辑应用资源和工作流。 尽管本教程演示如何创建从电子邮件中删除 HTML 的函数,Azure 逻辑应用还提供了一个 HTML 到 Text 连接器。

创建消耗逻辑应用资源

  1. 在Azure门户搜索框中,输入 logic app,然后选择 Logic apps

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

    此时会显示“创建逻辑应用”页,其中显示了以下选项

    Plan 说明
    消费 创建一个逻辑应用资源,该资源仅支持在多租户Azure 逻辑应用中运行的一个工作流,并使用 Consumption 模型进行计费
    标准 创建支持多个工作流的逻辑应用资源。 可以使用以下选项:

    - Workflow 服务计划:工作流在单租户 Azure 逻辑应用 中运行,并使用 Standard 模型进行计费

    - 应用服务环境 V3:工作流运行在单租户 Azure 逻辑应用 中,并使用 应用服务环境 方案计费
  3. 创建逻辑应用页面上,选择使用量(多租户)

  4. 在“基本信息”选项卡上,提供有关逻辑应用资源的以下信息

    参数 必需 说明
    订阅 < Azure-subscription-name> 您之前使用的同一个Azure订阅。
    资源组 LA-Tutorial-RG 您以前使用的同一Azure资源组。
    逻辑应用名称 < logic-app-name> 逻辑应用资源名称在各个区域中必须唯一,且只能包含字母、数字、连字符(-)、下划线(_)、括号(())和句点(.)。

    此示例创建一个名为 LA-ProcessAttachment 的逻辑应用资源。 消耗逻辑应用和工作流的名称始终相同。
    区域 中国北部 以前使用过的同一区域。
    启用日志分析 只在要启用诊断日志记录时,才更改此选项。 对于本教程,请保留默认选择。

    注意:此选项仅适用于消耗逻辑应用

    备注

    在支持可用性区域的 Azure 区域中,新建和现有的消耗逻辑应用工作流会自动启用可用性区域。 有关详细信息,请参阅Azure Functions 的可靠性使用区域冗余和可用性区域保护逻辑应用免受区域故障的影响

  5. 准备就绪后,选择“查看 + 创建”。 Azure验证逻辑应用资源的相关信息后,请选择 Create

  6. Azure部署逻辑应用资源后,请选择转到资源。 或者,使用Azure搜索框查找并选择逻辑应用资源。

添加用于监视传入电子邮件的触发器

以下步骤添加了一个触发器,用于等待包含附件的传入电子邮件。

  1. 在逻辑应用菜单中的“开发工具”下,选择“逻辑应用设计器”

  2. 在工作流设计器中,按照以下常规步骤添加名为Office 365 Outlook当有新电子邮件到达时触发器

    Office 365 Outlook连接器要求使用Microsoft工作或学校帐户登录。 如果您使用的是个人 Microsoft 账户,请使用 Outlook.com 连接器。

  3. 登录到你的电子邮件帐户,这会在工作流和电子邮件帐户之间创建连接。

  4. 在触发器信息框中,通过“高级参数”列表添加以下参数(如果未显示),并提供以下信息

    参数 说明
    重要性 任意 指定所需电子邮件的重要性级别。
    仅限带附件 仅获取带有附件的电子邮件。

    注意: 此触发器不删除帐户中的任何电子邮件,仅检查新邮件,并且仅处理与主题筛选器匹配的电子邮件。
    包括附件 将附件作为输入供工作流使用,而不仅仅是检查是否有附件。
    文件夹 收件箱 要检查的电子邮件文件夹。
    主题筛选器 业务分析师 2 #423501 指定要在电子邮件主题中查找的文本。

    完成后,触发器如以下示例所示:

    截图显示消耗工作流和 Office 365 Outlook 触发器。

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

    工作流现已生成,但除了检查电子邮件,不能执行任何操作。 接下来,添加一个条件,用于指定继续执行工作流中的后续操作所要满足的条件。

添加用于检查附件的条件

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

  1. 在工作流设计器中,按照这些常规步骤添加名为条件控制操作

  2. 在“条件”操作信息窗格中,将该操作重命名为“如果电子邮件包含附件和关键主题短语”

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

    1. 参数选项卡的AND列表下的第一行中,选择左侧的框,然后选择动态内容列表(闪电图标)。 在此列表中,在触发器部分中,选择“包含附件”输出。

      提示

      如果未看到“包含附件”输出,请选择“查看更多”

      屏幕截图显示了条件操作、第二行,光标置于最左侧的框中,打开了动态内容列表,并且已选择“包含附件”。

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

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

      屏幕截图显示了完整条件。

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

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

测试你的状态

  1. 在设计器工具栏上选择运行>运行

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

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

    • 电子邮件主题包含你在触发器的“主题筛选器”中指定的文本:“业务分析师 2 #423501”

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

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

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

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

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

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

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

备注

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

调用 RemoveHTMLFunction

以下步骤添加之前创建的Azure函数,该函数接受来自电子邮件触发器的电子邮件正文内容作为输入。

  1. 在逻辑应用菜单中的“开发工具”下,选择“逻辑应用设计器”。 在 True 分支中,选择“添加操作”

  2. 请按照这些常规步骤添加名为选择 Azure 函数Azure Functions操作。

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

  4. 选择你的函数(在本示例中名为 RemoveHTMLFunction),然后选择“添加操作”

  5. Azure Functions 操作信息窗格中,使用 Call RemoveHTMLFunction 重命名操作。

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

    1. 对于请求正文,请输入以下文本并确保其后有一个空格:

      { "emailBody":

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

    2. 在“请求正文”框内选择,然后选择动态内容列表(闪电图标),这样您就可以选择之前操作的输出。

    3. 在动态内容列表中“收到新电子邮件时”下,选择“正文”输出。 在“请求正文”框中解析该值后,请记得添加右大括号(}

      Screenshot 显示 Azure 函数信息框,内有动态内容列表,Body 被选中。

    完成后,Azure函数如以下示例所示:

    Screenshot 显示已完成的 Azure 函数,其中包含要传递给您函数的请求正文内容。

  7. 保存工作流。

接下来添加一个操作,该操作创建用于存储电子邮件正文的 Blob。

添加用于为电子邮件正文创建 Blob 的操作

以下步骤创建一个 Blob,用于将电子邮件正文存储在存储容器中。

  1. 在设计器上,在条件的 True 块中,在 Azure 函数下,选择添加动作

  2. 按照这些常规步骤,添加名为Azure Blob 存储的操作创建 blob

  3. 提供你的存储帐户的连接信息,例如:

    参数 必需 说明
    连接名称 < 连接名称> 连接的描述性名称。

    此示例使用“AttachmentStorageConnection”
    身份验证类型 < 认证类型> 要用于连接的身份验证类型。

    此示例使用“访问密钥”
    Azure 存储帐户名称或 Blob 终结点 < 存储帐户名称> 之前创建的存储帐户的名称。

    此示例使用attachmentstorageacct
    Azure 存储 帐户访问密钥 < > 之前创建的存储帐户的访问密钥。
  4. 完成后,选择“新建”

  5. 在“创建 Blob”操作信息窗格中,将操作重命名为“为电子邮件正文创建 Blob”

  6. 提供以下操作信息:

    提示

    如果在动态内容列表中找不到指定的输出,请选择操作名称旁边的“查看更多”

    参数 必需 说明
    存储帐户名称或 Blob 终结点 使用连接设置(<storage-account-name-or-blob-endpoint>) 选择包含你的存储帐户名称的选项。

    本示例使用 https://attachmentstorageacct.blob.core.chinacloudapi.cn
    文件夹路径 <路径和容器名称 以前创建的容器的路径和名称。

    对于此示例,请选择文件夹图标,然后选择“attachments”
    Blob 名称 < sender-name> 对于此示例,请使用发件人姓名作为 Blob 名称。

    1. 在Blob 名称框内选择,然后选择动态内容列表选项(闪电图标)。

    2.从“新电子邮件到达时”部分,选择“发件人”。
    Blob 内容 < 已清理邮件正文> 对于此示例,请使用不包含 HTML 的电子邮件正文作为 Blob 内容。

    1.在“Blob 内容”框中选择,然后选择动态内容列表选项(闪电图标)。

    2.在“调用 RemoveHTMLFunction”部分中,选择“正文”。

    以下屏幕截图显示了为“为电子邮件正文创建 Blob”操作选择的输出:

    屏幕截图显示了“创建 Blob”操作中的存储容器、发件人以及无 HTML 电子邮件正文。

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

    屏幕截图显示了已完成的“创建 Blob”操作的示例电子邮件正文信息。

  7. 保存工作流。

检查附件处理情况

  1. 在设计器工具栏上选择运行>运行

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

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

    • 电子邮件主题包含你在触发器的“主题筛选器”参数中指定的文本:“业务分析师 2 #423501”

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

    • 电子邮件正文中包含一些测试内容,例如:“测试我的逻辑应用工作流”

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

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

    1. 在 存储资源管理器 中,展开 Emulator & Attached>Storage Accounts>attachmentstorageacct(Key)>Blob 容器>attachments

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

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

      屏幕截图显示仅包含保存的电子邮件的存储资源管理器。

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

  4. 可选地,为了测试当前不执行任何操作的 False 分支,您可以尝试发送一封不符合条件的电子邮件。

接下来,添加一个用于处理每个电子邮件附件的“For each”循环

添加用于处理附件的循环

以下步骤添加一个循环来处理电子邮件中的每个附件。

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

  2. 按照这些常规步骤添加名为 For each Control 操作

  3. 在“For each”操作信息窗格中,将操作重命名为“For each email attachment”

  4. 现在选择该循环要处理的内容。

    1. 在“对每个电子邮件附件”循环中,在“从先前步骤选择输出”框中进行选择,然后选择动态内容列表选项(闪电图标)。

    2. 在“收到新电子邮件时”部分选择“附件”。

      “附件”输出包含一个数组,该数组包含电子邮件中的所有附件。 “For each”循环对每个数组项重复操作

      提示

      如果未看到“附件”,请选择“查看更多”

      屏幕截图显示了动态内容列表,其中选择了名为“附件”的输出。

  5. 保存工作流。

接下来,添加一个操作,将每个附件存储为 Blob 格式,并保存到“attachments”存储容器中。

添加一项操作,以为每个附件创建 Blob

以下步骤添加一个操作来为每个附件创建数据块。

  1. 在设计器中的“每个电子邮件附件”循环中,选择“添加操作”

  2. 按照这些常规步骤,添加名为Azure Blob 存储的操作创建 blob

  3. 在“创建 Blob”操作信息窗格中,将操作重命名为“为电子邮件附件创建 Blob”

  4. 提供以下操作信息:

    提示

    如果在动态内容列表中找不到指定的输出,请选择操作名称旁边的“查看更多”

    参数 必需 说明
    存储帐户名称或 Blob 终结点 使用连接设置(<storage-account-name-or-blob-endpoint>) 选择包含你的存储帐户名称的选项。

    本示例使用 https://attachmentstorageacct.blob.core.chinacloudapi.cn
    文件夹路径 <路径和容器名称 以前创建的容器的路径和名称。

    对于此示例,请选择文件夹图标,然后选择“attachments”
    Blob 名称 <附件名称> 对于此示例,请使用附件名称作为 Blob 名称。

    1. 在Blob 名称框内选择,然后选择动态内容列表选项(闪电图标)。

    2. 从“收到新电子邮件时”部分中选择“名称”
    Blob 内容 < email-content> 对于此示例,请使用电子邮件内容作为 Blob 内容。

    1.在“Blob 内容”框中选择,然后选择动态内容列表选项(闪电图标)。

    2. 从“收到新电子邮件时”部分,选择“内容”

    备注

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

    以下屏幕截图显示了为“为电子邮件附件创建 Blob”操作选择的输出:

    屏幕截图显示了“创建 Blob”操作中的存储容器和附件信息。

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

    屏幕截图显示了已完成的“创建 Blob”操作的示例附件信息。

  5. 保存工作流。

重新测试附件处理

  1. 在设计器工具栏上选择运行>运行

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

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

    • 电子邮件主题包含你在触发器的“主题筛选器”参数中指定的文本:“业务分析师 2 #423501”

    • 电子邮件包含两个或更多个附件。 现在,请直接创建两个空的文本文件,然后将这两个文件附加到电子邮件。

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

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

    1. 在 存储资源管理器 中,展开 Emulator & AttachedStorage Accountsattachmentstorageacct (Key)Blob 容器attachments

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

      Screenshot 显示存储资源管理器和保存的电子邮件和附件

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

接下来,在工作流中添加一个操作,用于发送附件审阅电子邮件。

添加一项用于发送电子邮件的操作

以下步骤会添加一个操作,让工作流发送附件审阅电子邮件。

  1. 返回到工作流设计器。 在“True”分支的“For each email attachment”循环下,选择“添加操作”

  2. 遵循以下常规步骤添加名为发送电子邮件Office 365 Outlook操作

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

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

  4. 在“发送电子邮件”操作信息窗格中,将操作重命名为“发送审阅电子邮件”

  5. 提供以下操作信息并选择要包含在电子邮件中的输出:

    提示

    如果在动态内容列表中找不到指定的输出,请选择操作名称旁边的“查看更多”

    参数 必需 说明
    < recipient-email-address> 出于测试的目的,请使用你自己的电子邮件地址。
    主题 <电子邮件主题> 要包含的电子邮件主题。

    此示例使用 ASAP - 审阅职务申请人:,以及来自触发器的主题输出。

    1. 在“主题”框中,输入示例文本,并在后面留一个空格

    2.选择“主题”框,然后选择动态内容列表选项(闪电图标)

    3.在列表中的“收到新电子邮件时”下,选择“主题”
    正文 <电子邮件正文> 要包含的电子邮件正文。

    本示例使用“请审阅新申请人:”,名为“发件人”的触发器输出、“为电子邮件正文创建 Blob”操作的“路径”输出,以及“调用 RemoveHTMLFunction”操作的“正文”输出。

    1.在“正文”框中,输入示例文本“请审阅新申请人:”

    2. 在新行中,输入示例文本申请人姓名:,并添加触发器的发件人输出。

    3.在新行中,输入示例文本“申请文件位置:”,并添加“为电子邮件正文创建 Blob”操作的“路径”输出

    4. 在新行中,输入示例文本申请电子邮件内容:,并添加调用 RemoveHTMLFunction 操作的正文输出。

    备注

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

    以下屏幕截图显示了已完成的“发送电子邮件”操作

    屏幕截图显示了要发送的示例电子邮件。

  6. 保存工作流。

已完成的工作流现在如以下示例所示:

屏幕截图显示了已完成的工作流。

测试工作流

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

    • 电子邮件主题包含你在触发器的“主题筛选器”参数中指定的文本:“业务分析师 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. 运行工作流。 如果成功,工作流会向你发送一封以下示例所示的电子邮件:

    屏幕截图显示了逻辑应用工作流发送的示例电子邮件。

    如果没有收到任何电子邮件,请检查电子邮件的垃圾邮件文件夹。 否则,如果你不确定工作流是否正常运行,请参阅排查逻辑应用工作流问题

恭喜,你创建了一个工作流,并运行了一个工作流,该工作流可跨不同的Azure服务自动执行任务并调用一些自定义代码!

清理资源

你的工作流将继续运行,直到你禁用或删除逻辑应用资源。 不再需要此示例时,删除包含你的逻辑应用和相关资源的资源组。

  1. 在Azure门户搜索框中,输入资源组,然后选择资源组

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

  3. 在资源组菜单中,选择“概述”

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

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

后续步骤

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