메일주소와 비밀번호만으로 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 드래프트를 보라.
  • 사용자이름은 그냥 메일주소인 경우가 많지만 항상 그런지는 확신할 수 없다.
광고

SMTP 설정에서 SSL과 TLS의 차이

메일 클라이언트를 설정할 때, 메일 발송을 위해서 POP3 혹은 SMTP 설정을 하게 된다. SMTP 설정의 경우, 보안 설정을 SSL로 하는 경우도 있고 TLS로 하는 경우도 있다.

SSL과 TLS는 무엇이 다른가? SSL이냐 TLS냐를 잘못 선택하면 메일 발송 기능이 동작하지 않는 것으로 보아서 둘이 서로 다른 것 같지만 사실 둘은 한 줄기다. SSL 3.0이 버전이 올라가면서 TLS 1.0이 된 것이다. 다시 말해 SSL은 TLS의 옛날 이름이라고 봐도 크게 틀리지 않다. (( 이 둘의 차이는 파이어버드와 파이어폭스의 차이 만큼밖에 없다, 라고 하려다가 파이어버드의 인지도는 파이어폭스의 백분의 일도 안되는 것 같아 그만두었다. ))

SMTP로 메일을 발송할 때 SSL이냐 TLS냐에 따라 달라지는 것은 딱 한가지다. SSL로 통신하는 경우에는 처음부터 암호화된 통신을 하게 되나, TLS의 경우엔 처음엔 암호화되지 않은 hello 메시지를 전달하는 것에서 시작한다. 이 메시지를 주고 응답을 받아 상호간 암호화된 통신이 가능함을 확인한 뒤에서야 비로소 암호화된 통신을 시작한다. 이 시점부터는 SSL이나 TLS나 같다. 자세한 설명은 이 글을 보라.

대부분의 메일 서비스라면 두 가지 다 지원할 것이다. 그런데 메일 에이전트나 메일 발송 라이브러리가 TLS를 제대로 지원하지 않는 경우가 있다. 혹시 TLS로 해서 안된다면 SSL로 바꿔보자. 포트번호도 물론 바꿔줘야 한다. TLS를 사용하는 경우는 보통 587이고 SSL이라면 465일 것이다.