-
[.NET] 간략한 메일(Mail)발송 프로그램 예제.NET/개념 및 유용한 팁 2021. 1. 19. 20:49반응형
sendmail 이나 qmail 같은 메일서버를 구축하는 것이 아닌, 단 몇줄의 코드만으로도 메일발송전용 프로그램을 만들 수 있다. 위키백과에 소개된 것처럼 SMTP 프로토콜을 구현해서 발송하면 되는데, 훌륭한 라이브러리가 있으므로 굳이 일일히 구현할 필요는 없다.
(라이브러리는 하단에 소개한다.)
전체 소스코드는 아래와 같다.
using DnsClient; using MimeKit; using System; using System.Linq; namespace MailSendExample { class Program { static void Main(string[] args) { var lookup = new LookupClient(); var sendDomain = "senddomain.com"; // 스팸처리되도 상관없다면 임의로 작성해도무방하다. var sender = $"noreply@{sendDomain}"; // 발송메일주소 var recDomain = "gmail.com"; // 수신받을 메일주소의 도메인 var recName = "<<input your mail account>>"; // 수신자아이디 var result = lookup.Query(recDomain, QueryType.MX); var record = result.Answers.MxRecords().FirstOrDefault(); var domain = record?.Exchange.Value; var message = new MimeMessage(); message.From.Add(new MailboxAddress("Joey Tribbiani", sender)); message.To.Add(new MailboxAddress(recName, $"{recName}@{recDomain}")); message.Subject = "How you doin'?"; message.Body = new TextPart("plain") { Text = @"Hey Chandler, I just wanted to let you know that Monica and I were going to go play some paintball, you in? -- Joey" }; using (var client = new MailKit.Net.Smtp.SmtpClient()) { client.LocalDomain = sendDomain; client.ServerCertificateValidationCallback = (s, c, h, e) => { return true; }; try { client.Connect(domain, 0, MailKit.Security.SecureSocketOptions.Auto); } catch (Exception ex) { } client.Send(message); client.Disconnect(true); } } } }
해당 소스를 실행하기위해선 2개의 Nuget 패키지가 설치되어야 한다.
jstedfast/MailKit: A cross-platform .NET library for IMAP, POP3, and SMTP. (github.com)
DnsClient 패키지로 발송할 메일서버(MXRecord)를 알아내고, MailKit으로 발송처리한다. sendDomain, sender, recDomain, recName을 설정한 뒤 실행하면 된다. 물론 정상적인 메일서버임을 증빙할 수 있는 SPF 및 DMARC 설정이 되어있지 않은 환경이라면 스팸메일함에 빠져있거나, 아예 수신이 안되었을 수도 있다.
NAVER, DAUM과 같은 국내 포털 서비스의 메일계정은 SPF만 설정해줘도 충분히 정상수신된다.
반응형'.NET > 개념 및 유용한 팁' 카테고리의 다른 글