smtplib – SMTPプロトコルクライアント¶

SMTPオブジェクト¶

SMTP インスタンスは以下のメソッドを持っています。

SMTP.set_debuglevel(level)¶

デバッグ出力レベルを設定します。 levelに1またはTrueを設定すると、接続時およびサーバーとの間で送受信されるすべてのメッセージに対してデバッグメッセージが表示されます。

バージョン3.5での変更点:デバッグレベル2の追加

SMTP.docmd(cmd, args=”)¶

サーバーにコマンドcmdを送信します。

これは、数値応答コードと実際の応答行からなる2タプルを返します(複数行の応答は1つの長い行に結合されます)

通常の操作では、このメソッドを明示的に呼び出す必要はありません。

返信を待っている間にサーバーへの接続が切れた場合、SMTPServerDisconnectedが発生します。

SMTP.connect(host=’localhost’, port=0)¶

指定したポートのホストに接続します。 デフォルトでは、標準のSMTPポート(25)でlocalhostに接続します。 ホスト名の最後にコロン(':')と数字が続く場合は、その接尾辞が取り除かれ、その数字が使用するポート番号として解釈されます。 このメソッドは、インスタンスの作成時にホストが指定された場合、コンストラクタによって自動的に呼び出されます。

監査イベント smtplib.connectselfhostport で発生させます。

SMTP.helo(name=’)¶

HELOを使ってSMTPサーバーに自分を識別します。 サーバーから返されたメッセージは、オブジェクトのhelo_resp属性として保存されます。

通常の運用では、このメソッドを明示的に呼び出す必要はありません。

SMTP.ehlo(name=’)¶

EHLOを使ってESMTPサーバーに自分を識別します。 ホスト名の引数には、デフォルトでローカルホストの完全修飾ドメイン名が指定されます。 ESMTPオプションのために応答を調べ、has_extn()ehlo_respdoes_esmtpはサーバーがESMTPをサポートしているかどうかに応じてtrueまたはfalseに設定され、esmtp_featuresはこのサーバーがサポートしているSMTPサービス拡張の名前とそのパラメーター(もしあれば)を含むディクショナリーになります。

メールを送信する前にhas_extn()sendmail()から暗黙の了解で呼び出されます。

SMTP.ehlo_or_helo_if_needed()¶

このメソッドはehlo()helo()EHLOHELOehlo()helo()を呼び出します。

SMTPHeloError

サーバーはHELOのグリーティングに正しく応答しませんでした。

SMTP.has_extn(name)¶

サーバから返されたSMTPサービス拡張のセットにnameが含まれていればTrueFalseを返します。

SMTP.verify(address)¶

SMTPVRFYを使って、このサーバー上のアドレスの有効性をチェックする。 ユーザーのアドレスが有効であれば、コード250とRFC822の完全なアドレス(humannameを含む)からなるアタプルを返します。

注意

多くのサイトでは、スパマーを阻止するためにSMTPを無効にしています。

SMTP.login(user, password, *, initial_response_ok=True)¶

認証が必要なSMTPサーバーにログインします。 引数は、認証するためのユーザ名とパスワードです。 前のEHLOHELOコマンドがこのセッションになかった場合、このメソッドは最初にESMTP EHLOを試みます。

SMTPHeloError

サーバーはHELOの挨拶に正しく応答しませんでした。

SMTPAuthenticationError

サーバーはユーザー名とパスワードの組み合わせを受け入れませんでした。

SMTPNotSupportedError

AUTH コマンドはサーバーでサポートされていません。

SMTPException

適切な認証方法が見つかりませんでした。

smtplibでサポートされている認証方法が、サーバーでサポートされていると広告されている場合、順番に試行されます。 initial_response_okはauth()にパススルーされます。

オプションのキーワード引数initial_response_okは、RFC 4954で規定されている「初期応答」をサポートしている認証方法に対して、チャレンジ/レスポンスを要求するのではなく、AUTHコマンドと一緒に送信するかどうかを指定します。

