C# - smtp.daum.net 서비스(Implicit SSL)를 이용해 메일 보내는 방법
다음(Daum) 메일을 위한 SMTP 설정은 홈페이지에 접속 후 아래의 경로를 통해 확인할 수 있습니다.
IMAP / SMTP 설정값 안내
; https://mail.daum.net/#setting/POP3IMAP
위의 설정을 바탕으로 지난 글의 소스 코드에서 사용한,
Azure 가상 머신(VM)에서 SMTP 메일 전송하는 방법
; https://www.sysnet.pe.kr/2/0/11994
SmtpClient를 이용하면,
smtp.Host = "smtp.daum.net";
smtp.Port = 465;
smtp.EnableSsl = true;
smtp.Credentials = new NetworkCredential("...", "...");
다음과 같은 식으로 timed-out 예외가 발생합니다.
Unhandled Exception: System.Net.Mail.SmtpException: The operation has timed out.
at System.Net.Mail.SmtpClient.Send(MailMessage message)
at Program.Main(String[] args) in c:\temp\ConsoleApp1\Program.cs:line 23
검색해 보면 이것은 daum 측의 메일 서버가 ("Explicit SSL"이 아닌) "Implicit SSL"을 사용하기 때문이라고 하며, 이 방식은 근래에 잘 사용하지 않는다고 합니다. 두 가지 방식의 차이점은 아래의 자료에서,
INFO: TLS/SSL implicit and explicit modes difference
; https://www.rebex.net/kb/tls-ssl-explicit-implicit/
자세한 설명과 함께 포트 정리까지 잘 다루고 있습니다.
[표 출처:
https://www.rebex.net/kb/tls-ssl-explicit-implicit/]
따라서 C#에서 Daum 메일 서비스를 이용하려면 "Implicit SSL"을 사용해야 하는데 아쉽게도 System.Net.Mail.SmtpClient는 "Explicit SSL" 방식만 지원한다고 합니다. 이 문제를 해결하기 위해 검색해 보면,
smtp 사용 - 막 검색해도 답이 안나와요
; http://cafe.daum.net/aspdotnet/5wZX/4461
CDO COM 객체를 이용하면 된다고 합니다.
GMail SMTP via C# .Net errors on all ports
; https://stackoverflow.com/questions/1082216/gmail-smtp-via-c-sharp-net-errors-on-all-ports/3845907#3845907
하지만 그보다는 다음의 글에서 제시한,
C# send email using implicit ssl
; https://stackoverflow.com/questions/8878309/c-sharp-send-email-using-implicit-ssl
System.Net.Mail with SSL to authenticate against port 465
; https://learn.microsoft.com/en-us/archive/blogs/webdav_101/system-net-mail-with-ssl-to-authenticate-against-port-465
System.Web.Mail의 MailMessage와 SmtpMail 객체를 이용하는 것이 더 낫습니다. 결국, smtp.daum.net을 이용한 코드를 다음과 같이 정리할 수 있습니다.
using System.Web.Mail; // System.Web 어셈블리 참조 필요
class Program
{
static void Main(string[] args)
{
#pragma warning disable 0618
System.Web.Mail.MailMessage msg = new System.Web.Mail.MailMessage();
msg.Body = "Test is good";
msg.Subject = "Test mail";
msg.To = "from@chol.net";
msg.From = "to@hanmail.net";
int cdoBasic = 1;
msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpusessl", true);
msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserverport", 465);
msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", cdoBasic);
msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", "...[다음_사용자_계정]...");
msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", "...[다음_사용자_암호]...");
SmtpMail.SmtpServer = "smtp.daum.net";
SmtpMail.Send(msg);
#pragma warning restore 0618
}
}
그나저나, SmtpClient/SmtpMail 클래스를 다루면서 알게 된 사실이라면 국내 메일 서비스가 은근히 발전 속도가 느리다는 점입니다. daum의 경우에는 그나마 괜찮지만, 천리안 같은 경우에는 여전히 SMTP/POP3에 SSL 연결을 지원하지 않는 데다,
Outlook에 설정한 SMTP/POP3(예:천리안 메일) 계정 암호를 잊어버린 경우
; https://www.sysnet.pe.kr/2/0/11010
심지어 홈페이지조차도 HTTPS를 지원하지 않습니다. 심각하군요... ^^; 이제 서서히 천리안을 떠날 때가 된 것 같습니다. ^^
[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]