[python] 이메일보내기, unable to relay 문제 해결
파이썬에서 이메일 보내기에 대한 소스인데 아주 기본적인 코드다. SMTP 를 이용해서 지정된 다른 사용자에게 이메일을 보내는 소스코드인데 간단하게 사내에서 시스템에서 뭔가 발생이 되었을때 쉽게 서버관리자의 메일로 보낼수가 있다.(요즘은 메신저로 보내는게 일반적이어서)
그런데 위의 소스코드에서 사내 서버가 아니라 gmail, naver 등이 포털 사이트의 메일주소로 메일을 보내게 되면 다음과 같은 unable to relay 문제가 생긴다.
[ash84@webdev test]$ python emailtest.py
Traceback (most recent call last):
File “emailtest.py”, line 19, in
s.sendmail(sender,address_book, text)
File “/usr/lib64/python2.6/smtplib.py”, line 709, in sendmail
raise SMTPRecipientsRefused(senderrs)
smtplib.SMTPRecipientsRefused: {‘sh84.ahn@gmail.com’: (550, ‘5.7.1 Unable to relay’)}
위의 에러로그를 보면 알수 있듯이 unable to replay 라는 smtp 상의 문제를 출력하는 것을 볼수가 있다. 이 내용은 수신서버에서 발신서버의 발신을 막은 경우인데, 이 부분을 해결하기 위해서는 보낼때 아래와 같이 로그인을 수행하고 이메일 전송을 수행하면 된다.
Traceback (most recent call last):
File “emailtest.py”, line 19, in
s.sendmail(sender,address_book, text)
File “/usr/lib64/python2.6/smtplib.py”, line 709, in sendmail
raise SMTPRecipientsRefused(senderrs)
smtplib.SMTPRecipientsRefused: {‘sh84.ahn@gmail.com’: (550, ‘5.7.1 Unable to relay’)}
위의 코드에서는 SMTP 기본 포트를 이용해서 로그인을 하고 메일을 보내는 작업을 하였는데 TSL 을 적용하기 위해서는 587 포트를 메일서버 연결시에 적용해 주어야 한다. (SSL 이라면 465)