跳到主要内容

在 Power Automate 中将电子邮件正文和所有附件转换为一个合并的 PDF 文件:Outlook + PDF4me 的 7 步工作流程

· 阅读需 27 分钟
SEO and Content Writer

以电子邮件为主导的工作流程中最痛苦的部分不是电子邮件本身,而是…… 以及随之而来的一切邮件正文包含上下文信息(谁发的、为什么发的、该怎么做),附件包含相关文件(发票、表格、已签署的合同),将它们分开存储意味着以后你需要点击三次才能重建邮件。本教程将构建一个精确的模式。 动力自动化PDF4me 转换为 PDFPDF4me 合并多个 PDF 文件前景Dropbox以及一个“应用到每个”循环。七个流程操作。一封收到的电子邮件被接收。一个合并后的 PDF 文件被发送出去,先发送正文,然后逐个发送附件,自动添加时间戳并放入您的存档文件夹。

流程概览
1. When a new email arrives (V3)
Outlook trigger on To [email protected]. Include Attachments Yes, Only with Attachments Yes.
2. Initialize variable
Name email, Type Array. Buffer for every PDF binary the flow produces.
3. Convert to PDF Body
PDF4me action. Content triggerOutputs body/body (the HTML body), File Name email-body.html. Returns the body as PDF.
4. Append to array (email body)
Push base64ToBinary on the converted body PDF onto the email array. This is page 1 of the final document.
5. Apply to each attachment
Loop triggerOutputs body/attachments. Convert each to PDF, then Append to array with base64ToBinary.
6. Merge multiple PDFs
PDF4me action. Body/docContent the email array, Output File Name Email Attachment Merge Output.pdf.
7. Create file
Dropbox /blog data/merge blog template/output. File Name concat(merge-, formatDateTime(utcNow(), yyyyMMdd-HHmmss), .pdf).
简短版

展望 当收到新邮件时(V3) 当消息到达时,触发器立即触发。 [email protected]一个名为 的数组变量 电子邮件 打开。PDF4me 转换为 PDF 首先将 HTML 正文转换为 PDF,转换后的正文作为第 1 页添加到数组中。 适用于每个 遍历每个附件(本次运行包含两个 DOCX 文件): 3页.docxDocx_2Pages.docx),将每个文件转换为 PDF,并依次追加。PDF4me 合并多个PDF文件 Dropbox 会读取整个数组并生成一个合并后的 PDF 文件。 创建文件 将其写回为 merge-20260611-103323.pdf一个带有时间戳且永不冲突的名称。正文在前,附件按顺序排列,一个PDF文件,一个文件夹,随时可供审核。

基于原因的问答

为什么要先把正文转换成PDF格式? 正文是上下文:谁发的,为什么发的,该怎么做。未来的你阅读合并后的PDF文件时,希望第一页能交代清楚背景,然后再查看附件。转换 triggerOutputs()?['body/body'] 首先将 HTML 正文合并到 PDF 中,意味着合并操作会将消息本身视为主要文档,而不是单独的文本转储。

为什么主体和附件都使用同一个数组变量? 合并操作需要一个有序的集合。初始化一次,在步骤 4 中推送正文,在步骤 5 中推送每个转换后的附件,数组就能准确地按照所需的文档顺序排列。如果使用两个独立的数组,后续的撰写操作就必须将它们连接起来,这只会增加实现相同结果所需的额外代码。

为什么 base64 转二进制 每次推动都这样吗? PDF4me 的 PDF 转换功能会将输出结果以 base64 字符串的形式包装。 $contentOutlook 附件以 base64 编码格式接收。 内容字节PDF4me 合并多个 PDF 文件需要二进制缓冲区。 base64ToBinary(...) 调用桥接器会同时调用这两个数据源,只是指向不同的属性名称。跳过转换,合并操作会因“内容无效”而报错。

为什么输出名称要带时间戳? 如果文件名相同,同一发件人在一小时内发送的两封电子邮件将会冲突。 concat('merge-', formatDateTime(utcNow(), 'yyyyMMdd-HHmmss'), '.pdf') 产生诸如 merge-20260611-103323.pdf可按字典序排序,精度为二分之一,可立即读取为 UTC 时间戳。


您将获得

