4

誰かがこの問題を再現できますか?SmtpClient(.NET 4.0)の非常に深刻なバグのように思えますが、これまで誰もこれを見たことがないと信じられず、Googleは同様の問題を見ている人を誰にも見せていないようです。

複数の添付ファイルを含む電子メールを送信し、「Attachment.Name」プロパティが使用されている場合、添付ファイルの名前が正しくなくなります(たとえば、2つの添付ファイルの名前が入れ替わります)。回避策(および実際に設定する正しいプロパティ)は、ContentDisposition.FileNameを使用することです。しかし、これがすべての人に起こるのであれば、私は非常に興味があります。誰かがこの問題を再現できますか?SmtpClient(.NET 4.0)の非常に深刻なバグのように思えますが、これまで誰もこれを見たことがないと信じられず、Googleは同様の問題を見ている人を誰にも見せていないようです。c:\ tmp \emailin\にいくつかのzipファイルを作成する必要があります

var zipCt = new ContentType { MediaType = MediaTypeNames.Application.Zip };

var attachmentA = new Attachment(@"c:\tmp\emailin\a.zip", zipCt);
attachmentA.ContentDisposition.FileName = "a.zip";
attachmentA.Name = "a.zip";

var attachmentB = new Attachment(@"c:\tmp\emailin\b.zip", zipCt);
attachmentB.ContentDisposition.FileName = "b.zip";
attachmentB.Name = "b.zip";

var msg = new MailMessage("testfrom@example.com", "testto@example.com")
{
       Body = "body",
       Subject = "subject"
};
msg.Attachments.Add(attachmentA);
msg.Attachments.Add(attachmentB);

using (var smtp = new SmtpClient())
{
     smtp.DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory;
     smtp.PickupDirectoryLocation = @"c:\tmp\emailout\";
     smtp.Send(msg);
}

ここでc:\ tmp \ emailout \のemlファイルを見ると、次のようなものが表示されます。

X-Sender: testfrom@example.com
X-Receiver: testto@example.com
MIME-Version: 1.0
From: testfrom@example.com
To: testto@example.com
Date: 11 Apr 2012 12:36:48 +0100
Subject: subject
Content-Type: multipart/mixed; boundary=--boundary_0_1b7bb1ee-ba28-4258-b662-554adb7ff81a


----boundary_0_1b7bb1ee-ba28-4258-b662-554adb7ff81a
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: quoted-printable

body
----boundary_0_1b7bb1ee-ba28-4258-b662-554adb7ff81a
Content-Type: application/zip; name=b.zip
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=a.zip

UEsDBAoAAAAAAG5ki0AAAAAAAAAAAAAAAAAFAAAAYS50eHRQSwECPwAKAAAAAABu
ZItAAAAAAAAAAAAAAAAABQAkAAAAAAAAACAAAAAAAAAAYS50eHQKACAAAAAAAAEA
GADa2JQw1xfNAdrYlDDXF80B2tiUMNcXzQFQSwUGAAAAAAEAAQBXAAAAIwAAAAAA
----boundary_0_1b7bb1ee-ba28-4258-b662-554adb7ff81a
Content-Type: application/zip; name=a.zip
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=b.zip

UEsDBAoAAAAAAHZki0AAAAAAAAAAAAAAAAAFAAAAYi50eHRQSwECPwAKAAAAAAB2
ZItAAAAAAAAAAAAAAAAABQAkAAAAAAAAACAAAAAAAAAAYi50eHQKACAAAAAAAAEA
GAD67/k51xfNAfrv+TnXF80B2tiUMNcXzQFQSwUGAAAAAAEAAQBXAAAAIwAAAAAA
----boundary_0_1b7bb1ee-ba28-4258-b662-554adb7ff81a--

Content-Type:ファイル名とContent-Disposition:ファイル名が各添付ファイルで一致しないことに注意してください。

私は何か間違ったことをしていますか?これはMSでログに記録する必要があるバグですか?

4

1 に答える 1

3

これは、添付ファイルごとにContentTypeの新しいインスタンスが必要なためです。

var zipCt = new ContentType { MediaType = MediaTypeNames.Application.Zip };
var zipCt2 = new ContentType { MediaType = MediaTypeNames.Application.Zip };

var attachmentA = new Attachment(@"c:\tmp\emailin\a.zip", zipCt);
attachmentA.ContentDisposition.FileName = "a.zip";
attachmentA.Name = "a.zip";

var attachmentB = new Attachment(@"c:\tmp\emailin\b.zip", zipCt2);
attachmentB.ContentDisposition.FileName = "b.zip";
attachmentB.Name = "b.zip";

問題を修正する必要があります。

于 2012-04-11T12:15:42.487 に答える