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.connect
self
host
port
で発生させます。
SMTP.
helo
(name=’)¶
HELO
を使ってSMTPサーバーに自分を識別します。 サーバーから返されたメッセージは、オブジェクトのhelo_resp
属性として保存されます。
通常の運用では、このメソッドを明示的に呼び出す必要はありません。
SMTP.
ehlo
(name=’)¶
EHLO
を使ってESMTPサーバーに自分を識別します。 ホスト名の引数には、デフォルトでローカルホストの完全修飾ドメイン名が指定されます。 ESMTPオプションのために応答を調べ、has_extn()
ehlo_resp
does_esmtp
はサーバーがESMTPをサポートしているかどうかに応じてtrueまたはfalseに設定され、esmtp_features
はこのサーバーがサポートしているSMTPサービス拡張の名前とそのパラメーター(もしあれば)を含むディクショナリーになります。
メールを送信する前にhas_extn()
sendmail()
から暗黙の了解で呼び出されます。
SMTP.
ehlo_or_helo_if_needed
()¶
このメソッドはehlo()
helo()
EHLO
HELO
ehlo()
helo()
を呼び出します。
SMTPHeloError
サーバーはHELO
のグリーティングに正しく応答しませんでした。
SMTP.
has_extn
(name)¶
サーバから返されたSMTPサービス拡張のセットにnameが含まれていればTrue
False
を返します。
SMTP.
verify
(address)¶
SMTPVRFY
を使って、このサーバー上のアドレスの有効性をチェックする。 ユーザーのアドレスが有効であれば、コード250とRFC822の完全なアドレス(humannameを含む)からなるアタプルを返します。
注意
多くのサイトでは、スパマーを阻止するためにSMTPを無効にしています。
SMTP.
login
(user, password, *, initial_response_ok=True)¶
認証が必要なSMTPサーバーにログインします。 引数は、認証するためのユーザ名とパスワードです。 前のEHLO
HELO
コマンドがこのセッションになかった場合、このメソッドは最初に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)¶
SMTP
AUTH
指定されたauthenticationmechanismのコマンドを発行し、authobjectを介してチャレンジレスポンスを処理します。
mechanismは、AUTH
コマンドの引数としてどの認証メカニズムを使用するかを指定します。
authobjectは、オプションで1つの引数を取る呼び出し可能なオブジェクトでなければなりません。
data = authobject(challenge=None)
オプションのキーワード引数initial_response_okがtrueの場合、
authobject()
は引数なしで最初に呼び出されます。 RFC 4954の “初期応答 “であるASCIIのstr
AUTH
authobject()
challenge=None
None
を返すべきです。 initial_response_okがfalseの場合、authobject()
None
と一緒に最初に呼び出されることはありません。初期応答のチェックで
None
が返された場合や、initial_response_okがfalseの場合は、サーバーのchallengeesponseを処理するためにauthobject()
が呼び出されますが、渡されるchallengeの引数はbytes
です。 その結果、ASCIIのstr
データが返され、base64エンコードされてサーバーに送信されます。
SMTP
authobjects
CRAM-MD5
PLAIN
LOGIN
SMTP.auth_cram_md5
SMTP.auth_plain
SMTP.auth_login
user
password
SMTP
プロパティが適切な値に設定されていることを必要とします。ユーザーコードは通常、
auth
login()
auth
smtplib
が直接サポートしていない (またはまだサポートしていない) 認証方法の実装を容易にするために公開されています。バージョン 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
である必要があります。以前に
EHLO
HELO
コマンドがなかった場合、このメソッドは最初にESMTPEHLO
を試みます。バージョン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 with
SSLContext.check_hostname
and Server Name Indicator (seeHAS_SNI
)バージョン 3.5 で変更された点: hostname check with
SSLContext.check_hostname
and Server Name Indicator (seeHAS_SNI
)div5: STARTTLS をサポートしていないために発生するエラーは、ベース
SMTPNotSupportedError
SMTPException
になりました。
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
の文字に変換されます。このセッションで以前に
EHLO
HELO
コマンドがなかった場合、このメソッドはまずESMTPEHLO
を試みます。 サーバーがESMTPを行う場合、メッセージのサイズと指定された各オプションがサーバーに渡されます(オプションがサーバーが広告している機能セットに含まれている場合)。EHLO
HELO
が試行され、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 がバイト文字列である可能性があります。
SMTPUTF8
SMTPNotSupportedError
が指定されていても、サーバーがサポートしていない場合は、変更されることがあります。
SMTP.
send_message
(msg, from_addr=None, to_addrs=None, mail_options=(), ¶これは
sendmail()
email.message.Message
sendmail()
と同じ意味を持ちますが、msgがMessage
オブジェクトであることが異なります。from_addrが
None
、to_addrsがNone
send_message
はRFC 5322で規定されているmsgのヘッダーから抽出したアドレスをこれらの引数に入れます。 from_addrにはSenderフィールドがあればそれが設定され、そうでなければFromフィールドが設定されます。to_addrsは、msgのTo、Cc、Bccフィールドの値を組み合わせます。 メッセージにResent-*ヘッダーが1セットだけ含まれている場合、通常のヘッダーは無視され、代わりにResent-*ヘッダーが使用されます。メッセージにResent-*ヘッダーが2セット以上含まれている場合、最新のResent-ヘッダーのセットを明確に検出する方法がないため、ValueError
が発生します。
send_message
BytesGenerator
\r\n
を行頭にしてmsgをシリアライズし、sendmail()
を呼び出して結果のメッセージを送信します。 from_addrとto_addrsの値にかかわらず、send_message
はmsgに含まれるBccやResent-Bccヘッダーを送信しません。 from_addrとto_addrsのアドレスに非ASCII文字が含まれていて、サーバーがSMTPUTF8
SMTPNotSupported
Message
utf8
True
policy
SMTPUTF8
BODY=8BITMIME
がmail_optionsに追加されています。バージョン3.2での新機能
バージョン3.5での新機能:国際化されたアドレスのサポート(
SMTPUTF8
)
SMTP.
quit
。