输入: 任何发送到受监控地址(此处为地址)的电子邮件 [email protected])以及一个或多个附件。本教程使用简短的消息正文(“嗨,希望你一切都好……”)和两个 DOCX 附件(3Page.docxDocx_2Pages.docx)。 输出: 一个单独的合并 PDF 文件被拖放到 /blog data/merge blog template/output/名为 merge-YYYYMMDD-HHmmss.pdf第 1 页是正文。从第 2 页开始,依次显示附件,使用 Aspose Words 渲染。

收到的电子邮件

Gmail 邮件视图显示邮件收件人为 test,邮件正文为:您好,希望您一切顺利。我写这封邮件是为了向您汇报当前项目的进展情况。邮件中还附上了一些相关文件供您参考。此致,测试开发人员。邮件中包含两个附件,以 Word 文档缩略图的形式显示:3Page.docx 和 Docx_2Pages.docx。邮件中可见“由 Gmail 扫描”的提示。

该流程会监视 Outlook 收件箱。 [email protected]一旦 Gmail 转发邮件或此地址直接收到邮件,触发器就会启动。

两次运行后的输出 Dropbox 文件夹

Dropbox 输出文件夹列表包含 merge-20260611-103323.pdf(165.43 KB)和 merge-20260611-102949.pdf(171.37 KB),每个文件均以流程运行的 UTC 时间戳命名。

合并后的PDF文件第1页

merge-20260611-103323.pdf 预览显示并排显示两页,左侧页面是转换后的邮件正文“您好,希望您一切顺利。我写这封信是为了向您汇报当前项目的进展情况。附件中还有一些相关文件供您参考。此致,测试开发人员。”,右侧页面是 3Page.docx 文件的第一页,标记为“第 1 页”。

