ページへ戻る

− Links

 印刷 

Python​/メールの送信 の変更点 :: NJF Wiki

xpwiki:Python/メールの送信 の変更点

« Prev[3]  
1: 2017-06-12 (月) 13:09:44 njf[4] ソース[5] バックアップ No.1 を復元して編集[6] 現: 2017-06-12 (月) 23:57:00 njf[4] ソース[7] 編集[8]
Line 1: Line 1:
-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)
Line 21: Line 21:
 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()
Line 28: Line 28:
 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」が実行されていなければ内部で実行するという仕様になっているので、なくても送信可能です。もちろん明示的に実行してもかまいません。
« Prev[3]