0

ときどき 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);

添付ファイルごとにこれを行い、必要に応じてファイルを添付します。

4

1 に答える 1

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); 

添付ファイルごとにこれを行い、必要に応じてファイルを添付します。

于 2012-05-17T18:44:58.733 に答える