如何为已加载的MimeMessage(MimeKit)添加附件?
使用MimeKit为已加载的邮件添加文本附件
要实现给从流中加载的MimeMessage添加文本附件,核心是处理邮件的MIME体结构,以下是通用实现方案:
核心逻辑
邮件的MIME体分为两种情况:
- 如果原邮件的
Body是Multipart类型(比如常见的MultipartMixed),可以直接向该Multipart集合添加附件 - 如果原邮件的
Body是单一MIME部分(纯文本/HTML),需要先将原内容包装为MultipartMixed,再添加附件
实现AddSomeInfoAttachment方法
下面的代码会创建原邮件的副本(避免修改原对象),然后根据MIME结构添加文本附件:
public static MimeMessage AddSomeInfoAttachment(MimeMessage message) { // 创建原邮件的副本,防止修改原始对象 var newMessage = new MimeMessage(message); // 构造文本附件:设置内容、文件名和附件标识 var textAttachment = new TextPart("plain") { Text = "这里替换为你要添加的字符串内容", ContentDisposition = new ContentDisposition(ContentDisposition.Attachment), FileName = "附加信息.txt" }; // 处理邮件体结构 if (newMessage.Body is Multipart multipart) { // 原邮件已是多部分结构,直接追加附件 multipart.Add(textAttachment); } else { // 原邮件为单一内容,包装为MultipartMixed结构 var mixedMultipart = new MultipartMixed(); mixedMultipart.Add(newMessage.Body); mixedMultipart.Add(textAttachment); newMessage.Body = mixedMultipart; } return newMessage; }
补充说明
- 如果不需要保留原邮件对象,可以直接修改传入的
message,跳过创建副本的步骤 - 设置
ContentDisposition = ContentDisposition.Attachment是为了让邮件客户端将其识别为附件(而非内嵌内容) - 若需添加HTML格式的文本附件,只需将
TextPart("plain")替换为TextPart("html")即可
内容的提问来源于stack exchange,提问作者Yanko Hernández Alvarez
相关产品推荐
相关产品推荐

