詳解Python如何實(shí)現(xiàn)發(fā)送帶附件的電子郵件
Python SMTP發(fā)送郵件
SMTP(Simple Mail Transfer Protocol)即簡(jiǎn)單郵件傳輸協(xié)議,它是一組用于由源地址到目的地址傳送郵件的規(guī)則,由它來(lái)控制信件的中轉(zhuǎn)方式。python的smtplib提供了一種很方便的途徑發(fā)送電子郵件。它對(duì)smtp協(xié)議進(jìn)行了簡(jiǎn)單的封裝。
Python創(chuàng)建 SMTP 對(duì)象語(yǔ)法如下:
import smtplib smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )
參數(shù)說(shuō)明:
host: SMTP 服務(wù)器主機(jī)。 你可以指定主機(jī)的ip地址或者域名如:runoob.com,這個(gè)是可選參數(shù)。
port: 如果你提供了host 參數(shù), 你需要指定 SMTP 服務(wù)使用的端口號(hào),一般情況下SMTP端口號(hào)為25。
local_hostname:如果SMTP在你的本機(jī)上,你只需要指定服務(wù)器地址為 localhost 即可。
Python SMTP對(duì)象使用sendmail方法發(fā)送郵件,語(yǔ)法如下:
SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options]
參數(shù)說(shuō)明:
- from_addr: 郵件發(fā)送者地址。
- to_addrs: 字符串列表,郵件發(fā)送地址。
- msg: 發(fā)送消息
這里要注意一下第三個(gè)參數(shù),msg是字符串,表示郵件。我們知道郵件一般由標(biāo)題,發(fā)信人,收件人,郵件內(nèi)容,附件等構(gòu)成,發(fā)送郵件的時(shí)候,要注意msg的格式。這個(gè)格式就是smtp協(xié)議中定義的格式。
導(dǎo)入模塊如果沒(méi)有錯(cuò)誤,表示已經(jīng)安裝成功。
Python發(fā)送帶附件的電子郵件基本思路如下:
1.構(gòu)造MIMEMultipart對(duì)象做為根容器
2.構(gòu)造MIMEText對(duì)象做為郵件顯示內(nèi)容并附加到根容器
3.構(gòu)造MIMEBase對(duì)象做為文件附件內(nèi)容并附加到根容器
a. 讀入文件內(nèi)容并格式化
b. 設(shè)置附件頭
4.設(shè)置根容器屬性
5.得到格式化后的完整文本
6.用smtp發(fā)送郵件
import smtplib
from email.mime.multipart import MIMEMultipart
from email.header import Header
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
import os
# 配置郵箱服務(wù)器信息
mail_host = "smtp.qq.com" # 設(shè)置服務(wù)器
mail_user = "823634900" # 用戶名
mail_pass = "gfgwmfbzmutebajc" # 口令是授權(quán)碼,不是郵箱密碼
# 配置發(fā)件人、收件人信息
sender = '823634900@qq.com' # 發(fā)件人郵箱
receivers = ['823634900@qq.com'] # 接收郵件,可設(shè)置為多個(gè)郵箱
def message_config():
"""
配置郵件信息
:return: 消息對(duì)象
"""
# 第三方 SMTP 服務(wù)
content = MIMEText('測(cè)試數(shù)據(jù),注意查收')
message = MIMEMultipart() # 多個(gè)MIME對(duì)象
message.attach(content) # 添加內(nèi)容
message['From'] = Header("白云", 'utf-8') # 發(fā)件人
message['To'] = Header("黑土", 'utf-8') # 收件人
message['Subject'] = Header('測(cè)試數(shù)據(jù)', 'utf-8') # 主題
# 添加Excel類型附件
file_name = 'output.xlsx' # 文件名
file_path = os.path.join(file_name) # 文件路徑
xlsx = MIMEApplication(open(file_path, 'rb').read()) # 打開(kāi)Excel,讀取Excel文件
xlsx["Content-Type"] = 'application/octet-stream' # 設(shè)置內(nèi)容類型
xlsx.add_header('Content-Disposition', 'attachment', filename=file_name) # 添加到header信息
message.attach(xlsx)
# jpg類型的附件
#jpgpart = MIMEApplication(open('beauty.jpg', 'rb').read())
#jpgpart.add_header('Content-Disposition', 'attachment', filename='beauty.jpg')
#message.attach(jpgpart)
# mp3類型的附件
#mp3part = MIMEApplication(open('kenny.mp3', 'rb').read())
#mp3part.add_header('Content-Disposition', 'attachment', filename='kenny.mp3')
#message.attach(mp3part)
# pdf類型附件
#part = MIMEApplication(open('foo.pdf', 'rb').read())
#part.add_header('Content-Disposition', 'attachment', filename="foo.pdf")
#message.attach(part)
return message
def send_mail(message):
"""
發(fā)送郵件
:param message: 消息對(duì)象
:return: None
"""
try:
smtpObj = smtplib.SMTP_SSL(mail_host) # 使用SSL連接郵箱服務(wù)器
smtpObj.login(mail_user, mail_pass) # 登錄服務(wù)器
smtpObj.sendmail(sender, receivers, message.as_string()) # 發(fā)送郵件
print("郵件發(fā)送成功")
except Exception as e:
print(e)
if __name__ == "__main__":
print("開(kāi)始執(zhí)行")
message = message_config() # 調(diào)用配置方法
send_mail(message) # 發(fā)送郵件
print("執(zhí)行結(jié)束")相信看到535報(bào)錯(cuò)的同學(xué)代碼編寫方面都沒(méi)有問(wèn)題,只是不明白為什么填寫了帳號(hào)密碼后還是報(bào)535錯(cuò)誤,這里我以163和QQ郵箱為例,并使用Python講解怎么解決535問(wèn)題
關(guān)于發(fā)郵件報(bào)錯(cuò)535 Error:authentication failed解決方法:
報(bào)錯(cuò):535, b’Login Fail. Please enter your authorization code to login.


