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

时间:2012-05-16 16:17:00

标签: c# email email-attachments system.net.mail

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

一个附件是用户最初发送到我邮箱的文件,因此我回复了他们发送给我的同一文件。我是通过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--

(goobeldy goop只是电子邮件中所有垃圾的一小部分,但它在整个过程中看起来都是一样的。)

我在创建附件时尝试使用不同的构造函数,包含MIME-TYPE“application / pdf”等等。当我这样做时,它将电子邮件正文中的Content-Type更改为application / 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);

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

1 个答案:

答案 0 :(得分:0)

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

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

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