Python實現郵件發送

使用smtplib模塊發送郵件,它對smtp協議進行了簡單的封裝。

smtp協議的基本命令包括:

    HELO 向服務器標識用戶身份

    MAIL 初始化郵件傳輸 mail from:

    RCPT 標識單個的郵件接收人;常在MAIL命令後面,可有多個rcpt to:

    DATA 在單個或多個RCPT命令後,表示所有的郵件接收人已標識,並初始化數據傳輸,以.結束

    VRFY 用於驗證指定的用戶/郵箱是否存在;由於安全方面的原因,服務器常禁止此命令

    EXPN 驗證給定的郵箱列表是否存在,擴充郵箱列表,也常被禁用

    HELP 查詢服務器支持什麼命令

    NOOP 無操作,服務器應響應OK

    QUIT 結束會話

    RSET 重置會話,當前傳輸被取消

    MAIL FROM 指定發送者地址

    RCPT TO 指明的接收者地址

    一般smtp會話有兩種方式,一種是郵件直接投遞,就是說,比如你要發郵件給[email protected],那就直接連接163.com的郵件服務器,把信投給[email protected]; 另一種是驗證過後的發信,它的過程是,比如你要發郵件給[email protected],你不是直接投到163.com,而是通過自己在sina.com的另一個郵箱來發。這樣就要先連接sina.com的smtp服務器,然後認證,之後在把要發到163.com的信件投到sina.com上,sina.com會幫你把信投遞到163.com。



文件形式的郵件

#!/usr/bin/env python3  

#coding: utf-8  

import smtplib  

from email.mime.text import MIMEText  

from email.header import Header  

sender = '***'  

receiver = '***'  

subject = 'python email test'  

smtpserver = 'smtp.163.com'  

username = '***'  

password = '***'  

msg = MIMEText('你好','text','utf-8')#中文需參數‘utf-8’,單字節字符不需要  

msg['Subject'] = Header(subject, 'utf-8')  

smtp = smtplib.SMTP()  

smtp.connect('smtp.163.com')  

smtp.login(username, password)  

smtp.sendmail(sender, receiver, msg.as_string())  

smtp.quit()  



html形式的郵件

#!/usr/bin/env python3  

#coding: utf-8  

import smtplib  

from email.mime.text import MIMEText  

sender = '***'  

receiver = '***'  

subject = 'python email test'  

smtpserver = 'smtp.163.com'  

username = '***'  

password = '***'  

msg = MIMEText('<html><h1>你好</h1></html>','html','utf-8')  

msg['Subject'] = subject  

smtp = smtplib.SMTP()  

smtp.connect('smtp.163.com')  

smtp.login(username, password)  

smtp.sendmail(sender, receiver, msg.as_string())  

smtp.quit()  



帶圖片的html形式郵件

#!/usr/bin/env python3  

#coding: utf-8  

import smtplib  

from email.mime.multipart import MIMEMultipart  

from email.mime.text import MIMEText  

from email.mime.image import MIMEImage  

sender = '***'  

receiver = '***'  

subject = 'python email test'  

smtpserver = 'smtp.163.com'  

username = '***'  

password = '***'  

msgRoot = MIMEMultipart('related')  

msgRoot['Subject'] = 'test message'  

msgText = MIMEText('<b>Some <i>HTML</i> text</b> and an image.<br><img src="cid:image1"><br>good!','html','utf-8')  

msgRoot.attach(msgText)  

fp = open('h:\\python\\1.jpg', 'rb')  

msgImage = MIMEImage(fp.read())  

fp.close()  

msgImage.add_header('Content-ID', '<image1>')  

msgRoot.attach(msgImage)  

smtp = smtplib.SMTP()  

smtp.connect('smtp.163.com')  

smtp.login(username, password)  

smtp.sendmail(sender, receiver, msgRoot.as_string())  

smtp.quit()  



帶附件的郵件

#!/usr/bin/env python3  

#coding: utf-8  

import smtplib  

from email.mime.multipart import MIMEMultipart  

from email.mime.text import MIMEText  

from email.mime.image import MIMEImage  

sender = '***'  

receiver = '***'  

subject = 'python email test'  

smtpserver = 'smtp.163.com'  

username = '***'  

password = '***'  

msgRoot = MIMEMultipart('related')  

msgRoot['Subject'] = 'test message'  

#構造郵件中的附件  

att = MIMEText(open('h:\\python\\1.jpg', 'rb').read(), 'base64', 'utf-8')  

att["Content-Type"] = 'application/octet-stream'  

att["Content-Disposition"] = 'attachment; filename="1.jpg"'  

msgRoot.attach(att)  

  

smtp = smtplib.SMTP()  

smtp.connect('smtp.163.com')  

smtp.login(username, password)  

smtp.sendmail(sender, receiver, msgRoot.as_string())  

smtp.quit()  



羣郵件

#!/usr/bin/env python3  

#coding: utf-8  

import smtplib  

from email.mime.text import MIMEText  

sender = '***'  

receiver = ['***','****',……]  

subject = 'python email test'  

smtpserver = 'smtp.163.com'  

username = '***'  

password = '***'  

msg = MIMEText('你好','text','utf-8')  

msg['Subject'] = subject  

smtp = smtplib.SMTP()  

smtp.connect('smtp.163.com')  

smtp.login(username, password)  

smtp.sendmail(sender, receiver, msg.as_string())  

smtp.quit()  




也可使用yagmail模塊來快速實現

實現代碼如下:

import yagmail

yag = yagmail.SMTP(user='[email protected]',password='XXX'

yag.send(to = '[email protected]',subject ='test',contents = 'This is a test e-mail from Windows CMD tools with the yagmai')


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章