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

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

本教程介绍如何使用 Azure 逻辑应用构建集成 Azure Functions 和 Azure 存储的示例工作流。 具体而言,此示例将创建一个消耗逻辑应用工作流,用于处理传入的电子邮件和任何附件,使用 Azure Functions 分析电子邮件内容,将内容保存到 Azure 存储,并发送电子邮件以审阅内容。

完成后,你的工作流类似于以下概括示例:

屏幕截图显示了简要“消耗”工作流的示例。

提示

若要了解详细信息,可以向 Azure Copilot 提出以下问题:

  • 什么是 Azure 逻辑应用?
  • 什么是 Azure Functions?
  • 什么是 Azure 存储?
  • 什么是消耗逻辑应用工作流?

若要查找 Azure Copilot,请在 Azure 门户 工具栏上,选择“Copilot”

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

先决条件

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

  • Azure 逻辑应用支持的电子邮件提供程序(例如 Office 365 Outlook、Outlook.com 或 Gmail)提供的电子邮件帐户。 对于其他受支持的电子邮件提供程序,请参阅 Azure 逻辑应用的连接器

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

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

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

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

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

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

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

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

    properties 需要 说明
    订阅 <Azure-subscription-name> Azure 订阅名称。

    此示例使用“即用即付”。
    资源组 <Azure-resource-group> 用于组织和管理相关资源的 Azure 资源组的名称。

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

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

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

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

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

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

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

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

  4. 在 Azure 部署你的存储帐户后,请选择“转到资源”。 或者,使用 Azure 搜索框找到并选择你的存储帐户。

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

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

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

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

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

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

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

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

      属性 价值 描述
      Name attachments 容器名称。
      匿名访问级别 容器(对容器和 Blob 的匿名读取访问权限)
    4. 选择创建

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

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

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

设置存储资源管理器

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

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

    注意

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

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

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

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

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

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

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

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

  8. 在“连接到 Azure 存储”窗口中提供以下信息

    属性
    显示名称 连接的易记名称
    帐户名称 你的存储帐户名称
    帐户密钥 之前保存的访问密钥
  9. 对于“存储域”,确认已选择 Azure (core.chinacloudapi.cn),然后选择“下一步”

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

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

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

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

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

创建函数应用

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

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

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

      properties 需要 说明
      订阅 <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 函数。
      版本 <version-number> 选择已安装的运行时的版本。
      区域 <Azure-region> 先前使用的同一区域。

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

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

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

      此示例使用“cleantextfunctionstorageacct”

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

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

创建函数以删除 HTML

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

有关详细信息,请参阅在 Azure 门户中创建首个函数。 为了扩展函数创建方法,还可以在本地创建函数

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

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

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

  4. 在“创建函数”窗格中,选择“HTTP 触发器: C#”>“下一步”

    注意

    如果未看到 C# 版本,请确保

  5. 提供函数的以下信息,然后选择“创建”

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

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

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

    函数的输出如下所示:

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

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

创建消耗逻辑应用资源

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

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

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

  4. 在“创建逻辑应用”页面上,选择“消耗(多租户)”

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

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

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

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

    注意

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

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

  7. 在 Azure 部署你的逻辑应用资源后,请选择“转到资源”。 或者,使用 Azure 搜索框查找并选择你的逻辑应用资源。

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

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

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

  2. 在工作流设计器中,按照这些常规步骤添加名为“收到新电子邮件时”的“Office 365 Outlook”触发器

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

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

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

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

    注意: 此触发器不删除帐户中的任何电子邮件,仅检查新邮件,并且仅处理与主题筛选器匹配的电子邮件。
    包括附件 获取充当工作流输入的附件,而不是仅仅检查是否有附件。
    文件夹 Inbox 要检查的电子邮件文件夹。
    主题筛选器 业务分析师 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”操作信息窗格中,将操作重命名为“调用 RemoveHTMLFunction”

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

    1. 对于“请求正文”,请输入以下文本(包括尾部空格)

      { "emailBody":

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

    2. 选择“请求正文”框,然后选择动态内容列表(闪电图标),以便可以选择先前操作的输出

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

      屏幕截图显示了 Azure 函数信息框,其中选择了动态内容列表和“正文”。

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

    屏幕截图显示了已完成的 Azure 函数,以及要传递给函数的请求正文内容。

  7. 保存工作流。

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

添加操作以便为电子邮件正文创建 Blob

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

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

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

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

    参数 必须 说明
    连接名称 <connection-name> 此连接的描述性名称。

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

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

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

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

  6. 提供以下操作信息:

    提示

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

    参数 必须 描述
    存储帐户名称或 Blob 终结点 使用连接设置(<存储帐户名称或 Blob 终结点>) 选择包含你的存储帐户名称的选项。

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

    对于此示例,请选择文件夹图标,然后选择“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. 在存储资源管理器中,依次展开“仿真器和附加”>“存储帐户”>“attachmentstorageacct (密钥)”>“Blob 容器”>“attachments”

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

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

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

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

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

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

添加用于处理附件的循环

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

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

  2. 按照这些常规步骤添加名为“For each”的“控制”操作

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

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

    1. 在“For each email attachment”循环中,选择“选择先前步骤的输出”框,然后选择动态内容列表选项(闪电图标)

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

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

      提示

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

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

  5. 保存工作流。

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

添加一个操作来为每个附件创建 Blob

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

  1. 在设计器中的“For each email attachment”循环中,选择“添加操作”

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

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

  4. 提供以下操作信息:

    提示

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

    参数 必须 描述
    存储帐户名称或 Blob 终结点 使用连接设置(<存储帐户名称或 Blob 终结点>) 选择包含你的存储帐户名称的选项。

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

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

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

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

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

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

    注意

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

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

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

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

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

  5. 保存工作流。

重新测试附件处理

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

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

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

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

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

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

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

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

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

      屏幕截图显示了存储资源管理器和已保存的电子邮件和附件。

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

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

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

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

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

  2. 按照这些常规步骤添加名为“发送电子邮件”的“Office 365 Outlook”操作

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

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

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

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

    提示

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

    参数 必须 说明
    To <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 Functions 等 Azure 服务来处理和存储电子邮件附件。 现在,请详细了解可以用来构建逻辑应用工作流的其他连接器。