第 1 页是转换后的电子邮件正文。第 2 页及之后是第一个附件(3页.docx第二个附件(Docx_2Pages.docx紧随其后。一份PDF文件,完整信息已重构。


你需要什么

  • 动力自动化打开 Power Automate任何包含高级连接器的套餐(PDF4me Connect 属于高级套餐)。
  • PDF4me API密钥获取您的 API 密钥首次添加 PDF4me 操作时进行连接。
  • Office 365 Outlook对于 当收到新邮件时(V3) 触发并读取附件 内容字节任何连接器可以进行身份验证的收件箱都可以使用。
  • Dropbox (或 SharePoint、OneDrive、Google Drive)。用于生成最终的合并 PDF 文件。
  • 一封带有附件的电子邮件本教程使用了两个 DOCX 示例。 3页.docxDocx_2Pages.docx将它们通过电子邮件发送到受监控的地址,以镜像每个屏幕截图。

首先获取样本和预期输出。 下载这两个 DOCX 文件,将它们作为附件发送到您关注的邮箱地址,然后发布流程。首次运行应该会生成一个结果。 merge-YYYYMMDD-HHmmss.pdf 它与链接的示例完全一致(只有时间戳不同)。


流程概览

  1. Outlook:收到新邮件时(V3) (扳机)。
  2. 初始化变量 命名 email (大批)。
  3. PDF4me:转换为 PDF(正文)读取 HTML 正文,返回 PDF。
  4. 追加到数组变量base64ToBinary 在改装后的车身上。
  5. 适用于每个triggerOutputs()?['body/attachments']
    • PDF4me:转换为 PDF 附件。
    • 追加到数组变量base64ToBinary 在转换后的PDF文件上。
  6. PDF4me:将多个 PDF 文件合并成一个 PDF 文件输入数组,输出一个 PDF 文件。
  7. Dropbox:创建文件文件名表达式会添加 UTC 时间戳。

完整流程概述

Power Automate 流程画布显示了从上到下排列的七个操作:收到新邮件时 V3、初始化变量、转换为 PDF 正文、追加到数组变量(邮件正文)、应用于每个包含“转换为 PDF”和“追加到数组变量”操作的邮件、将多个 PDF 文件合并为一个 PDF 文件、创建文件

七个操作。“应用于每张卡片”按钮显示“1/2”,因为测试邮件有两个附件。PDF4me 在流程中出现三次:转换正文、转换附件、合并所有内容。


步骤 1:Outlook:收到新邮件时(V3)

目前为止的流程: 仅触发。

  1. 动力自动化 点击 创造, 选择 自动化云流
  2. 给流程命名(例如: Email to Consolidated PDF), 挑选 Office 365 Outlook:收到新邮件时(V3) 以点击作为触发器 创造
  3. 连接 您的 Office 365 邮箱。
  4. 扩张 高级参数显示全部 显示筛选选项。
  5. 配置
    • [email protected] (筛选出只有发送到此地址的邮件才能触发流程)
    • 包含附件Yes
    • 仅带附件Yes

触发器配置

Power Automate Office 365 Outlook 当收到新邮件时 V3 触发器 高级参数展开显示 要设置为 test@ynoox.ch,包含附件是,仅带附件是,已连接到 Office 365 Outlook

提示。 仅限附件 是 正是这一点阻止了流程在每个内部通知、日历邀请或回复时都触发。结合使用 对专用别名进行过滤(例如, [email protected]) 创建一个干净的接收地址,该地址只接收您真正想要合并的邮件。


步骤 2:初始化变量电子邮件

目前为止的流程: 触发器加上初始化变量。

打开一个空数组来收集正文 PDF 和所有附件 PDF。

  1. 点击 + 新步骤, 挑选 初始化变量
  2. 配置
    • 姓名email
    • 类型Array
    • 价值:留空

初始化变量配置

Power Automate 初始化变量操作配置了名称(电子邮件)和类型(数组),以及一个空的值字段。

步骤 3:PDF4me:转换为 PDF(正文)

目前为止的流程: 触发器 + 初始化变量 + 转换为 PDF 正文。

Outlook 触发器以 HTML 格式发出邮件正文。 body/bodyPDF4me 转 PDF 功能直接读取 HTML,因此整个转换过程只需一次操作。

  1. 点击 + 新步骤, 搜索 PDF4me, 挑选 转换为 PDF
  2. 重命名 采取行动 转换为 PDF 正文 因此,步骤 5 中的“转换为 PDF”操作稍后可以拥有自己的清晰名称。
  3. 连接 PDF4me 连接时请使用您的 API 密钥(仅限首次连接)。
  4. 配置
    • 文件内容 (表达式,点击) fx): triggerOutputs()?['body/body']
    • 文件名email-body.html

转换为 PDF 正文配置

Power Automate PDF4me“转换为 PDF 正文”操作,文件内容设置为触发器“正文”标记(表达式 triggerOutputs body/body),文件名设置为 email-body.html,已连接到 PDF4me Connect

.html 文件名扩展名告诉 PDF4me 使用哪个渲染器。发送 .docx.xlsx.png, 或者 .jpg 同样,同一个操作就能轻松处理所有这些问题。


步骤 4:追加到数组变量(电子邮件正文)

目前为止的流程: 触发器 + 初始化变量 + 转换为 PDF 正文 + 追加(电子邮件正文)。

将转换后的正文 PDF 文件推送到目标位置。 email 数组作为第 1 页。

  1. 点击 + 新步骤, 挑选 追加到数组变量
  2. 重命名 采取行动 将内容追加到数组变量(电子邮件正文) 为了更清楚地说明。
  3. 配置
    • 姓名email
    • 价值 (表达): base64ToBinary(body('Convert_to_PDF_Body')?['$content'])

追加电子邮件正文配置

Power Automate 追加数组变量(电子邮件正文)操作,名称为电子邮件,值设置为表达式 base64ToBinary body open quote Convert_to_PDF_Body close quote close paren question dollar content close bracket shown in the expression editor

步骤 5:应用于每个附件,转换并追加

目前为止的流程: 触发器 + 初始化变量 + 转换为 PDF 正文 + 追加(电子邮件正文) + 应用于每个。

遍历每个附件,将每个附件转换为 PDF,并依次添加,以便最终合并时能够保持附件顺序。

步骤 5a:应用于每个(选择来源)

  1. 点击 + 新步骤, 挑选 适用于每个
  2. 配置
    • 从之前的步骤中选择一个输出。 (表达): triggerOutputs()?['body/attachments']
Power Automate 将“应用”应用于每个操作,并从先前步骤中选择一个输出,该输出设置为“附件”令牌,解析表达式 triggerOutputs body/attachments 显示在工具提示中。

步骤 5b:转换为 PDF 格式(附件)

  1. 在循环内点击 添加操作, 挑选 PDF4me:转换为 PDF
  2. 配置
    • 文件内容 (表达): base64ToBinary(items('Apply_to_each')?['contentBytes'])
    • 文件名 (动态内容):选择 姓名 从“应用于每个当前项目”
在“应用到每个”中,“Power Automate 转换为 PDF”操作,文件内容设置为 base64ToBinary 项,应用到每个 contentBytes,文件名设置为当前附件的名称标记,表达式编辑器打开,显示 base64ToBinary 项,应用到每个 contentBytes

姓名 动态内容令牌在运行时解析为 items('Apply_to_each')?['name']因此,每个附件都使用其原始文件名进行转换(文件名包含源扩展名,并告诉 PDF4me 使用哪个渲染器)。

Power Automate 转换为 PDF 文件名字段工具提示显示已解析的表达式项 Apply_to_each 名称、名称标记,来自 Apply to each 当前附件

步骤 5c:将转换后的附件添加到数组变量中

  1. 下面这行代码在同一个循环内转换为PDF格式, 添加操作, 挑选 追加到数组变量
  2. 配置
    • 姓名email
    • 价值 (表达): base64ToBinary(body('Convert_to_PDF')?['$content'])
Power Automate 追加数组变量,应用到每个对象,名称电子邮件,值设置为 base64ToBinary 正文,将内容转换为 PDF 美元,显示在表达式编辑器中。

这两个物业名称很重要。 Outlook 附件字节流 内容字节PDF4me 转换为 PDF 输出的功能仍然存在。 $content两者都是 base64 编码。粘贴表达式时请保持名称一致,循环就能正常运行。


步骤 6:PDF4me:合并多个 PDF 文件

目前为止的流程: 触发器 + 初始化变量 + 转换为 PDF 正文 + 追加(正文) + 应用于每个 + 合并多个 PDF。

整个 email 数组(首先是正文 PDF,然后是附件 PDF,按附件顺序)会进入单个 Merge 调用。

  1. 在“应用到每个循环”下方单击 + 新步骤, 搜索 PDF4me, 挑选 将多个 PDF 文件合并成一个 PDF 文件
  2. 配置
    • 正文/文档内容选择 email 变量标记
    • 输出文件名Email Attachment Merge Output.pdf

合并操作配置

Power Automate PDF4me 将多个 PDF 文件合并为一个 PDF 文件的操作,将 Body/docContent 设置为电子邮件变量,输出文件名设置为“电子邮件附件合并输出.pdf”。动态内容面板打开,显示变量包括:电子邮件、应用于每个、当前项、收到新电子邮件时 V3、body/sensitivityLabelInfo 和附件。

步骤 7:Dropbox:创建带时间戳的文件

目前为止的流程: 触发器 + 初始化变量 + 转换为 PDF 正文 + 追加 + 应用于每个 + 合并 + 创建文件。

将合并后的 PDF 文件以带有 UTC 时间戳的文件名写入 Dropbox,以便每次运行都能生成一个全新的、可排序的文件。

  1. 点击 + 新步骤, 挑选 Dropbox:创建文件
  2. 配置
    • 文件夹路径/blog data/merge blog template/output
    • 文件名 (表达式,点击) fx): concat('merge-', formatDateTime(utcNow(), 'yyyyMMdd-HHmmss'), '.pdf')
    • 文件内容选择 文件内容 来自“合并多个 PDF”操作的令牌

