解讀Python發送郵件

解讀Python發送郵件html

Python發送郵件須要smtplib和email兩個模塊。也正是因爲咱們在實際工做中能夠導入這些模塊,才使得處理工做中的任務變得更加的簡單。今天,就來好好學習一下使用Python發送郵件吧。安全

SMTP是發送郵件的協議,Python內置對SMTP的支持,能夠發送純文本郵件、HTML郵件以及帶附件的郵件。服務器

Python對SMTP支持有smtplib和email兩個模塊,email負責構造郵件,smtplib負責發送郵件。app

1.郵件正文是文本的格式學習

 1 # -*- coding: UTF-8 -*-
 2 
 3 from email.mime.multipart import MIMEMultipart
 4 from email.mime.text import MIMEText
 5 import smtplib
 6 import sys
 7 import csv
 8 import xlrd
 9 from pyExcelerator import *
10 import os
11 import xlwt
12 from xlutils.copy import copy
13 import pyExcelerator
14 import datetime
15 import time
16 
17 reload(sys)
18 sys.setdefaultencoding("utf-8")
19 
20 mailto_list = [""]  # 郵件接收方的郵件地址
21 mail_host = "smtp.exmail.qq.com"    # 郵件傳送協議服務器
22 mail_user = ""  # 郵件發送方的郵箱帳號
23 mail_pass = ""  # 郵件發送方的郵箱密碼
24 
25 def send_mail(to_list, sub, content):
26     me = "天才白癡夢"+"<"+mail_user+">"
27     msg = MIMEText(content, _subtype='plain', _charset='utf-8')
28     msg['Subject'] = sub    # 郵件主題
29     msg['From'] = me
30     msg['To'] = ";".join(to_list)
31     try:
32         server = smtplib.SMTP()
33         server.connect(mail_host)
34         server.login(mail_user, mail_pass)
35         server.sendmail(me, to_list, msg.as_string())
36         server.close()
37         return True
38     except Exception, e:
39         print str(e)
40         return False
41 
42 if __name__ == '__main__':
43     sub = "天才白癡夢"
44     content = '...'
45     if send_mail(mailto_list, sub, content):
46         print "發送成功"
47     else:
48         print "發送失敗"

2.郵件正文是表格的格式:因爲是表格,因此咱們選擇HTML來實現表格的功能,郵件上面顯示的就是HTML實現的內容了。加密

 1 # -*- coding: UTF-8 -*-
 2 
 3 from email.mime.multipart import MIMEMultipart
 4 from email.mime.text import MIMEText
 5 import smtplib
 6 import sys
 7 import csv
 8 import xlrd
 9 from pyExcelerator import *
10 import os
11 import xlwt
12 from xlutils.copy import copy
13 import pyExcelerator
14 import datetime
15 import time
16 
17 reload(sys)
18 sys.setdefaultencoding("utf-8")
19 
20 mailto_list = [""]  # 郵件接收方的郵件地址
21 mail_host = "smtp.exmail.qq.com"    # 郵件傳送協議服務器
22 mail_user = ""  # 郵件發送方的郵箱帳號
23 mail_pass = ""  # 郵件發送方的郵箱密碼
24 
25 def send_mail(to_list, sub, content):
26     me = "天才白癡夢"+"<"+mail_user+">"
27     # 和上面的代碼不一樣的就是,這裏咱們選擇的是html 的格式
28     msg = MIMEText(content, _subtype='html', _charset='utf-8')
29     msg['Subject'] = sub    # 郵件主題
30     msg['From'] = me
31     msg['To'] = ";".join(to_list)
32     try:
33         server = smtplib.SMTP()
34         server.connect(mail_host)
35         server.login(mail_user, mail_pass)
36         server.sendmail(me, to_list, msg.as_string())
37         server.close()
38         return True
39     except Exception, e:
40         print str(e)
41         return False
42 
43 if __name__ == '__main__':
44     sub = "天才白癡夢"
45     html = '<html></html>'
46     if send_mail(mailto_list, sub, html):
47         print "發送成功"
48     else:
49         print "發送失敗"

