1: 2017-06-12 (月) 13:09:44 njf |
現: 2017-06-12 (月) 23:57:00 njf |
- | Python2.x系でメールの送信を行うには、以下のようにsmtplibを使います。 | + | Python2.x系でメールサーバーを介してメールの送信を行うには、以下のようにsmtplibを使います。 |
| また、emailライブラリを使ってヘッダーの作成や日本語のエンコードを行います。 | | また、emailライブラリを使ってヘッダーの作成や日本語のエンコードを行います。 |
| | | |
| # -*- coding: utf-8 -*- | | # -*- coding: utf-8 -*- |
| + | |
| import smtplib | | import smtplib |
| from email.MIMEText import MIMEText | | from email.MIMEText import MIMEText |
| from email.Header import Header | | from email.Header import Header |
| from email.Utils import formatdate | | from email.Utils import formatdate |
| + | |
| from_address = 'fromadress@xxx.jp' | | from_address = 'fromadress@xxx.jp' |
| to_address = 'toaddress@xxx.jp' | | to_address = 'toaddress@xxx.jp' |
| + | |
| charset = 'ISO-2022-JP' | | charset = 'ISO-2022-JP' |
| subject = u'テスト' | | subject = u'テスト' |
| text = u'テストです' | | text = u'テストです' |
| + | |
| msg = MIMEText(text.encode(charset), 'plain', charset) | | msg = MIMEText(text.encode(charset), 'plain', charset) |
| msg['Subject'] = Header(subject, charset) | | msg['Subject'] = Header(subject, charset) |
| msg['To'] = to_address | | msg['To'] = to_address |
| msg['Date'] = formatdate(localtime=True) | | msg['Date'] = formatdate(localtime=True) |
| + | |
| smtp = smtplib.SMTP('xxx.jp',587) | | smtp = smtplib.SMTP('xxx.jp',587) |
| smtp.starttls() | | smtp.starttls() |
| smtp.close() | | smtp.close() |
| | | |
- | 「 smtplib.SMTP('xxx.jp',587)」の部分の「587」はポート番号です。 | + | 「 smtplib.SMTP('xxx.jp',587)」の"xxx.jp"はSMTPのサーバー名で、「587」はポート番号です。 |
| 通常この番号が使われますが、サーバーによって変わる場合があります。 | | 通常この番号が使われますが、サーバーによって変わる場合があります。 |
| | | |
| 「starttls」は暗号化通信を始めるメソッドで、「login」はサーバーへのログインを行います。 | | 「starttls」は暗号化通信を始めるメソッドで、「login」はサーバーへのログインを行います。 |
| | | |
- | 古いシステムではメールの送信にログインや暗号化が必要ない場合もありますが、現在では迷惑メールの送信に利用されたりしないように、これらは必須となっています。 | + | 古いシステムではメールの送信にログインや暗号化が必要ない場合もありますが、現在では迷惑メールの送信に利用されたりしないように、ほとんどの場合で暗号化とログインは必須となっています。 |
| | | |
- | Pythonでのメールの送信をネットで検索すると、「starttls」の前後で「ehlo」を実行しているサンプルコードよく見かけますが、実際には「starttls」や「login」メソッドでは、もし「ehlo」が実行されていなければ実行するという仕様になっているので、なくても送信可能です。 | + | Pythonでのメールの送信をネットで検索すると、「starttls」の前後で「ehlo」を実行しているサンプルコードよく見かけます。「ehlo」はサーバーとクライアントの機能の情報を交換するもので、主要なコマンドの前に実行すべきものです。しかし、実際には「starttls」や「login」メソッドでは、もし「ehlo」が実行されていなければ内部で実行するという仕様になっているので、なくても送信可能です。もちろん明示的に実行してもかまいません。 |