詳解Python如何實現(xiàn)發(fā)送帶附件的電子郵件
Python SMTP發(fā)送郵件
SMTP(Simple Mail Transfer Protocol)即簡單郵件傳輸協(xié)議,它是一組用于由源地址到目的地址傳送郵件的規(guī)則,由它來控制信件的中轉(zhuǎn)方式。python的smtplib提供了一種很方便的途徑發(fā)送電子郵件。它對smtp協(xié)議進行了簡單的封裝。
Python創(chuàng)建 SMTP 對象語法如下:
import smtplib smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )
參數(shù)說明:
host: SMTP 服務(wù)器主機。 你可以指定主機的ip地址或者域名如:runoob.com,這個是可選參數(shù)。
port: 如果你提供了host 參數(shù), 你需要指定 SMTP 服務(wù)使用的端口號,一般情況下SMTP端口號為25。
local_hostname:如果SMTP在你的本機上,你只需要指定服務(wù)器地址為 localhost 即可。
Python SMTP對象使用sendmail方法發(fā)送郵件,語法如下:
SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options]
參數(shù)說明:
- from_addr: 郵件發(fā)送者地址。
- to_addrs: 字符串列表,郵件發(fā)送地址。
- msg: 發(fā)送消息
這里要注意一下第三個參數(shù),msg是字符串,表示郵件。我們知道郵件一般由標(biāo)題,發(fā)信人,收件人,郵件內(nèi)容,附件等構(gòu)成,發(fā)送郵件的時候,要注意msg的格式。這個格式就是smtp協(xié)議中定義的格式。
導(dǎo)入模塊如果沒有錯誤,表示已經(jīng)安裝成功。
Python發(fā)送帶附件的電子郵件基本思路如下:
1.構(gòu)造MIMEMultipart對象做為根容器
2.構(gòu)造MIMEText對象做為郵件顯示內(nèi)容并附加到根容器
3.構(gòu)造MIMEBase對象做為文件附件內(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è)置為多個郵箱 def message_config(): """ 配置郵件信息 :return: 消息對象 """ # 第三方 SMTP 服務(wù) content = MIMEText('測試數(shù)據(jù),注意查收') message = MIMEMultipart() # 多個MIME對象 message.attach(content) # 添加內(nèi)容 message['From'] = Header("白云", 'utf-8') # 發(fā)件人 message['To'] = Header("黑土", 'utf-8') # 收件人 message['Subject'] = Header('測試數(shù)據(jù)', 'utf-8') # 主題 # 添加Excel類型附件 file_name = 'output.xlsx' # 文件名 file_path = os.path.join(file_name) # 文件路徑 xlsx = MIMEApplication(open(file_path, 'rb').read()) # 打開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: 消息對象 :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("開始執(zhí)行") message = message_config() # 調(diào)用配置方法 send_mail(message) # 發(fā)送郵件 print("執(zhí)行結(jié)束")
相信看到535報錯的同學(xué)代碼編寫方面都沒有問題,只是不明白為什么填寫了帳號密碼后還是報535錯誤,這里我以163和QQ郵箱為例,并使用Python講解怎么解決535問題
關(guān)于發(fā)郵件報錯535 Error:authentication failed解決方法:
報錯:535, b’Login Fail. Please enter your authorization code to login.
解決辦法:
調(diào)用郵箱服務(wù)器來發(fā)送郵件,我們需要開啟POP3/SMTP服務(wù),這時需要我們設(shè)置客戶端授權(quán)碼,這個授權(quán)碼替代上面代碼部分的mail_pass 即可成功發(fā)送郵件
到此這篇關(guān)于詳解Python如何實現(xiàn)發(fā)送帶附件的電子郵件的文章就介紹到這了,更多相關(guān)Python發(fā)送帶附件郵件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python MySQLdb Windows下安裝教程及問題解決方法
這篇文章主要介紹了python MySQLdb Windows下安裝教程及問題解決方法,本文講解了安裝數(shù)據(jù)庫mysql、安裝MySQLdb等步驟,需要的朋友可以參考下2015-05-05Python基于jieba分詞實現(xiàn)snownlp情感分析
情感分析(sentiment analysis)是2018年公布的計算機科學(xué)技術(shù)名詞,它可以根據(jù)文本內(nèi)容判斷出所代表的含義是積極的還是負面的等。本文將通過jieba分詞實現(xiàn)snownlp情感分析,感興趣的可以了解一下2023-01-01- python中的easy_install工具,類似于Php中的pear,或者Ruby中的gem,或者Perl中的cpan,那是相當(dāng)?shù)乃嵬崃巳绻胧褂?/div> 2013-02-02
Python NumPy數(shù)組裁切和數(shù)據(jù)類型的實現(xiàn)即原理詳解
這篇文章主要介紹了Python NumPy數(shù)組裁切和數(shù)據(jù)類型的實現(xiàn)即原理,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-05-05Python?NLP開發(fā)之實現(xiàn)聊天機器人
這篇文章主要為大家介紹了Python如何實現(xiàn)聊天機器人,即使用自然語言處理?(NLP)?來幫助用戶通過文本、圖形或語音與?Web?服務(wù)或應(yīng)用進行交互,感興趣的可以了解一下2023-05-05最新評論