文件名表达式

Power Automate Dropbox 创建文件操作,文件夹路径 /blog data/merge blog template/output,文件名表达式 concat merge dash comma formatDateTime utcNow comma yyyyMMdd dash HHmmss comma dot pdf(显示在表达式编辑器中),文件内容设置为合并多个标记

最终操作,文件内容已映射

Power Automate Dropbox 创建文件操作,文件夹路径为 /blog data/merge blog template/output,文件名使用 concat 表达式连接,文件内容标记来自“将多个 PDF 文件合并为一个 PDF 文件”操作,工具提示解析为正文“Merge_multiple_PDF_files_into_a_single_PDF_file”。

提示。 想要每个发件人域对应一个文件夹?请将静态文件夹路径替换为 concat('/inbox-pdfs/', split(triggerOutputs()?['body/from'], '@')[1], '/')PDF 文件会自动路由到子文件夹,例如 /inbox-pdfs/yourcompany.com/ 基于发件人的域名。


运行流程并验证

  1. 节省 右上角的流水。
  2. 向受监控的地址发送一封包含一个或多个附件的电子邮件(使用的操作指南)。 [email protected])。
  3. 打开 运行历史记录触发器应在几秒钟内触发。观察每个操作是否变为绿色:转换为 PDF 正文(针对较短的 HTML 正文)大约需要 10 秒;“应用于每个”默认并行运行,并在大约 22 秒内完成两个附件的处理;“合并多个 PDF”大约需要 11 秒。
  4. 打开 Dropbox /blog data/merge blog template/output/一个名为 merge-YYYYMMDD-HHmmss.pdf 有没有。
  5. 打开PDF文件。第1页是正文。从第2页开始,依次显示所有附件,附件内容完整呈现。

