.NET 개발/C#
C# MailMessage 클래스로 네이버 메일 이용하기.
Hoya0415
2015. 11. 10. 16:00
도구 : Visual Studio 2013 Community, MSSQL
사전 지식 준비 :
EntityFrameWork, Email 간단한 지식
.NET에는 System.Net.Mail DLL을 제공하고 있는데 Mail을 보낼 수 있는 기능이다.
메일을 보내려면 Mail SMTP Server가 필요하다.
EmailModel 클래스를 보면, 생성자에서 인자를 받는데 Company를 이용해서
FromEmail에 있는 SMTP 서버와 Port를 가져올것이고 IsSSL 을 사용할지도 데이터로 미리 넣어놔서 가져올 것이다.
그리고 나머지 제목, 내용, BodyHTML 여부로 인자를 줄 것인데, 굳이.. DB를 안하겠다면 Class로 만들어서 사용해도 된다..
1. 네이버 같은 경우는 로그인 후 메일 탭으로 이동하면 제일 하단에 [환경설정] 이라는 곳이 있다.
2. 눌러보면 [POP3/SMTP 설정] 이 있는데 눌러보면 SMTP 서버와 PORT 가 있을 것이다. 이 정보가 SMTP 서버가 될것고, 이 네이버 서버를 이용하려면 사용자 정보가 필요하다.
NetworkCredential(fromEmail.MailID, fromEmail.Password);
인증 관련해서 객체를 넣어주는 구문인데 본인 계정을 쓰면 되겠다. ㅎ
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 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | public class EmailModel : IDisposable { public FromEmail fromEmail { get; set; } public List<ToEmail> toMails { get; set; } public string Header { get; set; } public string Body { get; set; } public bool IsBodyHTML { get; set; } public MailMessage message { get; set; } public SendEmailResult _result; public event EventHandler<SendEmailResult> EmailSendCompleted; public EmailModel(string Company, string Header, string Body, bool IsBodyHTML) { this.Header = Header; this.Body = Body; this.IsBodyHTML = IsBodyHTML; try { using (var db = new DeepViewEntities(ConnectStringBuilder.DeepViewConnectionString().ToString())) { var fromMails = db.FromEmail.Where(email => email.Company.ToLower() == Company); if (fromMails.Count() > 0) fromEmail = fromMails.First(); else throw new Exception("formMail에 일치하는 Company가 없습니다."); if (fromEmail != null) { var toMailList = db.ToEmail.Where(tomail => tomail.ServiceID == fromEmail.ID && tomail.IsActive == true).ToList(); if (toMailList.Count > 0) toMails = toMailList; else throw new Exception("toMail에 해당하는 유저 정보가 없습니다."); } } } catch (Exception ex) { _result = new SendEmailResult(false, ex); } } public void MailSend() { string smtpServer = fromEmail.Smtp; message = new MailMessage(); message.Subject = Header; message.Body = Body; message.BodyEncoding = System.Text.Encoding.UTF8; message.Priority = MailPriority.High; if (IsBodyHTML) message.IsBodyHtml = true; toMails.ForEach(to => message.To.Add(to.MailID)); // Credentials 계정이랑 From 계정이랑 동일 해야한다. message.From = new MailAddress(fromEmail.MailID); SmtpClient client = new SmtpClient(smtpServer); client.Port = fromEmail.SmtpPort; client.UseDefaultCredentials = true; client.Credentials = new NetworkCredential(fromEmail.MailID, fromEmail.Password); try { if (_result != null) throw _result.Exception; client.Send(message); } catch (Exception ex) { _result = new SendEmailResult(false, ex); if (EmailSendCompleted != null) EmailSendCompleted(this, _result); } } public void Dispose() { message.Dispose(); GC.Collect(2); GC.WaitForPendingFinalizers(); } } | cs |
MSSQL DB