メールを送る
Pythonでメールを送るのは、Webページ監視で使ったようなローカルのSMTPサーバで送る方法なら簡単だが、ここではiCloudのようなリモートのSMTPサーバにTLSで接続して送る方法を説明する。
Appleのほかのメールクライアント App 向けの iCloud メールサーバ設定という説明を読んで、まずはApp用パスワードを設定する。ユーザ名は、iCloudのメインの user@icloud.com の形式のメールアドレスである。
メールを組み立てるのは email モジュール、SMTPで送るのは smtplib モジュール、SSL/TLSは ssl モジュールを使う。いずれもPython標準ライブラリに含まれる。特にSSLの Security considerations のBest defaultsを参考にした。
from email.message import EmailMessage
import smtplib
import ssl
# メールを組み立てる
msg = EmailMessage()
msg['From'] = "差出人メアド"
msg['To'] = "宛先メアド"
msg['Subject'] = "件名"
msg.set_content("""本文1行目
本文2行目
""")
# メールを送る
with smtplib.SMTP("smtp.mail.me.com", 587) as smtp:
context = ssl.create_default_context()
smtp.starttls(context=context)
smtp.login("user@icloud.com", "password")
smtp.send_message(msg)
メールがどのように組み立てられたかは次のようにしてみればわかる。
print(msg.as_string())
smtp.starttls() がうまくいくと (220, b'2.0.0 Ready to start TLS') が返る。さらに smtp.login() がうまくいくと (235, b'2.7.0 Authentication successful') が返る。ユーザ名かパスワードが間違っていると SMTPAuthenticationError: (535, b'5.7.8 Error: authentication failed') が返る。メールを送り終わると (221, b'2.0.0 Bye') が返る。