Python: 単純・日本語メールを送信(smtplib)

概要

メール送信サンプル

使用環境や用途に応じて適宜変更してください。
完全なソースコードはgithubで公開しています。

プレーンテキスト

STARTTLS, SMTPS(SMTP over SSL/TLS)を使用したプレーンテキストを送信するサンプルです。
通信内容の例をこちらで紹介しています。

  • Messageを使用してメッセージを作成し、SMTP接続を表現するSMTPまたはSMTP_SSLを使ってメッセージを送信します。(SMTPとSMTP_SSLは同様に動作します。)
  • STARTTLSを使用する場合、smtplib.SMTP()オブジェクトを生成します。併せて、暗号化通信を開始するためにSMTP.starttls()を使用する必要があります。
  • SMTPSを使用する場合、smtplib.SMTP_SSL()オブジェクトを生成します。
  • 認証を行うために、SMTP.login()を使用します。
  • SMTPサーバとの通信内容を確認したい場合、SMTP.set_debuglevel()を使用します。出力例はこちらをご覧ください。
  • メッセージの送信は、SMTP.send_message()を使用します。同様のメソッドとして、SMTP.sendmail()がありますが、両者の違いはこちらをご覧ください。
  • なお、SMTPサーバやローカル側のリソース使用を最小限にするために、接続に依存しない処理は事前に行うことをお薦めします。(接続時間を可能な限り短くする。)

日本語プレーンテキスト

From, To, 件名, 本文に日本語(UTF-8)を使用したメールを送信するサンプルです。
通信内容の例をこちらで紹介しています。

  • 表示名を付与したFromやToを指定する場合、email.utilsformataddr()を使用します。既定でUTF-8としてエンコードします。
  • 本文として、UTF-8エンコードしたデータを指定するためにstr.encode()を使用します。

参考

Googleアプリパスワードの発行方法

Googleアカウントの、「セキュリティ」-「2段階認証プロセス」-「アプリパスワード」、からアプリパスワードを設定できます。
なお、アプリパスワードはGoogleパスワードとは異なるので、追加で設定する必要があります。また、アプリパスワードを設定するためには、2段階認証プロセスの有効化が必要です。

  1. Googleアカウントを開きます。
  2. 「セキュリティ」の「2段階認証プロセス」を開きます。
  3. 開いたページの下の方にある「アプリパスワード」を開きます。
  4. アプリ名に任意の名前を入力し、「作成」ボタンをクリックします。
  5. 生成されたパスワードが表示されます。

sendmail()とsend_message()の違い

  • SMTP.sendmail()は、低レベルのメール送信メソッドです。次のサンプルのように、自身で生成したメールヘッダ・ボディを引数で指定する必要があります。なお、メールヘッダ・ボディ(文字列)は、Messageのas_string()から取得することもできます。
  • SMTP.send_message()は、高レベルのメール送信メソッドです。引数で指定されたMessageやMIMEMessageオブジェクトから生成されたメールヘッダ・ボディが使用されます。
  • 通常は、Message, MIMEMessageと併せてSMTP.send_message()を使用することになります。独自のメールヘッダ・ボディの使用等の低レベルの操作を行いたい場合は、SMTP.sendmail()を使用します。

SMTP通信のダンプ例

  • 前述のサンプルを使用した際の通信例です。SMTP.set_debuglevel()を使用して出力した内容です。
  • 行頭の”send”はサンプルプログラム(クライアント)からの送信、”reply”はSMTPサーバの応答を表しています。一部は見やすいように適当に改行しています。

STARTTLS

SMTPS

日本語メール