3.郵件正文是圖片的格式:要把圖片嵌入到郵件正文中,咱們只需按照發送附件的方式,先把郵件做爲附件添加進去,而後,在HTML中經過引用src="cid:0"就能夠把附件做爲圖片嵌入了。若是有多個圖片,給它們依次編號,而後引用不一樣的cid:x便可。spa

 1 def send_mail(to_list, sub, content):
 2     me = "天才白癡夢"+"<"+mail_user+">"
 3 
 4     msg = MIMEMultipart()
 5     msg['Subject'] = sub    # 郵件主題
 6     msg['From'] = me
 7     msg['To'] = ";".join(to_list)
 8 
 9     txt = MIMEText("天才白癡夢", _subtype='plain', _charset='utf8')
10     msg.attach(txt)
11 
12     # <b>:黑體  <i>:斜體
13     msgText = MIMEText('<b>Some <i>HTML</i> text</b> and an image.<img alt="" src="cid:image1" />good!', 'html', 'utf-8')
14     msg.attach(msgText)
15 
16     file1 = "F:\\1.jpg"
17     image = MIMEImage(open(file1, 'rb').read())
18     image.add_header('Content-ID', '<image1>')
19     msg.attach(image)
20 
21     try:
22         server = smtplib.SMTP()
23         server.connect(mail_host)
24         server.login(mail_user, mail_pass)
25         server.sendmail(me, to_list, msg.as_string())
26         server.close()
27         return True
28     except Exception, e:
29         print str(e)
30         return False
31 
32 if __name__ == '__main__':
33     sub = "天才白癡夢"
34     html = '<html></html>'
35     if send_mail(mailto_list, sub, html):
36         print "發送成功"
37     else:
38         print "發送失敗"

4.發送郵件附件:郵件附件是圖片debug

 1 def send_mail(to_list, sub, content):
 2     me = "天才白癡夢"+"<"+mail_user+">"
 3 
 4     msg = MIMEMultipart()
 5     msg['Subject'] = sub    # 郵件主題
 6     msg['From'] = me
 7     msg['To'] = ";".join(to_list)
 8 
 9     txt = MIMEText("天才白癡夢", _subtype='plain', _charset='utf8')
10     msg.attach(txt)
11 
12     # # <b>:黑體  <i>:斜體
13     # msgText = MIMEText('<b>Some <i>HTML</i> text</b> and an image.<img alt="" src="cid:image1" />good!', 'html', 'utf-8')
14     # msg.attach(msgText)
15     #
16     # file1 = "F:\\1.jpg"
17     # image = MIMEImage(open(file1, 'rb').read())
18     # image.add_header('Content-ID', '<image1>')
19     # msg.attach(image)
20 
21     att = MIMEText(open('F:\\1.jpg', 'rb').read(), 'base64', 'utf-8')
22     att["Content-Type"] = 'application/octet-stream'
23     att["Content-Disposition"] = 'attachment; filename="1.jpg"'
24     msg.attach(att)
25 
26     try:
27         server = smtplib.SMTP()
28         server.connect(mail_host)
29         server.login(mail_user, mail_pass)
30         server.sendmail(me, to_list, msg.as_string())
31         server.close()
32         return True
33     except Exception, e:
34         print str(e)
35         return False

5.發送羣郵件:同時發送給多人code

1 mailto_list = [""]  # 郵件接收方的郵件地址

上面這一行代碼是郵件接收方的郵件地址,若是咱們須要給多人發送郵件的話,就只須要把對方的郵件賬號綁在這一個列表裏就ok了。server

加密SMTP

使用標準的25端口鏈接SMTP服務器時,使用的是明文傳輸,發送郵件的整個過程可能會被竊聽。要更安全地發送郵件,能夠加密SMTP會話,實際上就是先建立SSL安全鏈接,而後再使用SMTP協議發送郵件。

方法:只須要在建立SMTP對象後,馬上調用starttls()方法,就建立了安全鏈接。

1 smtp_server = 'smtp.qq.com'
2 smtp_port = 25    # 默認端口號爲25
3 server = smtplib.SMTP(smtp_server, smtp_port)
4 server.starttls()
5 # 剩下的代碼和前面的如出一轍:
6 server.set_debuglevel(1)     # 打印出和SMTP服務器交互的全部信息
相關文章
相關標籤/搜索