Pythonでメールを送信する簡単なお仕事があったので、自分用メモ。
気付いたら自分のメール環境はGmail依存になっていて、SMTPサーバがGmailの奴しかなかった。
ということはSMTP over SSL。STARTTLS!
ふつーのSMTPサーバならいくらでも相手したことあるけど、こいつははじめてだぜ。ヒャッハー。
グーグル様にお伺いを立ててみたところ、Pythonでは最初から対応してた。
smtplibとemailを使えば、実に簡単に書けちゃった。
コードはこんな感じでOK。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import smtplib
from email.MIMEText import MIMEText
from email.Utils import formatdate
from email.Header import Header
# gmailにログインするときのメールアドレス
gmail_address = 'hoge@sample.co.jp'
# gmailにログインするときのパスワード(とっても危険)
gmail_passwd = 'password'
# gmailのSMTPサーバアドレス
gmail_smtp_address = 'smtp.gmail.com'
# gmailのSMTPサーバポート番号
gmail_smtp_port = 587
# 送信元メールアドレス
from_address = 'sender@sample.co.jp'
# 送信先メールアドレスのリスト
to_address = ['recipient1@sample.co.jp', 'recipient2@sample.co.jp', ]
# 件名
subject = u'日本語サブジェクト'
# メール本文
body = u'''
ボディも日本語だよ。
改行も大丈夫だよ。
'''
msg = MIMEText(body.encode('iso-2022-jp'), 'plain', 'iso-2022-jp')
msg['From'] = from_address
msg['To'] = ', '.join(to_address)
msg['Date'] = formatdate()
msg['Subject'] = Header(subject.encode('iso-2022-jp'), 'iso-2022-jp')
smtpobj = smtplib.SMTP(gmail_smtp_address, gmail_smtp_port)
smtpobj.ehlo()
smtpobj.starttls() # こっからSSL
smtpobj.ehlo()
smtpobj.login(gmail_address, gmail_passwd) # ログイン
smtpobj.sendmail(from_address, to_address, message.as_string()) # 送信
smtpobj.close()
日本語対応でちょっと躓いたケド、MIMETextに渡す時に、はじめからISO-2022-JPに変換してエンコードを明示してやればいい。
UTF-8がいい、という人はUTF-8にしてね。