ときどき 3 つの添付ファイルを含む電子メールを送信するアプリケーションがあります。
添付ファイルの 1 つは、ユーザーが最初に私のメールボックスに送信したファイルであるため、送信されたのと同じファイルで返信しています。私はこれを MemoryStream で行いますが、問題なく動作します。
他の 2 つのファイルは、.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--
(このグーベルディ・グープは、電子メールに含まれるすべての迷惑メールのごく一部にすぎませんが、全体を通して同じように見えます。)
「application/pdf」のMIME-TYPEを含めるために、添付ファイルを作成するときに別のコンストラクターを使用してみました。私が行ったとき、それは電子メール本文の Content-Type を application/pdf に変更しましたが、電子メールにはまだすべてのゴミが含まれており、ファイルが添付されていませんでした。
.EXE からではなく、IDE 内で動作するのはなぜですか? これは私にとって奇妙な振る舞いです。ありがとう。
解決
具体的な解決策は、System.Net.Mime を使用して TransferEncoding を QuotedPrintable に設定することでした。
var attachment = new System.Net.Mail.Attachment(filePath);
attachment.TransferEncoding = System.Net.Mime.TransferEncoding.QuotedPrintable;
mailMessage.Attachments.Add(attachment);
添付ファイルごとにこれを行い、必要に応じてファイルを添付します。