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