我有一个应用程序偶尔会发送一封带有三个附件的电子邮件。
一个附件是用户最初发送到我邮箱的文件,因此我回复了他们发送给我的同一文件。我是通过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);
我现在为每个附件执行此操作,并根据需要附加文件。
答案 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);
我现在为每个附件执行此操作,并根据需要附加文件。