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

2 に答える 2

6

私は自分の質問に答えるのは好きではありませんが、他の誰かが私と同じ間違いをした場合、ここに解決策があります。画像データを使用して新しい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);
于 2012-10-10T15:17:23.947 に答える
0

画像のコンテンツ タイプとして image/jpeg を使用しても機能しません。画像を電子メールに埋め込もうとし、base64 に変換します。次に、送信者、受信者、件名が空白になります。電子メールを送信しますが、すべての情報が破損しています。

于 2014-02-20T15:47:43.730 に答える