バージョン 3.5 で変更された点: SMTPNotSupportedErrorの提起が可能になり、initial_response_ok パラメータが追加されました。

SMTP.auth(mechanism, authobject, *, initial_response_ok=True)¶

SMTPAUTH 指定されたauthenticationmechanismのコマンドを発行し、authobjectを介してチャレンジレスポンスを処理します。

mechanismは、AUTHコマンドの引数としてどの認証メカニズムを使用するかを指定します。

authobjectは、オプションで1つの引数を取る呼び出し可能なオブジェクトでなければなりません。

data = authobject(challenge=None)

オプションのキーワード引数initial_response_okがtrueの場合、authobject()は引数なしで最初に呼び出されます。 RFC 4954の “初期応答 “であるASCIIのstrAUTHauthobject()challenge=NoneNoneを返すべきです。 initial_response_okがfalseの場合、authobject()Noneと一緒に最初に呼び出されることはありません。

初期応答のチェックでNoneが返された場合や、initial_response_okがfalseの場合は、サーバーのchallengeesponseを処理するためにauthobject()が呼び出されますが、渡されるchallengeの引数はbytesです。 その結果、ASCIIのstrデータが返され、base64エンコードされてサーバーに送信されます。

SMTPauthobjectsCRAM-MD5PLAINLOGINSMTP.auth_cram_md5SMTP.auth_plainSMTP.auth_loginuserpasswordSMTPプロパティが適切な値に設定されていることを必要とします。

ユーザーコードは通常、authlogin()authsmtplibが直接サポートしていない (またはまだサポートしていない) 認証方法の実装を容易にするために公開されています。

バージョン 3.5 での新機能。5.

SMTP.starttls(keyfile=None, certfile=None, context=None)¶

SMTP接続をTLS(Transport Layer Security)モードにします。 これに続くSMTPコマンドはすべて暗号化されます。

keyfileとcertfileが提供されている場合、それらを使用してssl.SSLContextを作成します。

オプションのコンテキスト パラメーターは ssl.SSLContext オブジェクトです。これは keyfile と certfile を使用する代わりの方法で、指定する場合は keyfile と certfile の両方が None である必要があります。

以前にEHLOHELOコマンドがなかった場合、このメソッドは最初にESMTP EHLOを試みます。

バージョン3.6以降では非推奨となっています。代わりに ssl.SSLContext.load_cert_chain()ssl.create_default_context() にシステムの信頼できる CA 証明書を選択させてください。

SMTPHeloError

サーバーがHELOのグリーティングに正しく応答しませんでした。

SMTPNotSupportedError

サーバーは STARTTLS 拡張をサポートしていません。

RuntimeError

SSL/TLS のサポートは Python インタープリタでは利用できません。

バージョン3.3での変更点:コンテキストが追加されました

バージョン3.4での変更点。

バージョン 3.4 で変更された点: hostname check withSSLContext.check_hostname and Server Name Indicator (seeHAS_SNI)

バージョン 3.5 で変更された点: hostname check withSSLContext.check_hostname and Server Name Indicator (seeHAS_SNI)

div5: STARTTLS をサポートしていないために発生するエラーは、ベースSMTPNotSupportedErrorSMTPExceptionになりました。

SMTP.sendmail(from_addr, to_addrs, msg, mail_options=(), rcpt_options=())¶

メールを送信します。 必要な引数は、RFC 822のfrom-address文字列、RFC 822のto-address文字列のリスト(裸の文字列は1addressのリストとして扱われます)、メッセージ文字列です。 呼び出し側は、8bitmimeコマンドで使用するESMTPオプション(MAIL FROMなど)のリストをmail_optionsとして渡すことができます。すべてのRCPTコマンドで使用されるべきESMTPオプション(DSNコマンドなど)はrcpt_optionsとして渡すことができます。 (異なる受信者に異なるESMTPオプションを使用する必要がある場合は、mail()rcpt()data()などの低レベルのメソッドを使用してメッセージを送信する必要があります。)

