Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 

(시리즈 글이 7개 있습니다.)
기타: 58. Outlook에 설정한 SMTP/POP3(예:천리안 메일) 계정 암호를 잊어버린 경우
; https://www.sysnet.pe.kr/2/0/11010

기타: 59. outlook.live.com 메일 서비스의 아웃룩 POP3 설정하는 방법
; https://www.sysnet.pe.kr/2/0/11011

.NET Framework: 761. C# - SmtpClient로 SMTP + SSL/TLS 서버를 이용하는 방법
; https://www.sysnet.pe.kr/2/0/11537

개발 환경 구성: 454. Azure 가상 머신(VM)에서 SMTP 메일 전송하는 방법
; https://www.sysnet.pe.kr/2/0/11994

.NET Framework: 848. C# - smtp.daum.net 서비스(Implicit SSL)를 이용해 메일 보내는 방법
; https://www.sysnet.pe.kr/2/0/11995

오류 유형: 757. 구글 메일 - 아웃룩에서 메일 전송 시 Sending' reported error (0x800CCC0F, 0x800CCC92)
; https://www.sysnet.pe.kr/2/0/12784

닷넷: 2328. C# - MailKit: SMTP, POP3, IMAP 지원 라이브러리
; https://www.sysnet.pe.kr/2/0/13908




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/]
smtp_implicit_ssl_1.png

따라서 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를 지원하지 않습니다. 심각하군요... ^^; 이제 서서히 천리안을 떠날 때가 된 것 같습니다. ^^




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]







[최초 등록일: ]
[최종 수정일: 7/7/2023]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 



2021-04-29 07시19분
[신현승] 비슷한 문제를 겪고 있습니다 서버는 하이웍스인데요 증상이 같습니다. 문제는 System.Web.Mail 이 현재 framework 4.6.2에 포함되어 있지 않고 이전버전 2.0 ~ 3.5까지 모두 변경해도 네임스페이스를 찾을수가 없다고 합니다
C# 이구요 VS2017 버전을 사용하고 있습니다 혹시 사용하신 버전이나 System.Web.Mail을 추가할 방법을 알수 있을까요 사실 이 문제를 알게된것도 기적에 가깝긴 합니다만 문제를 해결하고 싶네요 감사합니다
[guest]
2021-04-29 08시04분
System.Web.Mail을 찾을 수 없다고 했는데, 본문에도 제가 기록해 놨지만 그것은 System.Web 어셈블리를 참조하면 포함돼 있는 것입니다.

-----------------------------

Sending Emails with Gmail Using MailKit in .NET Web API: The Complete Guide
; https://dev.to/mamun_akand/sending-emails-with-gmail-using-mailkit-in-net-web-api-4lj5
정성태

... 181  182  183  184  185  186  187  188  189  190  191  192  193  194  [195]  ...
NoWriterDateCnt.TitleFile(s)
69정성태12/5/200417081VS.NET IDE: 9. 다른 컴퓨터(방화벽 설치)에 설치된 SQL Server에 통합 인증을 할 때 필요한 포트
68정성태10/31/200422042.NET Framework: 17. Win32_NTLogEvent를 c#에서 wmi 쿼리할 때..에러..
67정성태10/22/200419260COM 개체 관련: 12. Microsoft.XMLHTTP 개체에서 Microsoft.XMLDOM 개체를 전송할 때 charset 지정 문제?
66정성태10/16/200420427.NET Framework: 16. [닷넷 리모팅] 프록시가 죽은 것을 원격 개체가 알 수 있는 방법은?
65정성태10/16/200419447VS.NET IDE: 8. Windows 가상 메모리 사용 해제
64정성태10/3/200423120.NET Framework: 15. ASP.NET에서 .NET COM+ 개체 등록 시 "Local System"이어야 하는 이유.
63정성태10/3/200423257.NET Framework: 14. Response.Cookies.Clear는 기존 설정된 Cookie 헤더를 삭제하는 것이 아닙니다.
62정성태10/3/200422251기타: 7. DB 트랜잭션에서 Lock이 걸릴 수 있는 전형적인 예.
61정성태10/3/200421756.NET Framework: 13. Main 메서드에 붙은 STAThread 의미
60정성태10/3/200420467.NET Framework: 12. IDispatch::GetIDsOfNames 역변환 메서드 작성 힌트 ( DISPID 로 메서드 이름 알아내는 것 )
58정성태10/3/200423566.NET Framework: 11. HttpContext의 간략이해
56정성태10/3/200420021.NET Framework: 10. [.NET 리모팅] 원격개체를 호출한 클라이언트의 연결이 유효한지 판단하는 방법.
55정성태10/3/200420795COM 개체 관련: 11. 내가 생각해 보는 COM의 현재 위치
54정성태8/30/200426451VC++: 10. 내가 생각해 보는 MFC OCX와 ATL DLL에 선택 기준
53정성태11/20/200525789VC++: 9. CFtpFileFind/FtpFileFind가 일부 Unix FTP 서버에서 목록을 제대로 못 가져오는 문제
184정성태11/23/200519433    답변글 VC++: 9.1. FTP 관련 토픽파일 다운로드1
51정성태6/24/200424375VC++: 8. BSTR 메모리 할당 및 해제(MSDN Library 발췌) [1]
50정성태6/16/200417735기타: 6. 1차 데스크톱 컴퓨터 사양
49정성태6/16/200418208기타: 5. 53만 원대 Second PC 마련. ^^
48정성태3/2/200420103.NET Framework: 9. 윈도우즈 발전사를 모아 둔 사이트. [1]
47정성태11/14/200518611VS.NET IDE: 7. 한글 OS에서 Internet Explorer 6.0 with SP1의 UI 언어 바꾸는 방법
45정성태1/26/200418001기타: 4. MCAD 시험
44정성태1/26/200418817VS.NET IDE: 6. 터미널 서비스 포트 변경 ( 서버 및 클라이언트 )
46정성태1/26/200423865    답변글 VS.NET IDE: 6.1. Windows 2003 터미널 서비스 라이센스 서버 없이 접속
114정성태11/14/200515228    답변글 VS.NET IDE: 6.2. [터미널 서버 라이센스] : 활성화 시 오류
43정성태12/23/200318446기타: 3. XP/2003 개인 방화벽 설정파일 다운로드1
... 181  182  183  184  185  186  187  188  189  190  191  192  193  194  [195]  ...