解決辦法:
調(diào)用郵箱服務(wù)器來(lái)發(fā)送郵件,我們需要開(kāi)啟POP3/SMTP服務(wù),這時(shí)需要我們?cè)O(shè)置客戶端授權(quán)碼,這個(gè)授權(quán)碼替代上面代碼部分的mail_pass 即可成功發(fā)送郵件
到此這篇關(guān)于詳解Python如何實(shí)現(xiàn)發(fā)送帶附件的電子郵件的文章就介紹到這了,更多相關(guān)Python發(fā)送帶附件郵件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
深入理解Python虛擬機(jī)中列表(list)的實(shí)現(xiàn)原理及源碼剖析
在本篇文章當(dāng)中主要給大家介紹?cpython?虛擬機(jī)當(dāng)中針對(duì)列表的實(shí)現(xiàn),在?Python?中,List?是一種非常常用的數(shù)據(jù)類型,可以存儲(chǔ)任何類型的數(shù)據(jù),并且支持各種操作,如添加、刪除、查找、切片等,在本篇文章當(dāng)中將深入去分析這一點(diǎn)是如何實(shí)現(xiàn)的2023-03-03
flask 實(shí)現(xiàn)上傳圖片并縮放作為頭像的例子
今天小編就為大家分享一篇flask 實(shí)現(xiàn)上傳圖片并縮放作為頭像的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01
Python Flask異步發(fā)送郵件實(shí)現(xiàn)方法解析
這篇文章主要介紹了Python Flask異步發(fā)送郵件實(shí)現(xiàn)方法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
python實(shí)現(xiàn)時(shí)間序列自相關(guān)圖(acf)、偏自相關(guān)圖(pacf)教程
這篇文章主要介紹了python實(shí)現(xiàn)時(shí)間序列自相關(guān)圖(acf)、偏自相關(guān)圖(pacf)教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06
Python Pytorch深度學(xué)習(xí)之?dāng)?shù)據(jù)加載和處理
今天小編就為大家分享一篇Pytorch 數(shù)據(jù)加載與數(shù)據(jù)預(yù)處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-10-10
django模型類中,null=True,blank=True用法說(shuō)明
這篇文章主要介紹了django模型類中,null=True,blank=True用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-07-07
python讀取查看npz/npy文件數(shù)據(jù)以及數(shù)據(jù)完全顯示方法實(shí)例
前兩天從在GitHub下載了一個(gè)代碼,其中的數(shù)據(jù)集是.npz結(jié)尾的文件,之前沒(méi)有見(jiàn)過(guò)不知道如何處理,下面這篇文章主要給大家介紹了關(guān)于python讀取查看npz/npy文件數(shù)據(jù)以及數(shù)據(jù)完全顯示方法的相關(guān)資料,需要的朋友可以參考下2022-04-04

