Python--SMTPでメールを送信
SMTP(Simple Mail Transfer Protocol)は、ソースアドレスから宛先アドレスへのメールを転送するためのルールのセットであり、メッセージの転送方式を制御する簡単なメール転送プロトコルである.
pythonのsmtplibは、Eメールを送信するのに便利な方法を提供しています.smtpプロトコルを簡単にパッケージ化しました.
Pythonが作成したSMTPオブジェクト構文は以下の通りです.
パラメータの説明: host:SMTPサーバホスト.ホストのipアドレスやドメイン名、例えばw 3 cschoolを指定できます.cc、これはオプションパラメータです. port:hostパラメータを指定した場合、SMTPサービスで使用されるポート番号を指定する必要があります.一般的にSMTPポート番号は25です. local_hostname:SMTPが本体にある場合は、サーバアドレスをlocalhostと指定するだけです.
Python SMTPオブジェクトはsendmailメソッドを使用してメールを送信します.構文は次のとおりです.
パラメータの説明: from_addr:メール送信者アドレス. to_addrs:文字列リスト、メール送信アドレス. msg:メッセージを送信 ここで3番目のパラメータに注意してください.msgは文字列で、メールを表します.メールは一般的にタイトル、送信者、受信者、メール内容、添付ファイルなどで構成されていることを知っています.メールを送信するときは、msgのフォーマットに注意してください.このフォーマットはsmtpプロトコルで定義されたフォーマットです.
≪インスタンス|Instance|emdw≫
以下に、Pythonを使用してメールを送信する簡単な例を示します.
PythonでHTML形式のメールを送る
PythonがHTML形式のメールを送信するのと純粋なテキストメッセージを送信するメールの違いはMIMETextで_subtypeはhtmlに設定されています.具体的なコードは以下の通りです.
あるいは、次の例のように、メッセージボディにContent-typeをtext/htmlとして指定することもできます.
Python添付ファイル付きメール送信
添付ファイル付きメールを送信するには、まずMIMEMultipart()インスタンスを作成し、次に添付ファイルを構築し、複数の添付ファイルがある場合は順次構築し、最後にsmtplibを利用する.smtp送信.
以下の例ではContent-type headerがmultipart/mixedであることを指定し、/tmp/testを送信.txtテキストファイル:
pythonのsmtplibは、Eメールを送信するのに便利な方法を提供しています.smtpプロトコルを簡単にパッケージ化しました.
Pythonが作成したSMTPオブジェクト構文は以下の通りです.
import smtplib
smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )
パラメータの説明:
Python SMTPオブジェクトはsendmailメソッドを使用してメールを送信します.構文は次のとおりです.
SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options]
パラメータの説明:
≪インスタンス|Instance|emdw≫
以下に、Pythonを使用してメールを送信する簡単な例を示します.
#!/usr/bin/python
import smtplib
sender = '[email protected]'
receivers = ['[email protected]']
message = """From: From Person <[email protected]>
To: To Person <[email protected]>
Subject: SMTP e-mail test
This is a test e-mail message.
"""
try:
smtpObj = smtplib.SMTP('localhost')
smtpObj.sendmail(sender, receivers, message)
print "Successfully sent email"
except SMTPException:
print "Error: unable to send email"
PythonでHTML形式のメールを送る
PythonがHTML形式のメールを送信するのと純粋なテキストメッセージを送信するメールの違いはMIMETextで_subtypeはhtmlに設定されています.具体的なコードは以下の通りです.
import smtplib
from email.mime.text import MIMEText
mailto_list=["[email protected]"]
mail_host="smtp.XXX.com" #
mail_user="XXX" #
mail_pass="XXXX" #
mail_postfix="XXX.com" #
def send_mail(to_list,sub,content): #to_list: ;sub: ;content:
me="hello"+"<"+mail_user+"@"+mail_postfix+">" # hello , ,
msg = MIMEText(content,_subtype='html',_charset='gb2312') # , html
msg['Subject'] = sub #
msg['From'] = me
msg['To'] = ";".join(to_list)
try:
s = smtplib.SMTP()
s.connect(mail_host) # smtp
s.login(mail_user,mail_pass) #
s.sendmail(me, to_list, msg.as_string()) #
s.close()
return True
except Exception, e:
print str(e)
return False
if __name__ == '__main__':
if send_mail(mailto_list,"hello","<a href='http://www.cnblogs.com/xiaowuyi'> </a>"):
print(" ")
else:
print(" ")
あるいは、次の例のように、メッセージボディにContent-typeをtext/htmlとして指定することもできます.
#!/usr/bin/python
import smtplib
message = """From: From Person <[email protected]>
To: To Person <[email protected]>
MIME-Version: 1.0
Content-type: text/html
Subject: SMTP HTML e-mail test
This is an e-mail message to be sent in HTML format
<b>This is HTML message.</b>
<h1>This is headline.</h1>
"""
try:
smtpObj = smtplib.SMTP('localhost')
smtpObj.sendmail(sender, receivers, message)
print("Successfully sent email")
except SMTPException:
print("Error: unable to send email")
Python添付ファイル付きメール送信
添付ファイル付きメールを送信するには、まずMIMEMultipart()インスタンスを作成し、次に添付ファイルを構築し、複数の添付ファイルがある場合は順次構築し、最後にsmtplibを利用する.smtp送信.
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import smtplib
#
msg = MIMEMultipart()
# 1
att1 = MIMEText(open('d:\\123.rar', 'rb').read(), 'base64', 'gb2312')
att1["Content-Type"] = 'application/octet-stream'
att1["Content-Disposition"] = 'attachment; filename="123.doc"'# filename , ,
msg.attach(att1)
# 2
att2 = MIMEText(open('d:\\123.txt', 'rb').read(), 'base64', 'gb2312')
att2["Content-Type"] = 'application/octet-stream'
att2["Content-Disposition"] = 'attachment; filename="123.txt"'
msg.attach(att2)
#
msg['to'] = '[email protected]'
msg['from'] = '[email protected]'
msg['subject'] = 'hello world'
#
try:
server = smtplib.SMTP()
server.connect('smtp.XXX.com')
server.login('XXX','XXXXX')#XXX ,XXXXX
server.sendmail(msg['from'], msg['to'],msg.as_string())
server.quit()
print ' '
except Exception, e:
print(str(e))
以下の例ではContent-type headerがmultipart/mixedであることを指定し、/tmp/testを送信.txtテキストファイル:
#!/usr/bin/python
import smtplib
import base64
filename = "/tmp/test.txt"
# base64
fo = open(filename, "rb")
filecontent = fo.read()
encodedcontent = base64.b64encode(filecontent) # base64
sender = '[email protected]'
reciever = '[email protected]'
marker = "AUNIQUEMARKER"
body ="""
This is a test email to send an attachement.
"""
#
part1 = """From: From Person <[email protected]>
To: To Person <[email protected]>
Subject: Sending Attachement
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary=%s
--%s
""" % (marker, marker)
#
part2 = """Content-Type: text/plain
Content-Transfer-Encoding:8bit
%s
--%s
""" % (body,marker)
#
part3 = """Content-Type: multipart/mixed; name=\"%s\"
Content-Transfer-Encoding:base64
Content-Disposition: attachment; filename=%s
%s
--%s--
""" %(filename, filename, encodedcontent, marker)
message = part1 + part2 + part3
try:
smtpObj = smtplib.SMTP('localhost')
smtpObj.sendmail(sender, reciever, message)
print("Successfully sent email")
except Exception:
print("Error: unable to send email")