메일주소와 비밀번호만으로 SMTP 설정방법 알아내기

이메일 발송을 위해 메일 에이전트에 SMTP를 설정하려면 알야아 하는 것이 많다. 대략 다음과 같다.

  • 호스트네임
  • 포트번호
  • 사용자이름
  • 비밀번호
  • SSL/TLS 사용여부

하지만 일반 메일 사용자들이 알고 있는 것은 자신의 메일주소와 비밀번호뿐이다. 이것만 가지고 간단히 메일 발송 설정을 하도록 할 수는 없을까?

어느정도 가능하다. you@gmail.com이라는 메일주소에서 SMTP 설정을 알아내는 예를 들어보겠다.

메일주소의 구성

RFC 5322 Section-3.4.1에 따르면 메일주소는 다음과 같이 local-port와 domain으로 구성된다.

addr-spec       =   local-part "@" domain

따라서 you@gmail.com 이란 메일주소에서는 you가 local-port이고 mail.com이 domain이 된다.

설정 알아내기

대개 사용자 이름은 메일주소이거나 local-port이다. 둘 다 상관없이 사용자이름으로 정상 인식하는 경우도 있다. 여기선 메일주소를 사용자 이름으로 간주하겠다.

RFC 6186은 DNS의 SRV 레코드를 이용해 이메일 서버에 대한 정보를 얻어내는 방법을 제시한다. (( SMTP 뿐 아니라 IMAP과 POP3도 가능하다. )) 이 예에서와 같이, 메일주소에서 domain을 얻어낼 수 있으므로, dnslookup을 이용해 SRV 레코드를 읽어 SMTP 서버의 호스트네임과 포트번호를 알아낼 수 있다.

다음은 gmail.com 도메인에 Email Submission에 대한 질의를 보내 응답을 얻은 예이다.

$ nslookup -type=srv _submission._tcp.gmail.com
server:     127.0.0.1
Address:    127.0.0.1#53

Non-authoritative answer:
_submission._tcp.gmail.com  service = 5 0 587 smtp.gmail.com.

위의 결과에서, SMTP 서버의 호스트네임은 smtp.gmail.com이고, 포트번호는 587임을 알 수 있다. 포트번호가 587이라는 것에서 TLS를 사용할 것이라고 추측할 수 있다.

따라서 you@gmail.com의 SMTP 설정은 다음과 같다.

  1. 호스트네임: smtp.gmail.com (dnslookup으로 알아냄)
  2. 포트번호: 587 (dnslookup으로 알아냄)
  3. 사용자이름: you@gmail.com (대개 메일주소와 같다)
  4. SSL/TLS 사용여부: TLS 사용 (포트번호 587에서 추측함)

이 방법의 한계 / 혹은 좀 더 알아봐야 할 것

  • DNS의 SRV 레코드를 통해 SMTP 서버에 대한 정보를 얻어낼 수 있는 경우가 흔치 않다. 사실 gmail.com외엔 모두 실패했다.
  • 사실 포트번호만으로는 TLS를 사용하는지의 여부를 결정하기 어렵다. 이 문제의 해결을 위해 TLSA 레코드를 이용하는 방법에 대한 제안이 있다. fanf-dane-mua-00 드래프트를 보라.
  • 사용자이름은 그냥 메일주소인 경우가 많지만 항상 그런지는 확신할 수 없다.
Advertisements

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중