2012-10-08 19 views
5

html本文を含むSystem.Net.Mailメッセージを作成しています。顧客の署​​名のjpegイメージ(バイトアレーから)を電子メールに添付してサービスセンターに送信します。サービスセンターは添付ファイルを開くことなく署名を見たいので、htmlを変更して、画像をLinkedResourceとして再度追加しました。問題は、添付ファイルが以前よりも大きくなり、添付ファイルを表示しようとするとエラーが表示されることです。添付ファイルを保存してファイルを16進エディタで開くと、ファイル全体が空になります。私は、リンクされたリソースを追加するコードをコメントすることができ、添付ファイルは再び動作します。インラインイメージと添付ファイルを含めるにはどうしたらいいですか?イメージを表示して添付ファイルとして電子メールに追加する方法

これは私がして、画像に埋め込むタグです:これは私のコードである<p><img src=cid:CustomerSignature /></p>

System.IO.MemoryStream ms = new System.IO.MemoryStream(insuranceClaim.Signature, 0, insuranceClaim.Signature.Length); 
ms.Position = 0; 
System.Net.Mime.ContentType contentType = new System.Net.Mime.ContentType(); 
contentType.MediaType = System.Net.Mime.MediaTypeNames.Image.Jpeg; 
contentType.Name = "signature.jpg"; 
System.Net.Mail.Attachment imageAttachment = new System.Net.Mail.Attachment(ms, contentType); 
System.Net.Mime.ContentDisposition disposition = imageAttachment.ContentDisposition; 
mailMessage.Attachments.Add(imageAttachment); 
System.Net.Mail.LinkedResource signature = new System.Net.Mail.LinkedResource(ms, new System.Net.Mime.ContentType("image/jpeg")); 
signature.ContentId = "CustomerSignature"; 
System.Net.Mail.AlternateView aView = System.Net.Mail.AlternateView.CreateAlternateViewFromString(mailMessage.Body, new System.Net.Mime.ContentType("text/html")); 
aView.LinkedResources.Add(signature); 
mailMessage.AlternateViews.Add(aView); 

答えて

5

私は自分の質問に答えて好きではありませんが、他の誰かが同じ過ちIを行った場合それが解決策です。私は画像データで新しいMemoryStreamを作成し、添付ファイルとLinkedResourceの間でストリームを共有しようとしました。私は2つのMemoryStreamsを作成した後、それは働いた。

System.IO.MemoryStream ms = new System.IO.MemoryStream(insuranceClaim.Signature, 0, insuranceClaim.Signature.Length); 
System.Net.Mime.ContentType contentType = new System.Net.Mime.ContentType(); 
contentType.MediaType = System.Net.Mime.MediaTypeNames.Image.Jpeg; 
contentType.Name = "signature.jpg"; 
System.Net.Mail.Attachment imageAttachment = new System.Net.Mail.Attachment(ms, contentType); 
mailMessage.Attachments.Add(imageAttachment); 

System.IO.MemoryStream embeddedMs = new System.IO.MemoryStream(insuranceClaim.Signature, 0, insuranceClaim.Signature.Length); 
System.Net.Mail.LinkedResource signature = new System.Net.Mail.LinkedResource(embeddedMs, new System.Net.Mime.ContentType("image/jpeg")); 
signature.ContentId = "CustomerSignature"; 
System.Net.Mail.AlternateView aView = System.Net.Mail.AlternateView.CreateAlternateViewFromString(mailMessage.Body, new System.Net.Mime.ContentType("text/html")); 
aView.LinkedResources.Add(signature); 
mailMessage.AlternateViews.Add(aView); 
+0

私の問題は違っていました。イメージをバイト配列に変換していませんでした。とにかくあなたの投稿は私を助けました;) –

0

イメージのコンテンツタイプとしてimage/jpegを使用すると機能しません。イメージを電子メールに埋め込み、base64に変換します。次に、送信者、受信者、およびサブジェクトが消去されます。電子メールを送信しますが、すべての情報が破損しています。

関連する問題