[C#] System.Net.Mail을 이용하여 메일 보내기


Development note/C#  2019. 5. 28. 22:16

안녕하세요. 명월입니다.

 

이 글은 C#에서 System.Net.Mail을 이용하여 메일 보내기에 대한 소개입니다.

 

우리가 프로그램을 작성할 때 자주 사용하는 라이브러리 중 하나가 메일 보내는 것입니다. 예를 들면 회원 가입시 회원 인증부터 패스워드 초기화, 게시판 공지사항 등등 이곳 저곳에서 사용합니다.

C# 에서는 메일 보내는 방법이 꽤 있는 데 그 중에서 .Net Framework에 포함되어 있는 System.Net.Mail 라이브러리를 통해 보내는 방법을 소개하겠습니다.

using System.Net.Mail;
using System.IO;
class Program
{
  static void Main(string[] args)
  {
    MailMessage mail = new MailMessage();
    try
    {
      // 보내는 사람 메일, 이름, 인코딩(UTF-8)
      mail.From = new MailAddress("nowonbun@gmail.com", "명월일지", System.Text.Encoding.UTF8);
      // 받는 사람 메일
      mail.To.Add("nowonbun@gmail.com");
      // 참조 사람 메일
      mail.CC.Add("nowonbun@gmail.com");
      // 비공개 참조 사람 메일
      mail.Bcc.Add("nowonbun@gmail.com");
      // 메일 제목
      mail.Subject = "메일 제목";
      // 본문 내용
      mail.Body = "<html><body>hello wrold</body></html>";
      // 본문 내용 포멧의 타입 (true의 경우 Html 포멧으로)
      mail.IsBodyHtml = true;
      
      // 메일 제목과 본문의 인코딩 타입(UTF-8)
      mail.SubjectEncoding = System.Text.Encoding.UTF8;
      mail.BodyEncoding = System.Text.Encoding.UTF8;
      
      // 첨부 파일 (Stream과 파일 이름)
      mail.Attachments.Add(new Attachment(new FileStream(@"D:\test1.zip", FileMode.Open, FileAccess.Read), "test1.zip"));
      mail.Attachments.Add(new Attachment(new FileStream(@"D:\test2.zip", FileMode.Open, FileAccess.Read), "test2.zip"));
      
      // smtp 서버 주소
      SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");
      // smtp 포트
      SmtpServer.Port = 587;
      // smtp 인증
      SmtpServer.Credentials = new System.Net.NetworkCredential("아이디", "패스워드");
      // SSL 사용 여부
      SmtpServer.EnableSsl = true;
      // 발송
      SmtpServer.Send(mail);
    }
    finally
    {
      // 첨부 파일 Stream 닫기
      foreach (var attach in mail.Attachments)
      {
        attach.ContentStream.Close();
      }
    }
  }
}

소스는 작성이 되었습니다.

그리고 Smtp 서버를 세팅하겠습니다. 저의 경우에는 GMail(구글 메일) 기준으로 작성되어 있으나 Naver나 Daum을 설정하시려면 검색창에 Naver smtp 설정이나 daum smtp 설정을 치시면 찾으실 수 있습니다.

구글 메일 참조 - https://support.google.com/a/answer/176600?hl=ko

네이버 메일 참조 - http://blog.naver.com/PostView.nhn?blogId=mutation4929

                        https://mail.naver.com/option/imap

다음 메일 참조 - https://cs.daum.net/faq/43/9234.html#35953

Gmail의 smtp 주소는 smtp.gmail.com 입니다.

그리고 아이디에는 구글 아이디(메일 주소를 뺀)를 넣고 패스워드는 구글 메일 패스워드가 되겠습니다.

 

먼저 크롬에 접속해서 오른쪽 상단에 회원 정보로 갑니다.(로그인이 되지 않았으면 로그인을 먼저 합니다.)

구글 계정으로 가서 보안 탭의 보안 수준이 낮은 앱의 액세스 탭으로 갑니다.

보안 수준이 낮은 앱의 사용을 체크합니다. 이 체크를 안하면 외부에서 구글 메일을 사용하지 못하게 하는 것이기 때문에 사용하기로 바꿔도 아이디 패스워드 노출이 안 된다면 보안상의 큰 문제는 없습니다.

다시 소스로 돌아와서 디버깅을 하고 실행했습니다. 제 메일 보관함을 보내 첨부 파일까지 발송이 잘 되었습니다.

여기까지 C#에서 System.Net.Mail을 이용하여 메일 보내기에 대한 설명이었습니다.

 

궁금한 점이나 잘못된 점이 있으면 댓글 부탁드립니다.