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 위치)에 삽입되어 메일이 발송되게 됩니다.
주요 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 태그 위치에 이미지가 삽입되게 됩니다.
※ 함께 읽으면 도움이 될 만한 다른 포스팅 글입니다.
이 글이 도움이 되었기를 바랍니다. ^-^