インターネット ベースのアプリケーションでは、多くの場合、プログラムが電子メールを自動的に送信する必要があります。たとえば、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.has_extn(name)
指定された名前がサーバーのメーリングリストに存在するかどうかを確認します。セキュリティ上の理由から、SMTP サーバーはこのコマンドをブロックすることがよくあります。
SMTP.verify(address)
指定されたメールアドレスがサーバーに存在するかどうかを確認します。セキュリティ上の理由から、SMTP サーバーはこのコマンドをブロックすることがよくあります。
SMTPサーバーにログインします。現在、ほぼすべての SMTP サーバーは、電子メールの送信を許可する前にユーザー情報が正当であることを検証する必要があります。
メールを送信します。ここで、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('mail from:', '<from@yeah.net>') print smtp.docmd('rcpt to:', '<from@yeah.net>') #data 指令表示邮件内容 print smtp.docmd('data') print smtp.docmd( '''''from: from@yeah.net to: from@yeah.net subject: subject email body . ''' ) smtp.quit()
この文字列は、電子メールの送信者が「from@yeah.net」で受信者が「to@21cn」であることを意味します。 com」、メールのタイトルは「test」、メールの内容は「just for test」です。注意してみると、送信するメールの内容が写真、動画、添付ファイルなど非常に複雑な場合、MIME 形式に従って文字列を結合するのは非常に面倒です。心配しないでください。Python はこれをすでに考慮しており、写真、ビデオ、添付ファイルなどの複雑なコンテンツを含む電子メールを簡単に送信できる電子メール モジュールを提供しています。 smtplib モジュールを紹介した後、メール モジュールの基本的な使い方を簡単に紹介します。
SMTP.quit()
SMTP サーバーから切断します。これは、「quit」コマンドを送信するのと同じです。
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 の理解も非常に表面的です。しかし、ほとんどの場合、必要なのは使い方を知ることだけです。以下は、これらのクラスを使用して添付ファイル付きの電子メールを送信する方法を示す簡単な例です。
'''''From: from@yeah.net To: to@21cn.com Subject: test just for test'''