解讀Python發送郵件
解讀Python發送郵件
Python發送郵件需要smtplib和email兩個模塊。也正是由于我們在實際工作中可以導入這些模塊,才使得處理工作中的任務變得更加的簡單。今天,就來好好學習一下使用Python發送郵件吧。
SMTP是發送郵件的協議,Python內置對SMTP的支持,可以發送純文本郵件、HTML郵件以及帶附件的郵件。
Python對SMTP支持有smtplib和email兩個模塊,email負責構造郵件,smtplib負責發送郵件。
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即可。
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.發送郵件附件:郵件附件是圖片
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.發送群郵件:同時發送給多人
1 mailto_list = [""] # 郵件接收方的郵件地址
上面這一行代碼是郵件接收方的郵件地址,如果我們需要給多人發送郵件的話,就只需要把對方的郵件帳號綁在這一個列表里就ok了。
加密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服務器交互的所有信息
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!