2012-10-08 4 views
5

html 본문으로 System.Net.Mail 메시지를 만듭니다. 나는 이메일에 고객 서명의 jpeg 이미지 (바이트 aray에서)를 첨부하고 서비스 센터에 보낸다. 서비스 센터는 첨부 파일을 열지 않고도 서명을보고 싶었 기 때문에 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 개의 MemoryStream을 생성하면 작동했습니다.

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

이미지의 콘텐츠 유형으로 이미지/jpeg를 사용하면 작동하지 않습니다. 이미지를 전자 메일에 포함시키고이를 base64로 변환합니다. 그런 다음 보낸 사람,받는 사람 및 제목이 비워집니다. 이메일을 보내지 만 모든 정보가 손상되었습니다.

관련 문제