メールを送る
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')
が返る。