注意事項

from_addrとto_addrsのパラメータは、トランスポートエージェントが使用するmessageenvelopeを構築するために使用されます。 sendmailはメッセージのヘッダーを変更することはありません。

msgはASCIIの文字を含む文字列、またはバイト列です。 文字列はasciiコーデックを使ってバイトにエンコードされ、孤立した\r\n\r\nの文字に変換されます。

このセッションで以前にEHLOHELOコマンドがなかった場合、このメソッドはまずESMTP EHLOを試みます。 サーバーがESMTPを行う場合、メッセージのサイズと指定された各オプションがサーバーに渡されます(オプションがサーバーが広告している機能セットに含まれている場合)。 EHLOHELOが試行され、ESMTPオプションは抑制されます。

このメソッドは、少なくとも1つの受信者に対してメールが受け入れられた場合は正常に戻ります。 それ以外の場合は、例外が発生します。 つまり、このメソッドが例外を発生させないのであれば、誰かがあなたのメールを受け取るはずです。 このメソッドが例外を発生させない場合は、拒否された各受信者に対して1つのエントリを持つディクショナリを返します。

SMTPUTF8 が mail_options に含まれていて、サーバーがそれをサポートしている場合、from_addr と to_addrs には非 ASCII 文字が含まれることがあります。

このメソッドは次のような例外を発生させる可能性があります:

SMTPRecipientsRefused

すべての受信者が拒否されました。 誰もメールを受け取りませんでした。 例外オブジェクトの recipients 属性は、拒否された受信者に関する情報を持つ辞書です (少なくとも 1 つの受信者が受け入れられたときに返されるようなもの)。

SMTPHeloError

サーバーはHELOのグリーティングに正しく応答しませんでした。

SMTPSenderRefused

サーバーはfrom_addrを受け入れませんでした。

SMTPDataError

サーバーから予期しないエラーコード(arecipientの拒否以外)が返ってきました。

SMTPNotSupportedError

SMTPUTF8 mail_optionsに指定されていましたが、サーバーではサポートされていません。

特に断りのない限り、例外が発生しても接続は維持されます。

バージョン 3.2 で変更された点: msg がバイト文字列である可能性があります。 SMTPUTF8SMTPNotSupportedErrorが指定されていても、サーバーがサポートしていない場合は、変更されることがあります。

SMTP.send_message(msg, from_addr=None, to_addrs=None, mail_options=(), ¶

これはsendmail()email.message.Messagesendmail()と同じ意味を持ちますが、msgがMessageオブジェクトであることが異なります。

from_addrがNone、to_addrsがNonesend_messageはRFC 5322で規定されているmsgのヘッダーから抽出したアドレスをこれらの引数に入れます。 from_addrにはSenderフィールドがあればそれが設定され、そうでなければFromフィールドが設定されます。to_addrsは、msgのTo、Cc、Bccフィールドの値を組み合わせます。 メッセージにResent-*ヘッダーが1セットだけ含まれている場合、通常のヘッダーは無視され、代わりにResent-*ヘッダーが使用されます。メッセージにResent-*ヘッダーが2セット以上含まれている場合、最新のResent-ヘッダーのセットを明確に検出する方法がないため、ValueErrorが発生します。

send_messageBytesGenerator\r\nを行頭にしてmsgをシリアライズし、sendmail()を呼び出して結果のメッセージを送信します。 from_addrとto_addrsの値にかかわらず、send_messageはmsgに含まれるBccやResent-Bccヘッダーを送信しません。 from_addrとto_addrsのアドレスに非ASCII文字が含まれていて、サーバーがSMTPUTF8SMTPNotSupportedMessageutf8TruepolicySMTPUTF8BODY=8BITMIMEがmail_optionsに追加されています。

バージョン3.2での新機能

バージョン3.5での新機能:国際化されたアドレスのサポート(SMTPUTF8

SMTP.quit

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です