你实际建造了什么? 零接触式邮件归档流程。所有带附件的邮件都会被合并成一个 PDF 文件,先处理邮件正文,然后按顺序处理附件,并添加时间戳以避免冲突,最后放入共享文件夹,方便您的团队或审核人员搜索。同样的流程可以处理两个附件或二十个附件,无需任何修改。该流程也适用于 Make(Outlook 触发器 + 附件迭代器 + PDF4me 合并)和 Zapier(通过 Zapier 发送邮件或 Outlook 触发器 + 循环 + PDF4me 合并)。


无需重建即可添加的常见变体

按类型筛选附件
如果您只想合并 PDF 和 Office 文档,请将“转换为 PDF”语句包裹在…… 健康)状况 测试 endsWith(toLower(items('Apply_to_each')?['name']), '.pdf') 或类似功能。能够干净利落地跳过签名和内嵌图片附件。
在第 1 页上添加元数据
在步骤 3 之前,先构建一个 HTML 导言区。 撰写:发件人、主题、接收日期,然后将它们连接起来 身体/身体合并后的 PDF 第 1 页现在包含一个页眉,您可以稍后对其进行 grep 搜索。
数字签名存档前
Insert PDF4me 数字签名 PDF 在步骤 6 和步骤 7 之间。存档的 PDF 文件会使用您的 X.509 证书进行签名,从而形成即时的审计跟踪。 谁在何时存档了什么
PDF/A格式文件,便于长期保存
添加 PDF4me 创建 PDF/A 合规 PDF/A-2b 合并后,存档的合并PDF文件现已符合ISO 19005标准,可用于法律保留或提交监管机构。

故障排除

合并操作错误与“无效内容”

添加到数组之一 价值 表达式没有被包装 base64ToBinary(...)每次推送(正文和附件)都需要转换。重新打开两个追加操作,切换到表达式编辑器,并确认表达式是否正确。 base64ToBinary(body('Convert_to_PDF_Body')?['$content'])base64ToBinary(body('Convert_to_PDF')?['$content']) 逐字。

第 1 页为空白或缺失

“转换为 PDF 正文”操作未接收到实际的 HTML 正文。请检查触发器的 包含附件 留下了“是”(如果没有它,尸体有时会空着),而且 文件内容 解决 triggerOutputs()?['body/body'], 不是 身体/身体预览

对每个运行应用零次

因为邮件没有附件,所以触发了触发器。 仅带附件 设置为“否”。要么将其更改为“是”,要么将“应用到每个”语句包装在一个仅在以下情况下运行的条件语句中: length(triggerOutputs()?['body/attachments']) 大于零。

附件顺序错误

默认值 适用于每个 并行运行,这可能会打乱追加顺序。打开循环的 设置 并设置 并发控制 与……的平行程度 1现在循环按顺序运行,附件会按照 Outlook 返回的顺序精确地放入数组中。


后续步骤

同样的七步模式(触发、初始化数组、转换正文、循环转换并追加、合并、最后保存并添加时间戳)适用于任何“将电子邮件及其附件合并到一个 PDF 文件中”的自动化流程。只需运行一次,所有收到的邮件都会自动变成一个可搜索、可排序的存档条目。