[Python] Send mail attached HTML via sendmail
Python에서 SMTP모듈을 쓰지 않고 sendmail 유틸리티를 이용해 HTML Mail을 보내는 방법.
물론 smtp 쓰는게 편하다. 하지만 이 방법은 이유가 있기에 써 먹었던 방법이다.
일단 무조건 UTF-8으로 보낸다고 생각한다.
꼭 이런 식으로 해야 되는지는 의문이지만 어쨌든 잘 되더라.
참고로 utf-8으로 multipart를 붙여버리니 transfer-encoding이 quoted-printable로 되어버린다. 메시지 원문을 읽어보면 아주 기똥찬(?) 내용이 출력된다나...
데이터의 utf-8인코딩 관련 부분은 빼 놓았는데 알아서 처리할 것. 각각 텍스트 마다
물론 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')
을 붙여주면 아마도 되겠지.
댓글