2012-04-11 1 views
4

誰もこの問題を再現できますか?私にはSmtpClient(.NET 4.0)のかなり深刻なバグがあるようですが、誰もこれを見たことがないと信じることはできませんし、Googleも同様の問題を抱える人を見せないようです。 「名前」プロパティを使用すると、SmtpClientによって送信された添付ファイルの順序が正しくない

以上1つのアタッチメントと「Attachment.Name」プロパティで電子メールを送信する

は、添付ファイルが間違った名前を持つことになり、使用されている(例えば、2つの添付ファイルが自分の名前を持つことになりますと、スワップ)。回避策(実際にはおそらく設定する正しいプロパティ)は、ContentDisposition.FileNameを使用することです。しかし、もしこれが誰にとっても起こるなら、私は非常に興味があります。誰でもこの問題を再現できますか?私にはSmtpClient(.NET 4.0)のかなり深刻なバグがあるようですが、誰もこれを見たことがないと信じることはできませんし、Googleも同様の問題を抱える人を見せないようです。 \ TMP \ emailout \あなたは

ようなものが表示されます:あなたは今CにEMLファイルを見れば

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("[email protected]", "[email protected]") 
{ 
     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); 
} 

\ TMP \ emailin \:あなたは、cでzipファイルのカップルを作成する必要があります

X-Sender: [email protected] 
X-Receiver: [email protected] 
MIME-Version: 1.0 
From: [email protected] 
To: [email protected] 
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にログするべきバグですか?

答えて

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

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

+0

ありがとうございました。これで問題は解決しました。愚かな間違い! – Martyn

関連する問題