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にしてね。