使用 System.Net.Mail 附加文件时出现奇怪的错误

本文关键字:错误 文件 Net System Mail 使用 | 更新日期: 2023-09-27 18:34:34

我有一个应用程序,偶尔会发送一封包含三个附件的电子邮件。

一个附件是用户最初发送到我的邮箱的文件,所以我回复的文件与他们发送给我的文件相同。我通过MemoryStream执行此操作,它工作得很好。

另外两个文件是 .PDF 和 .XLSX 文件。

    var excelTemplatePath = GetFilePathToDefaultExcelFile();
    if (excelTemplatePath != null)
        mailMessage.Attachments.Add(new System.Net.Mail.Attachment(excelTemplatePath));
    var pdfPath = GetFilePathToPDFInstructions();
    if (pdfPath != null)
        mailMessage.Attachments.Add(new System.Net.Mail.Attachment(pdfPath));

这是奇怪的部分。当我在Visual Studio中调试应用程序时,它们连接得很好。每次都完美。

当我运行已编译的.exe时,无论是从/BIN/还是从我选择部署它的任何位置,它都会破坏电子邮件。它不附加任何文件,只是将看起来像是将文件序列化到电子邮件文本正文中的内容发送:

cHMvYXBwLnhtbFBLAQItABQABgAIAAAAIQAkRr56YQEAAG0DAAAYAAAAAAAAAAAA
AAAAAKblAABjdXN0b21YbWwvaXRlbVByb3BzMy54bWxQSwECLQAUAAYACAAAACEA
te/KYaMAAADVAAAAEwAAAAAAAAAAAAAAAABl5wAAY3VzdG9tWG1sL2l0ZW0xLnht
bFBLAQItABQABgAIAAAAIQB/jqJ4TAEAAOYCAAAYAAAAAAAAAAAAAAAAAGHoAABj
dXN0b21YbWwvaXRlbVByb3BzMS54bWxQSwECLQAUAAYACAAAACEAvYRiI5AAAADb
AAAAEwAAAAAAAAAAAAAAAAAL6gAAY3VzdG9tWG1sL2l0ZW0yLnhtbFBLAQItABQA
BgAIAAAAIQCQ9oX78gAAAE8BAAAYAAAAAAAAAAAAAAAAAPTqAABjdXN0b21YbWwv
aXRlbVByb3BzMi54bWxQSwECLQAUAAYACAAAACEAZaNvWToEAACtDQAAEwAAAAAA
AAAAAAAAAABE7AAAY3VzdG9tWG1sL2l0ZW0zLnhtbFBLAQItABQABgAIAAAAIQDc
SoJLbAEAAJ4CAAARAAAAAAAAAAAAAAAAANfwAABkb2NQcm9wcy9jb3JlLnhtbFBL
BQYAAAAAGwAbADoHAAB68wAAAAA=

----boundary_0_61985b34-0fc6-4f91-99b8-464d8f613491
Content-Type: application/octet-stream; name="Microsoft Office 2003 Compatibility
 Installation Instructions.pdf"
Content-Transfer-Encoding: base64
Content-Disposition: attachment
----boundary_0_61985b34-0fc6-4f91-99b8-464d8f613491--

(这个粘糊糊的goop只是电子邮件中包含的所有垃圾邮件的一小部分,但它看起来始终相同。

我在创建附件时尝试使用不同的构造函数,以包含"应用程序/pdf"的 MIME 类型等等。当我这样做时,它将电子邮件正文中的内容类型更改为应用程序/pdf,但电子邮件仍然包含所有垃圾并且没有附加文件。

为什么它会在 IDE 中工作而不是在.EXE中工作?这对我来说是奇怪的行为。谢谢。

溶液

具体的解决方案是使用 System.Net.Mime 将 TransferEncoding 设置为 QuotedPrintable。

 var attachment = new System.Net.Mail.Attachment(filePath);
 attachment.TransferEncoding = System.Net.Mime.TransferEncoding.QuotedPrintable;
 mailMessage.Attachments.Add(attachment);

我现在为每个附件执行此操作,并根据需要附加文件。

使用 System.Net.Mail 附加文件时出现奇怪的错误

我问题的具体解决方案是使用System.Net.Mime将TransferEncode设置为QuotedPrintable。

var attachment = new System.Net.Mail.Attachment(filePath);  
attachment.TransferEncoding = System.Net.Mime.TransferEncoding.QuotedPrintable;
mailMessage.Attachments.Add(attachment); 

我现在为每个附件执行此操作,并根据需要附加文件。