You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何读取电子邮件中的多个PDF附件并合并保存为单个PDF文件

实现邮件PDF附件合并的方案

MimePart属于MIME解析组件(通常为MimeKit)的内置对象,仅负责邮件附件的结构解析与内容解码,本身不提供PDF文件合并能力,你需要结合第三方PDF处理库完成该需求,具体实现如下:

实现步骤

  • 第一步:筛选所有邮件附件中格式为PDF的MimePart对象
  • 第二步:将选中的PDF附件解码为内存流(无需落盘生成临时文件,减少IO开销)
  • 第三步:通过PDF处理库按指定顺序合并多个PDF流
  • 第四步:将合并完成的PDF文件写入到目标存储路径

代码示例

首先安装对应的NuGet包,以常用的跨平台PDF处理库PdfSharp为例,.NET Framework环境安装PdfSharp,.NET Core/.NET 6+环境安装PdfSharp.Core。

using MimeKit;
using PdfSharp.Pdf;
using PdfSharp.Pdf.IO;
using System.IO;

// 替换为你获取到的邮件对象
MimeMessage mailMessage = /* 你的MimeMessage邮件实例 */;
string outputPdfPath = @"C:\目标路径\合并后的文件.pdf";

// 1. 筛选所有PDF格式的附件
var pdfAttachments = mailMessage.Attachments
    .OfType<MimePart>()
    .Where(part => part.ContentType.MediaType.Equals("application", StringComparison.OrdinalIgnoreCase) 
        && part.ContentType.MediaSubtype.Equals("pdf", StringComparison.OrdinalIgnoreCase))
    .ToList();

if (pdfAttachments.Any())
{
    // 2. 初始化合并用的PDF文档对象
    using (var mergedPdf = new PdfDocument())
    {
        foreach (var pdfPart in pdfAttachments)
        {
            // 3. 将PDF附件解码到内存流
            using (var ms = new MemoryStream())
            {
                pdfPart.ContentObject.DecodeTo(ms);
                ms.Position = 0;
                
                // 4. 读取当前PDF流的所有页面,导入到合并文档
                using (var sourcePdf = PdfReader.Open(ms, PdfDocumentOpenMode.Import))
                {
                    for (int i = 0; i < sourcePdf.PageCount; i++)
                    {
                        mergedPdf.AddPage(sourcePdf.Pages[i]);
                    }
                }
            }
        }
        
        // 5. 保存合并后的PDF文件
        mergedPdf.Save(outputPdfPath);
    }
}

注意事项

  • 如果PDF附件带有密码加密,你需要在读取PDF流时补充密码校验逻辑,不同PDF处理库的密码传参方式略有差异
  • 如果你不需要保留原始单个PDF附件,无需将单个附件写入本地磁盘,直接用内存流处理即可降低性能开销
  • 也可以选择其他PDF处理库实现合并逻辑,比如iText7、QuestPDF等,核心逻辑都是先解码附件、再合并PDF内容,仅API调用方式有区别

内容的提问来源于stack exchange,提问作者vaibhav shah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 10:27:05