ホームページ  >  記事  >  バックエンド開発  >  Python の smtplib モジュールを使用して電子メールを処理する方法の詳細な説明と例

Python の smtplib モジュールを使用して電子メールを処理する方法の詳細な説明と例

高洛峰
高洛峰オリジナル
2017-02-15 14:27:471261ブラウズ

インターネット ベースのアプリケーションでは、多くの場合、プログラムが電子メールを自動的に送信する必要があります。たとえば、Web サイトの登録システムは、ユーザーが登録するときに登録を確認する電子メールを送信します。ユーザーがログイン パスワードを忘れた場合、ユーザーは電子メールを通じてパスワードを取得します。 smtplib モジュールは、Python での SMTP (Simple Mail Transfer Protocol) のクライアント実装です。 smtplib モジュールを使用すると、電子メールを簡単に送信できます。次の例では、電子メールを送信するために 10 行未満のコードを使用しています:

#coding=gbk 
 
import smtplib 
 
smtp = smtplib.SMTP() 
smtp.connect("smtp.yeah.net", "25") 
smtp.login('用户名', '密码') 
smtp.sendmail('from@yeah.net', 'to@21cn.com', 'From: from@yeah.net/r/nTo: to@21cn.com/r/nSubject: this is a email from python demo/r/n/r/nJust for test~_~') 
smtp.quit()


この例は非常に簡単です^_^! stmplib モジュールのクラスとメソッドについては、以下で詳しく紹介します。
smtplib.SMTP([host[, port[, local_hostname[, timeout]]]])

SMTP クラスのコンストラクター。この接続を通じて、SMTP サーバーに指示を送信できます。 . 関連する操作 (ログイン、メールの送信など) を実行します。このクラスは、以下で説明する多数のメソッドを提供します。すべてのパラメータはオプションです。上の例の SMTP ホストは「smtp.yeah.net」です。デフォルトは 25 です。 SMTP オブジェクトを作成しています。 これら 2 つのパラメータが提供されており、初期化中にサーバーに接続するために connect メソッドが自動的に呼び出されます。

smtplibモジュールにはSMTP_SSLクラスとLMTPクラスも提供されており、それらの動作は基本的にSMTPと同じです。

smtplib.SMTP によって提供されるメソッド:


SMTP.set_debuglevel(level)


デバッグモードかどうかを設定します。デフォルトは False で、非デバッグ モードです。これは、デバッグ情報が出力されないことを意味します。


SMTP.connect([host[, port]])


指定されたsmtpサーバーに接続します。パラメータはそれぞれ smpt ホストとポートを表します。注: ホスト パラメータでポート番号を指定することもできるため (例: smpt.yeah.net:25)、ポート パラメータを指定する必要はありません。


SMTP.docmd(cmd[, argstring])


SMTPサーバーに指示を送信します。オプションのパラメータ argstring は、命令のパラメータを表します。次の例では、 docmd メソッドを呼び出してサーバーに指示を送信することで、電子メール送信を完全に実装しています (smtp.yeah.net メール サーバーでテストされています。他のメール サーバーでは試されていません)。

SMTP.helo([hostname])


「helo」コマンドを使用して、サーバーに対して ID を確認します。これは、SMTP サーバーに「私が誰であるか」を伝えることと同じです。


SMTP.has_extn(name)

指定された名前がサーバーのメーリングリストに存在するかどうかを確認します。セキュリティ上の理由から、SMTP サーバーはこのコマンドをブロックすることがよくあります。

SMTP.verify(address)


指定されたメールアドレスがサーバーに存在するかどうかを確認します。セキュリティ上の理由から、SMTP サーバーはこのコマンドをブロックすることがよくあります。

SMTP.login(ユーザー、パスワード)


SMTPサーバーにログインします。現在、ほぼすべての SMTP サーバーは、電子メールの送信を許可する前にユーザー情報が正当であることを検証する必要があります。

SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options])


メールを送信します。ここで、3 番目のパラメータ msg が電子メールを表す文字列であることに注意してください。一般に、メールはタイトル、送信者、受信者、メールの内容、添付ファイルなどで構成されていることがわかります。メールを送信するときは、メッセージの形式に注意してください。この形式は、smtp プロトコルで定義されている形式です。上記の例では、msg の値は次のとおりです:


import smtplib, base64, time 
userName = base64.encodestring('from').strip() 
password = base64.encodestring('password').strip() 
smtp = smtplib.SMTP() 
smtp.connect("smtp.yeah.net:25") 
print smtp.docmd('helo', 'from') 
print smtp.docmd('auth login') 
print smtp.docmd(userName) 
print smtp.docmd(password) 
print smtp.docmd(&#39;mail from:&#39;, &#39;<from@yeah.net>&#39;) 
print smtp.docmd(&#39;rcpt to:&#39;, &#39;<from@yeah.net>&#39;) 
#data 指令表示邮件内容 
print smtp.docmd(&#39;data&#39;) 
print smtp.docmd(
&#39;&#39;&#39;&#39;&#39;from: from@yeah.net 
to: from@yeah.net 
subject: subject 
email body 
. 
&#39;&#39;&#39;
) 
smtp.quit()


この文字列は、電子メールの送信者が「from@yeah.net」で受信者が「to@21cn」であることを意味します。 com」、メールのタイトルは「test」、メールの内容は「just for test」です。注意してみると、送信するメールの内容が写真、動画、添付ファイルなど非常に複雑な場合、MIME 形式に従って文字列を結合するのは非常に面倒です。心配しないでください。Python はこれをすでに考慮しており、写真、ビデオ、添付ファイルなどの複雑なコンテンツを含む電子メールを簡単に送信できる電子メール モジュールを提供しています。 smtplib モジュールを紹介した後、メール モジュールの基本的な使い方を簡単に紹介します。

SMTP.quit()

SMTP サーバーから切断します。これは、「quit」コマンドを送信するのと同じです。

email とその関連サブモジュール


emial モジュールは、RFC 2822 に基づいた MIME やその他のメッセージ ドキュメントを含む電子メール メッセージを処理するために使用されます。これらのモジュールを使用して電子メールのコンテンツを定義するのは非常に簡単です。よく使用されるクラスをいくつか示します:


class email.mime.multipart. MIMEMultipart: 複数の MIME オブジェクトのコレクション。

クラス email.mime.audio.MIMEAudio: MIME オーディオ オブジェクト。

  • クラス email.mime.image.MIMEImage: MIME バイナリ ファイル オブジェクト。

  • クラス email.mime.text. MIMEText: MIME テキスト オブジェクト。

  • 上記の説明はわかりにくいように思えるかもしれませんが、実際、私の SMTP と MIME の理解も非常に表面的です。しかし、ほとんどの場合、必要なのは使い方を知ることだけです。以下は、これらのクラスを使用して添付ファイル付きの電子メールを送信する方法を示す簡単な例です。

  • &#39;&#39;&#39;&#39;&#39;From: from@yeah.net 
    To: to@21cn.com 
    Subject: test 
     
    just for test&#39;&#39;&#39;
他の例では、電子メールを処理するための Python の smtplib モジュールの使用について説明しています。 PHP中国語ウェブサイトです!



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。