直接从 MIME 字符串将附件添加到 MailMessage
Posted
技术标签:
【中文标题】直接从 MIME 字符串将附件添加到 MailMessage【英文标题】:Adding attachment into MailMessage direct from MIME string 【发布时间】:2018-02-18 05:43:20 【问题描述】:有许多从文件添加附件的好例子,但我想知道我是否可以以与AlternateView.CreateAlternateViewFromString
的工作方式类似的方式来做到这一点。
我分别使用 IMAP 从一个地址获取电子邮件的 body_text 和 body_headers,然后希望从另一个地址(通过 SMTP)发送它并进行一些更改,但尽可能忠实地添加附件。我正在使用 MailMessage 和 SmtpClient(System.Net 和 System.Net.Mail)
我编写了代码,通过它们的“Content-Type:”标签从 BODY[TEXT] 中提取 MIME 部分,并以这种方式愉快地将纯文本添加到 html 视图中。我在 MIME 中也有附件(请参见下面的示例),所以看起来我应该能够直接从我可以使用“Content-Type: application/octet-stream”从 MIME 中提取的字符串中轻松添加附件。目前,我只对它与 application/octet-stream 一起使用感兴趣。
我在我的部分代码中有这个可用的字符串,其中包含:
Content-Type: application/octet-stream; name="test_file.abc"
Content-Disposition: attachment; filename="test_file.abc"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_j7datrbn0
YWJjIGZpbGU=
或者
Content-Disposition: attachment; filename="test_file.abc"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_j7datrbn0
YWJjIGZpbGU=
来自示例:
* 53 FETCH (BODY[TEXT] 614
--001a1140ae52fcc4690558c101ec
Content-Type: multipart/alternative; boundary="001a1140ae52fcc4630558c101ea"
--001a1140ae52fcc4630558c101ea
Content-Type: text/plain; charset="UTF-8"
Blah blah
--001a1140ae52fcc4630558c101ea
Content-Type: text/html; charset="UTF-8"
<div dir="ltr">Blah blah</div>
--001a1140ae52fcc4630558c101ea--
--001a1140ae52fcc4690558c101ec
Content-Type: application/octet-stream; name="test_file.abc"
Content-Disposition: attachment; filename="test_file.abc"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_j7datrbn0
YWJjIGZpbGU=
--001a1140ae52fcc4690558c101ec--
)
$ OK Success
我的代码的所有其他方面都有效,但是有没有一种简单的方法可以直接从我拥有的 MIME 数据中添加附件。我没有使用 MimeKit 或标准 VS 以外的任何库。
感谢您阅读这么长的问题。
【问题讨论】:
【参考方案1】:不是我真正想做的,但我实现了我需要的如下:
string name = find_item_by_key(attachment_content, "filename"); // looks for key="value" and returns value
string attachment_base64 = attachment_content.Substring(attachment_content.LastIndexOf("\r\n\r\n"));
attachment_base64 = attachment_base64.Trim('\r', '\n');
byte[] attachment_bytes = Convert.FromBase64String(attachment_base64);
Attachment att = new Attachment(new System.IO.MemoryStream(attachment_bytes), name);
mail.Attachments.Add(att);
正在进行许多毫无意义的转换,因为数据已经是 Base64 并且mail.Attachments.Add
无疑会再次将其转换回来。
【讨论】:
以上是关于直接从 MIME 字符串将附件添加到 MailMessage的主要内容,如果未能解决你的问题,请参考以下文章
使用 Mail_Mime 将附件发送到 GMail,接收“无名”附件
将 MIME 中的附加数据嵌入到电子邮件的 HTML 部分。未链接到附件