2011년 2월 16일 수요일

[Python] Send mail attached HTML via sendmail

Python에서 SMTP모듈을 쓰지 않고 sendmail 유틸리티를 이용해 HTML Mail을 보내는 방법.

물론 smtp 쓰는게 편하다. 하지만 이 방법은 이유가 있기에 써 먹었던 방법이다.

일단 무조건 UTF-8으로 보낸다고 생각한다.
import os
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.Header import Header

def sendMail(addrfrom, addrto, subject, content):
  smbin = '/usr/sbin/sendmail'
  msg = MIMEMultipart('alternative')
  
  msg.set_charset('utf-8')
  msg['Subject'] = Header(subject, 'UTF-8')
  msg['From'] = addrfrom
  msg['To'] = addrto

  body = MIMEText(content, 'html', _charset='UTF-8')
  msg.attach(body)

  p = os.popen("LANG=utf-8 %s -t" % smbin, "w")
  p.write(msg.as_string())
  
  return p.close()
sendMail()의 동작 원리야 popen으로 sendmail을 열어서 메일 내용을 스펙이 맞게 써 줘서 실행시키는 것 뿐이다.

꼭 이런 식으로 해야 되는지는 의문이지만 어쨌든 잘 되더라.

참고로 utf-8으로 multipart를 붙여버리니 transfer-encoding이 quoted-printable로 되어버린다. 메시지 원문을 읽어보면 아주 기똥찬(?) 내용이 출력된다나...

데이터의 utf-8인코딩 관련 부분은 빼 놓았는데 알아서 처리할 것. 각각 텍스트 마다 .encode('utf-8')을 붙여주면 아마도 되겠지.

댓글 없음 :