smtplib【SMTP プロトコルクライアント】3.2~3.63.12
メモ
- メール送信関連モジュール
- メール送信基本処理
処理 python 3.6 以上 python 3.2 以上 3.6 未満 python 3.2 未満 メッセージ作成 email.message.EmailMessage3.6 で作成 email.mime.text.MIMEText で作成
(メール送信時に文字列変換)メッセージ内のプレーンテキストの改行:\r・\n は送信時に \r\n に自動変換 接続 接続オブジェクト生成
ホスト名を省略した場合、connect【接続】で接続ログイン等 必要に応じてlogin【ログイン】等実行 送信先編集 メール送信で送信先を省略すると、右記処理をメッセージ内容を元に処理 TO・CC・BCC を全て含んだリストを作成 (メール送信時に指定)
メッセージから BCC 情報を削除HTML テキスト メッセージのメディアタイプを text/html に設定 (省略) 添付ファイル メッセージにファイル内容をメディアタイプを指定して追加
境界区切りは自動設定(省略) メール送信 send_message【メール送信 (Message オブジェクト)】3.2
(内部で sendmail【メール送信 (メッセージ文字列)】呼び出し)sendmail【メール送信 (メッセージ文字列)】 切断 with 文使用で自動処理3.2 quit【セッション終了】を明示的に記述
- メール送信基本処理
- メール送信例
- Tips:メール 送信 (Python 3.6 以上は、HTML テキスト・添付ファイル対応)
Gmail 送信
Yahoo!メール 送信
- Tips:メール 送信 (Python 3.6 以上は、HTML テキスト・添付ファイル対応)
- クラス・例外クラス・属性・メソッド 一覧
クラス 備考 SMTP【SMTP接続 クラス】3.3 SMTP_SSL【SMTP(SSL)接続 クラス】3.3 / 3.63.12 SMTP【SMTP接続 クラス】を継承 LMTP【LMTP接続 クラス】 SMTP【SMTP接続 クラス】を継承 属性 備考 does_esmtp【サーバの ESMTP サポート有無】 1 (サポート) / 0 (未サポート) ehlo_resp【EHLO レスポンスメッセージ】 esmtp_features【拡張SMTPサービス】 サービス名・パラメータ (辞書型) helo_resp【HELO レスポンスメッセージ】 password【ログイン パスワード】 login【ログイン】で設定
auth【AUTH コマンド送信】で提供認証メカニズムを利用する場合、事前に設定user【ログイン ユーザ名】 例外クラス 備考 SMTPAuthenticationError【認証失敗例外】 SMTPConnectError【接続エラー例外】 SMTPDataError【メッセージデータエラー例外】 SMTPException【基底例外】 全ての例外の基底 SMTPHeloError【HELOエラー例外】 SMTPNotSupportedError【未サポート例外】3.5 SMTPRecipientsRefused【全受取エラー例外】 recipients 属性:受取エラーアドレス (辞書型) SMTPResponseException【エラーコードあり例外】 smtp_code 属性:エラーコード
smtp_error 属性:エラーメッセージSMTPSenderRefused【送信元アドレスエラー例外】 SMTPServerDisconnected【切断例外】 - 関連
- email.message【メールメッセージ】3.6
- Python 標準ライブラリ
smtplib --- SMTP プロトコルクライアント - SMTP 使用例
email: 使用例 - IETF Datatracker (英語) (Internet Engineering Task Force:インターネット技術特別調査委員会)
RFC (Request for Comments)
Simple Mail Transfer Protocol RFC 5321 (英語)
SMTP 521 and 556 Reply Codes RFC 7504 (英語)
Local Mail Transfer Protocol RFC 2033 (英語)
(旧) STANDARD FOR THE FORMAT OF ARPA INTERNET TEXT MESSAGES RFC 822 (英語)
(旧) Internet Message Format RFC 2822 (英語)
Internet Message Format RFC 5322 (英語)
Update to Internet Message Format to Allow Group Syntax in the "From:" and "Sender:" Header Fields RFC 6854 (英語)
Multipurpose Internet Mail Extensions (MIME) Part One:Format of Internet Message Bodies RFC 2045 (英語)
Multipurpose Internet Mail Extensions (MIME) Part Two:Media Types RFC 2046 (英語)
MIME (Multipurpose Internet Mail Extensions) Part Three:Message Header Extensions for Non-ASCII Text RFC 2047 (英語)
(旧) Multipurpose Internet Mail Extensions (MIME) Part Four:Registration Procedures RFC 2048 (英語)
(旧) Media Type Specifications and Registration Procedures RFC 4288 (英語)
Media Type Specifications and Registration Procedures RFC 6838 (英語)
Multipurpose Internet Mail Extensions (MIME) Part Four:Registration Procedures RFC 4289 (英語)
Multipurpose Internet Mail Extensions (MIME) Part Five:Conformance Criteria and Examples RFC 2049 (英語)
Japanese Character Encoding for Internet Messages RFC 1468 (英語) - JPNIC (Japan Network Information Center) 一般社団法人日本ネットワークインフォメーションセンター
IETFとRFC
SMTP【SMTP接続 クラス】
SMTP_SSL【SMTP(SSL)接続 クラス】3.12
LMTP【LMTP接続 クラス】
メモ
- 各クラス共通
- with 文サポート3.3 (quit【セッション終了】省略可)
- コンストラクタのホスト名・ポート番号指定で connect【接続】呼び出し
- SMTP (Simple Mail Transfer Protocol)【SMTP接続 クラス】
- TLS (Transport Layer Security) 開始は、 starttls【TLS 開始】
- SMTP_SSL (Secure Sockets Layer)【SMTP(SSL)接続 クラス】
- SSL で接続
- SMTP【SMTP接続 クラス】を継承
- LMTP (Local Mail Transfer Protocol)【LMTP接続 クラス】
- SMTP【SMTP接続 クラス】を継承
- 関連
構文
# SMTP【SMTP接続 クラス】
class smtplib.SMTP(host='', port=0, local_hostname=None, [timeout, ]source_address=None3.3)
# SMTP_SSL【SMTP(SSL)接続 クラス】
class smtplib.SMTP_SSL(host='', port=0, local_hostname=None, keyfile=None3.6,3.12 certfile=None3.6,3.12 *3.12, [timeout, ]context=None3.3, source_address=None3.3)
# LMTP【LMTP接続 クラス】
class smtplib.LMTP(host='', port=LMTP_PORT, local_hostname=None, source_address=None)
hostホスト名
portポート番号
local_hostnameローカルホスト名
keyfile3.6キーファイル3.12
certfile3.6証明書チェーンファイル3.12
以下はキーワード引数 3.12
timeoutタイムアウト (秒単位)
contextコンテキスト (SSLContext オブジェクト等)
source_address複数インタフェースの送信元 (ホスト名とポート番号のタプル)
例
auth【AUTH コマンド送信】3.5
メモ
- AUTH (認証:Authentication) コマンド送信
- 通常は login【ログイン】 で処理
- 関連
構文
SMTP.auth(mechanism, authobject, *, initial_response_ok=True)
戻り値レスポンスコード(数値)・レスポンスメッセージ(文字列)のタプル
mechanism認証メカニズム (大小文字の区別なし)
authobject認証処理オブジェクト (オプションの単一引数)
SMTP クラスが提供している認証は下記を参照
initial_response_ok初期応答の送信有無
提供 認証メカニズム | 認証処理オブジェクト | 備考 |
---|---|---|
"CRAM-MD5" | auth_cram_md5(challenge=None) | 事前に下記属性の設定が必要 user【ログイン ユーザ名】 password【ログイン パスワード】 |
"PLAIN" | auth_plain(challenge=None) | |
"LOGIN" | auth_login(challenge=None) |
例
connect【接続】
メモ
- 接続
- コンストラクタのホスト名・ポート番号指定で自動的に呼び出し
- 関連
構文
SMTP.connect(host='localhost', port=0)
戻り値レスポンスコード(数値)・レスポンスメッセージ(文字列)のタプル
hostホスト名
portポート番号
例
docmd【指定コマンド送信】
メモ
- 指定コマンド送信
- 関連
構文
SMTP.docmd(cmd, args='')
戻り値レスポンスコード(数値)・レスポンスメッセージ(文字列)のタプル
cmdコマンド
argsオプション引数
例外SMTPServerDisconnected【切断例外】
例
ehlo【EHLO コマンド送信】
メモ
- EHLO (Extended HELLO) コマンド送信
- 関連
構文
SMTP.ehlo(name='')
戻り値レスポンスコード(数値)・レスポンスメッセージ(文字列)のタプル
nameホスト名
例
ehlo_or_helo_if_needed【EHLO・HELO コマンド送信】
メモ
- 必要な場合、EHLO・HELO コマンド送信
- EHLO または HELO コマンドが送信されていない場合、
EHLO コマンド送信、レスポンスコードが 200 番台以外の場合、
HELO コマンド送信 - 下記内で呼び出し
login【ログイン】
send_message【メール送信 (Message オブジェクト)】
sendmail【メール送信 (メッセージ文字列)】
starttls【TLS 開始】
- EHLO または HELO コマンドが送信されていない場合、
- 関連
構文
SMTP.ehlo_or_helo_if_needed()
戻り値なし
例外SMTPHeloError【HELOエラー例外】
例
has_extn【拡張SMTPサービスチェック】
メモ
- 拡張SMTPサービスセットのチェック
- 関連
構文
SMTP.has_extn(name)
戻り値サポート有無 (True / False)
nameサービス名 (大小文字の区別なし)
例
helo【HELO コマンド送信】
メモ
- HELO (HELLO) コマンド送信
- 下記属性を設定
helo_resp【HELO レスポンスメッセージ】
- 下記属性を設定
- 関連
構文
SMTP.helo(name='')
戻り値レスポンスコード(数値)・レスポンスメッセージ(文字列)のタプル
nameホスト名
例
login【ログイン】3.5
メモ
- ログイン
- セッションが無い場合、ehlo_or_helo_if_needed【EHLO・HELO コマンド送信】で作成
- サーバがサポートしている認証を元に、 提供している認証メカニズム(auth【AUTH コマンド送信】 参照)でログイン
- 関連
構文
SMTP.login(user, password, *, initial_response_ok3.5 =True)
戻り値レスポンスコード(数値)・レスポンスメッセージ(文字列)のタプル
userユーザ名
passwordパスワード
initial_response_ok3.5初期応答の送信有無 (auth【AUTH コマンド送信】3.5 に引継ぎ)
例外
SMTPHeloError【HELOエラー例外】
SMTPAuthenticationError【認証失敗例外】ユーザ名・パスワード認証失敗
SMTPNotSupportedError【未サポート例外】3.5AUTH コマンド未サポート
SMTPException【基底例外】適当な認証方法なし
その他例外その他
例
quit【セッション終了】
メモ
- セッション終了
- クラスを with 文で使用すると省略可能3.3
- 関連
構文
SMTP.quit()
戻り値レスポンスコード(数値)・レスポンスメッセージ(文字列)のタプル
例
send_message【メール送信 (Message オブジェクト)】3.23.5
メモ
- メッセージオブジェクトを指定してメール送信
- 通常、メッセージオブジェクトは EmailMessage (email.message.Message の継承) を使用
メッセージ本文の改行は \r\n に変換 - セッションが無い場合、ehlo_or_helo_if_needed【EHLO・HELO コマンド送信】で作成
- 内部で BCC・ニックネーム等の処理後に sendmail【メール送信 (メッセージ文字列)】呼び出し
- 国際化アドレス(SMTPUTF8)対応 3.5
- 例外発生時にコネクションは開いたまま (各種クラスを with文で使用すれば自動切断3.3 )
- 通常、メッセージオブジェクトは EmailMessage (email.message.Message の継承) を使用
- 関連
構文
SMTP.send_message(msg, from_addr=None, to_addrs=None, mail_options=(), rcpt_options=())
戻り値拒否されたアドレスの辞書 (全て受信:空の辞書)
キー拒否アドレス
値レスポンスコード(数値)・レスポンスメッセージ(文字列)のタプル
msgメッセージ (email.message.Messageオブジェクト)
from_addr送信元アドレス (省略:メッセージ内容から設定)
to_addrs送信先アドレス・送信先アドレスのリスト (省略:メッセージ内容から設定)
mail_optionsMAIL FROM コマンドの ESMTPオプションリスト (例:8bitmime)
rcpt_optionsRCPT コマンドの ESMTPオプションリスト (例:DSN)
例外
SMTPRecipientsRefused【全受取エラー例外】全ての受信の拒否 (recipients 属性:戻り値と同様の形式)
SMTPHeloError【HELOエラー例外】HELO コマンドエラー
SMTPSenderRefused【送信元アドレスエラー例外】送信元アドレス不正
SMTPDataError【メッセージデータエラー例外】予期しないエラー (受信拒否以外)
SMTPNotSupported【未サポート例外】3.5サーバが SMTPUTF8 未対応でアドレスに非ASCII文字を含む
例
sendmail【メール送信 (メッセージ文字列)】3.2・3.5
メモ
- メッセージ文字列を指定してメール送信
- BCC・ニックネーム等の処理が必要な場合、 send_message【メール送信 (Message オブジェクト)】3.2 が対応
- 通常、メッセージ文字列は email.mime.text.MIMEText を使用し as_string() で文字列に変換
メッセージ文字列の改行は \r\n に変換 - セッションが無い場合、ehlo_or_helo_if_needed【EHLO・HELO コマンド送信】で作成
- 国際化アドレス(SMTPUTF8)対応 3.5
- 例外発生時にコネクションは開いたまま (各種クラスを with文で使用すれば自動切断3.3 )
- 関連
構文
SMTP.sendmail(from_addr, to_addrs, msg, mail_options=(), rcpt_options=())
戻り値拒否されたアドレスの辞書 (全て受信:空の辞書)
キー拒否アドレス
値レスポンスコード(数値)・レスポンスメッセージ(文字列)のタプル
from_addr送信元アドレス
to_addrs送信先アドレス (複数:TO・CC・BCC 全てのアドレスを含んだリスト)
(メッセージから BCC 情報の削除が必要)
msgメッセージ (文字列・バイト文字列3.2)
mail_optionsMAIL FROM コマンドの ESMTPオプションリスト (例:8bitmime)
rcpt_optionsRCPT コマンドの ESMTPオプションリスト (例:DSN)
例外
SMTPRecipientsRefused【全受取エラー例外】全ての受信の拒否 (recipients 属性:戻り値と同様の形式)
SMTPHeloError【HELOエラー例外】HELO コマンドエラー
SMTPSenderRefused【送信元アドレスエラー例外】送信元アドレス不正
SMTPDataError【メッセージデータエラー例外】予期しないエラー (受信拒否以外)
SMTPNotSupportedError【未サポート例外】3.5mail_optionsに SMTPUTF8 が指定されているが、サーバが未対応
例
set_debuglevel【デバッグ出力レベル設定】3.5
メモ
- デバッグ出力レベル設定
- 接続・送受信メッセージの出力有無の設定
- 関連
構文
SMTP.set_debuglevel(level)
戻り値なし
levelデバッグ出力レベル (下記参照)
デバッグ出力レベル | 備考 |
---|---|
False 0 | 出力なし |
True 1 | 出力あり |
23.5 | 出力あり (タイムスタンプ付) |
例
starttls【TLS 開始】3.3~3.63.12
メモ
- TLS (Transport Layer Security) モードで SMTP 接続
- セッションが無い場合、ehlo_or_helo_if_needed【EHLO・HELO コマンド送信】で作成
- 関連
構文
SMTP.starttls(keyfile=None3.6,3.12 certfile=None3.6,3.12 *3.12, context=None3.3)
戻り値レスポンスコード(数値)・レスポンスメッセージ(文字列)のタプル
keyfile3.6キーファイル3.12
certfile3.6証明書ファイル3.12
以下はキーワード引数 3.12
context3.3SSLコンテキスト (SSLContext オブジェクト)
(keyfile と certfile を None に指定)3.12
例外
SMTPHeloError【HELOエラー例外】HELO コマンドエラー
SMTPNotSupportedError【未サポート例外】3.5サーバが STARTTLS 拡張に未対応
RuntimeError【ランタイムエラー例外】この Python インタプリタで SSL/TLS 未サポート
例
verify【アドレス妥当性チェック】
メモ
- アドレス妥当性チェック
- VRFY コマンドでチェック
- 不正防止の為、一般的に未サポート
- 関連
構文
SMTP.verify(address)
戻り値チェック結果
OK250(正常)・フルアドレス(RFC 822)のタプル
NGエラーコード(400以上)・エラーメッセージのタプル
addressアドレス