1. 程式人生 > >Python 自動發送郵件

Python 自動發送郵件

設定 sage login 分享 app efault 測試 ipa imei

簡單郵件傳輸協議(SMTP)是一種協議,用於在郵件服務器之間發送電子郵件和路由電子郵件。Python提供smtplib模塊,該模塊定義了一個SMTP客戶端會話對象,可用於使用SMTP或ESMTP偵聽器守護程序向任何互聯網機器發送郵件。

SMTP通訊的基本流程可以概括為以下幾點:

1.連接SMTP服務器

2.登陸用戶名和密碼

3.發送指定郵件內容

4.退出SMTP連接

一、發送純文本格式郵件

 1 #coding:utf-8
 2 import sys
 3 reload(sys)
 4 sys.setdefaultencoding(utf8)
 5 import smtplib
 6
from smtplib import SMTP 7 from email.mime.text import MIMEText 8 from email.header import Header 9 10 #構造純文本郵件內容 11 msg = MIMEText(hello,send by Python.....,plain,utf-8) 12 13 #發送者郵箱 14 sender = ‘xxxxx@XXXXX.com.cn 15 16 #發送者的登陸用戶名和密碼 17 user = [email protected] 18 password = xxxxxx
19 20 #發送者郵箱的SMTP服務器地址 21 smtpserver = xxxx 22 23 #接收者的郵箱地址 24 receiver = [[email protected],[email protected]] #receiver 可以是一個list 25 26 smtp = smtplib.SMTP() #實例化SMTP對象 27 smtp.connect(smtpserver,25) #(缺省)默認端口是25 也可以根據服務器進行設定 28 smtp.login(user,password) #登陸smtp服務器 29 smtp.sendmail(sender,receiver,msg.as_string()) #
發送郵件 ,這裏有三個參數 30 ‘‘‘ 31 login()方法用來登錄SMTP服務器,sendmail()方法就是發郵件,由於可以一次發給多個人,所以傳入一個list,郵件正文 32 是一個str,as_string()把MIMEText對象變成str。 33 ‘‘‘ 34 smtp.quit()

運行之後就會收到郵件:

技術分享圖片

但是仔細觀察會發現:

1.郵件沒有主題

2.看不到收件人的信息

這是因為郵件主題、如何顯示發件人、收件人等信息並不是通過SMTP協議發給MTA,而是包含在發給MTA的文本中的,所以,我們必須把FromToSubject添加到MIMEText,才是一封完整的郵件:

1 msg = MIMEText(hello,send by Python.....,plain,utf-8)
2 msg[From] = Header(Python測試,utf-8)
3 msg[To] = Header(管理員,utf-8)
4 subject = python SMTP 測試郵件
5 msg[Subject] = Header(subject,utf-8)

二、發送HTML格式的郵件

如果我們要發送HTML郵件,而不是普通的純文本文件怎麽辦?方法很簡單,在構造MIMEText對象時,把HTML字符串傳進去,再把第二個參數由plain變為html就可以了:

1 msg = MIMEText(<html><h1>你好!<h1><html>,html,utf-8) #發送HTML格式郵件就只需要把對應的第二個參數改為html即可

三、發送帶附件的郵件

發送帶附件的郵件,首先要創建MIMEMultipart()實例,然後構造附件,如果有多個附件,可依次構造,最後利用smtplib.smtp發送。

 1 #coding:utf-8
 2 import sys
 3 reload(sys)
 4 sys.setdefaultencoding(utf8)
 5 import smtplib
 6 from email.mime.text import MIMEText
 7 from email.mime.multipart import MIMEMultipart
 8 from email.header import Header
 9 
10 #發送郵件服務器
11 smtpserver = xxxxx
12 #發送郵箱用戶名和密碼
13 user = xxxxxx
14 password = xxxxxx
15 #發送郵箱
16 sender = xxxxx
17 #接受郵箱
18 receiver = xxxxxxx
19 
20 #創建一個帶附件的實例
21 message = MIMEMultipart()
22 message[From] = Header(Python 測試,utf-8)
23 message[To] = Header(測試,utf-8)
24 subject = Python SMTP郵件測試
25 message[Subject] = Header(subject,utf-8)
26 
27 #郵件正文內容
28 message.attach(MIMEText(這是測試Python發送附件功能....,plain,utf-8))
29 
30 #構造附件1,傳送當前目錄下的test.txt文件
31 att1 = MIMEText(open(123.txt,rb).read(),base64,utf-8)
32 att1[Content-Type] = application/octet-stream
33 #這裏的filename可以任意寫,寫什麽名字 郵件中就顯示什麽名字
34 att1[Content-Disposition] = attachment;filename:"123.txt"
35 message.attach(att1)
36 
37 smtp = smtplib.SMTP()
38 smtp.connect(smtpserver,25)
39 smtp.login(user,password)
40 smtp.sendmail(sender,receiver,message.as_string())
41 smtp.quit()

小結

使用Python的smtplib發送郵件十分簡單,只要掌握了各種郵件類型的構造方法,正確設置好郵件頭,就可以順利發出。

構造一個郵件對象就是一個Messag對象,如果構造一個MIMEText對象,就表示一個文本郵件對象,如果構造一個MIMEImage對象,就表示一個作為附件的圖片,要把多個對象組合起來,就用MIMEMultipart對象,而MIMEBase可以表示任何對象。它們的繼承關系如下:

Message
+- MIMEBase
   +- MIMEMultipart
   +- MIMENonMultipart
      +- MIMEMessage
      +- MIMEText
      +- MIMEImage

這種嵌套關系就可以構造出任意復雜的郵件。你可以通過email.mime文檔查看它們所在的包以及詳細的用法。

Python 自動發送郵件