본문 바로가기

Python

메일 발송

메일 발송



SMTP를 활용하면 메일을 발송 봇을 만들 수 있다. 해보자



Prerequisite



이 글은 리눅스 환경을 기반으로 한다. SMTP서버를 구축하는 것 또한 포함한다.


그러므로, 윈도우에서 개발하는 경우 안타깝지만

  1. 윈도우에서 SMTP서버를 구축하는 방법을 독학하거나
  2. 자체 SMTP서버를 사용하는 것이 아닌, Gmail[각주:1] 등 외부 SMTP서비스를 사용해서 메일을 발송 (부록 참조)

하도록 하자



1. SMTP서버 구축



간단하다 postfix를 설치하면 된다



sudo apt-get install postfix


딱히 설정할 것은 없다. 메일 '발송' 봇을 만드는 것이기에 골치아픈 메일 수신을 위한 각종 설정을 할 필요가 없기 때문이다.





2. 메일 생성



간단한 Text를 본문으로 갖는 메일을 만들어보자



from email.mime.text import MIMEText

mail = MIMEText('this mail contains messages from makerj!')
mail['Subject'] = 'this is mail title'


From과 To는 메일을 발송할 때 설정하면 되므로 메일에는 정말 메일의 제목, 내용만을 다루자.






3. 메일 발송



2에서 생성한 메일을 발송하자



import smtplib
mailserver = smtplib.SMTP('localhost')
mailserver.sendmail('admin@mysite.com', ['p1@example.com, p2@example.com'], mail.as_string())


sendmail은 From, To, Mail이다.

예제와 같이 To는 리스트 형식으로 여러명에게 동시에 발송할 수 있다. 한명한테만 보내려면 리스트 만들 필요 없고, 그냥 문자열 형식을 쓰자.






부록. 외부 SMTP 서비스를 사용해서 메일 보내기



이 부록은 TLS를 통한 외부 SMTP서버를 이용하는 것을 다룬다.

TLS를 지원하지 않는 메일 서버에 접속하는 방법은 다루지 않는다. 데이터 보호가 안되는 외부 메일 서버는 이용하기 싫기 때문이다.



server_ssl = smtplib.SMTP_SSL('smtp.gmail.com', 587)
server_ssl.ehlo() # optional, called by login()
server_ssl.login('example@gmail.com', 'password')
server_ssl.sendmail('example@gmail.com', 'foo@example.com', mail.as_string())
server_ssl.close()


이렇게 하면 실제로 gmail 서비스를 사용해서 메일을 발송할 수 있다. (당연히 주석1에서 언급한대로 구글 계정을 설정해두었다고 가정)

  1. 참고로 Gmail은 다른 메일 서비스와는 다르게 보안이 굉장히 강력하다. 그 결과 웹 브라우저를 사용한 접근이 아니면 로그인을 차단한다(!) Gmail을 사용하고 싶다면 구글 계정 페이지에서 보안 레벨을 낮추면 된다. '신뢰할 수 없는 접근'의 보안을 해제하자 [본문으로]

'Python' 카테고리의 다른 글

python multiprocessing AttributeError  (0) 2016.02.08
os.path 사용하기  (0) 2016.01.13
Random  (0) 2015.12.08
IP확인  (0) 2015.12.08
Python Time  (0) 2015.11.17