Pythonでメールを送信する:email, smtplib

Pythonでemailパッケージとsmtplibモジュールを使い、メールを送信する方法について説明します。

email を使ってメッセージを作成する

emailパッケージには、メールを扱うために使われる各モジュールが含まれています。今回は、email.mime.textモジュールにある MIMETextクラスを使って、シンプルなテキストメッセージを作成します。
from email.mime.text import MIMEText

message = MIMEText('Hello, world.')  # 本文
message['Subject'] = 'Hello'         # 件名
message['From'] = 'sample@from.com'  # 送信元
message['To'] = 'sample@to.com'      # 送信先
まず、コンストラクタに本文を渡して、message オブジェクトを生成します。 この message オブジェクトに対して Subject, From, To の各キーに文字列の値を設定します。それぞれ、送信者、宛先を表します。

smtplib を使ってメールを送信する

作成したメッセージを送信するためには、email だけではなく、他のモジュールが必要になります。 ここでは smtplib を使ってメールを送信します。SMTP サーバーについては、すでに用意されていることを前提としています。 安全な通信を利用するために、SMTP_SSL クラスを使います。引数は SMTP サーバーのホスト名です。この例では仮の名前になっていますので、実際のものに置き換えてください。
import smtplib
sender = smtplib.SMTP_SSL('smtp.mail.yourserver.com')
この段階で、サーバーに接続できなければエラーが発生します。成功した場合は、タイムアウトする前に login() メソッドでログインしてからメールを送信します。ログイン時には ID とパスワードを渡す必要があります。
sender.login('sample@from.com', 'password')
次に sendmail() メソッドを呼び出してメッセージを送信します。1つ目と2つ目の引数はそれぞれ送信者と宛先のアドレスです。最後の引数には、先ほど作成した message オブジェクトの as_string() メソッドの戻り値を渡します。
sender.sendmail('sample@from.com', 'sample@to.com', message.as_string())
sender.quit()
この一連の操作はサーバーとの接続が要求されますので、例えばインタラクティブモードで直接タイプしていると、タイムアウトする前に実行するのは難しくなります。先に関数として定義しておくか、スクリプトファイルに記述するなど、すぐに実行できる状態になっていることが必要です。