C# 윈폼에서 메일 발송시 본문에 이미지를 삽입해서 보내는 방법


C# 닷넷으로 윈폼을 개발하다보면 메일을 발송하는 프로그램을 개발해야 할 때가 있습니다.

일반적인 텍스트나 Html 태그 같은 경우 메일 본문에 직접 작성해서 보내면 받은 메일을 열었을 때 제대로 잘 보이게 됩니다.

하지만 이미지 같은 경우 img 태그의 src에 이미지가 위치한 URL을 지정하게 되는데 윈폼에서 보낼 때는 정확한 이미지 URL을 지정할 수 없다는 문제가 발생하게 됩니다.

물론 웹서버를 운영중이라면 웹서버의 특정 위치에 이미지를 올려놓고 해당 url을 지정하면 메일을 열었을 때 정상적으로 이미지가 보이지만 대부분 웹서버를 사용할 수 없는 경우가 많고 메일을 보낼 때마다 웹서버에 이미지를 올려놓는게 번거로울 수 있습니다.

이번 글에서는 C# 윈폼에서 메일 발송시 본문에 이미지를 삽입해서 보내는 방법에 대해 알아보겠습니다.

윈폼에서 메일을 보낼 때 본문에 이미지를 삽입해서 보내는 C# 소스

– 아래 C# 소스는 메일 보내기 버튼(btnSend)을 클릭했을 때의 Click 이벤트에 대한 소스입니다.

– 눈여겨 볼 부분은 5, 8, 9, 10, 19, 44 라인 입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
private void btnSend_Click(object sender, EventArgs e)
{
 
    string htmlBody = HtmlBody(); //메일 본문 작성
    AlternateView avHtml = AlternateView.CreateAlternateViewFromString(htmlBody, null, MediaTypeNames.Text.Html);
 
    //삽입할 이미지를 지정함
    LinkedResource inline = new LinkedResource(@“C:\Temp\image.jpg”, MediaTypeNames.Image.Jpeg);
    inline.ContentId = “contentID”;  //메일 본문의 cid와 동일한 이름으로 지정
    avHtml.LinkedResources.Add(inline);
 
    MailMessage _message = new MailMessage();
    //보내는 사람
    _message.From = new MailAddress(“from@gseek.pe.kr”“느티나무”System.Text.Encoding.UTF8);
    //받는 사람
    _message.To.Add(“to@gseek.pe.kr”);
 
    //메일본문 추가
    _message.AlternateViews.Add(avHtml);
 
    //메일 제목
    _message.Subject = “이미지가 삽입된 메일 발송”;
    _message.SubjectEncoding = System.Text.Encoding.UTF8;
 
    _message.IsBodyHtml = true;  //내용에 html이 포함된 경우    
    _message.BodyEncoding = System.Text.Encoding.UTF8;
 
    //SMTP 서버
    SmtpClient server = new SmtpClient(“100.1.1.1”25);
    server.UseDefaultCredentials = false;
    server.EnableSsl = false;
    server.DeliveryMethod = SmtpDeliveryMethod.Network;
    server.Credentials = new System.Net.NetworkCredential(“”“”);
    server.Send(_message);
 
}
 
private string HtmlBody()
{
    string htmlBody = “”;
 
    htmlBody += “<H1>느티나무 지식창고</H1>”;
    htmlBody += “<p>본문에 이미지가 표시됩니다.</p>”;
    htmlBody += “<p><img src=cid:contentID></p>”;
    htmlBody += “<p>감사합니다</p>”;
 
    return htmlBody;
}
 

– 설명 : C:\Temp 폴더에 있는 image.jpg 이미지가 메일 본문(img 태그 src=cid 위치)에 삽입되어 메일이 발송되게 됩니다.

C# 윈폼에서 메일 발송시 본문에 이미지를 삽입해서 보내는 방법

주요 Line 설명

C# 소스에 포함된 주요 라인에 대한 설명입니다.

  • AlternateView : 전자메일 메시지를 보기 위한 형식을 나타냅니다.
  • LinkedResource : HTML 첨부 파일의 이미지와 같이 전자 메일 첨부 파일에 포함된 외부 리소스를 나타냅니다.
  • inline.ContentId : 이 첨부 파일의 MIME 콘텐츠 ID를 가져오거나 설정합니다.
  • avHtml.LinkedResources : 이 첨부 파일이 참조하는 포함 리소스 집합을 가져옵니다.
  • _message.AlternateViews : 메시지 본문의 대체 형식을 대체 형식을 저장하는 데 사용되는 첨부 파일 컬렉션을 가져옵니다.
  • <img src=cid:contentID> : img 태그 src 속성에 콘텐츠 ID를 지정합니다.

※ inline.ContentId와 img src=cid:의 콘텐츠 ID를 동일하게 지정해 주면 해당 img 태그 위치에 이미지가 삽입되게 됩니다.





이 글이 도움이 되었기를 바랍니다. ^-^


답글 남기기