SMTP(Simple Mail Transfer Protocol)即簡單郵件傳輸協(xié)議,它是一組用于由源地址到目的地址傳送郵件的規(guī)則,由它來控制信件的中轉(zhuǎn)方式。
Python發(fā)送郵件比較簡單,掌握兩個自帶庫 smtplib、email 即可,smtplib 負責(zé)發(fā)送郵件,email 負責(zé)構(gòu)造郵件(郵件內(nèi)容,主題,收件人,抄送人等)。
python的smtplib提供了一種很方便的途徑發(fā)送電子郵件。它對smtp協(xié)議進行了簡單的封裝。
MIMEText用于電子郵件正文
MIMEMultipart用于電子郵件結(jié)構(gòu)
MIMEApplication用于在電子郵件中添加二進制數(shù)據(jù)(如文件附件)
MIMEImage用于圖片
importsmtplib fromemail.mime.imageimportMIMEImage fromemail.mime.textimportMIMEText fromemail.headerimportHeader fromemail.mime.multipartimportMIMEMultipart fromemail.mime.applicationimportMIMEApplication
1.發(fā)送郵件(可帶附件)
下面是一個使用Python中的smtplib庫發(fā)送電子郵件的示例代碼。
importsmtplib fromemail.mime.textimportMIMEText fromemail.mime.multipartimportMIMEMultipart fromemail.mime.applicationimportMIMEApplication #設(shè)置發(fā)送郵件的信息 sender_email='xxx@qq.com'#發(fā)件人郵箱賬號 sender_password='xxx'#發(fā)件人郵箱授權(quán)碼 receiver_email='xxx@qq.com'#收件人郵箱賬號 subject='Thisisatestemailby數(shù)字ICer'#郵件的主題 smtp_server='smtp.qq.com'#qq郵箱的SMTP服務(wù)器 smtp_port=465#qq郵箱的SMTP服務(wù)器端口465 defsend_email(): ret=True try: #創(chuàng)建一個multipart的郵件對象 msg=MIMEMultipart() msg['From']=sender_email msg['To']=receiver_email msg['Subject']=subject #添加郵件正文 body='Hello,thisisatestemail.' msg.attach(MIMEText(body,'plain')) #添加附件 #filename='attachment.pdf' #withopen(filename,'rb')asf: #attachment=MIMEApplication(f.read(),_subtype='pdf') #attachment.add_header('Content-Disposition','attachment',filename=filename) #msg.attach(attachment) # #發(fā)送郵件 withsmtplib.SMTP_SSL(smtp_server,smtp_port)assmtp: smtp.login(sender_email,sender_password) smtp.sendmail(sender_email,receiver_email,msg.as_string()) print("郵件發(fā)送成功") exceptExceptionase: print("郵件發(fā)送失敗:",e) send_email()
上面使用QQ郵箱帳戶發(fā)送郵件,也可以使用其他郵箱,需要定義郵箱的SMTP服務(wù)器和端口。
對于QQ郵箱,SMTP服務(wù)器是smtp.qq.com,SMTP端口是465。
生成授權(quán)碼
在郵箱設(shè)置-->賬戶
設(shè)置POP3/IMAP/SMTP服務(wù)中
點擊生成授權(quán)碼,sender_password = 'xxx' 即為授權(quán)碼,并不是你的qq郵箱密碼;
授權(quán)碼
定義發(fā)件人電子郵件地址、授權(quán)碼和收件人電子郵件地址。
使用MIMEMultipart()創(chuàng)建一個多部分消息。使用msg['From']、msg['To']和msg['Subject']向消息添加發(fā)件人、收件人和主題。
使用MIMEText(body, 'plain')向消息添加郵件正文。
使用MIMEApplication()向消息添加附件。
其中 MIMEText 構(gòu)造對象時,第一個參數(shù)是郵件正文;第二個參數(shù)是subType,可以設(shè)置兩種格式 'plain' 和 'html';‘plain’ 表示發(fā)送純文本消息。
發(fā)送郵件(可帶附件)
2.發(fā)送HTML格式的郵件
下面是發(fā)送HTML格式電子郵件的示例代碼。
importsmtplib fromemail.mime.textimportMIMEText fromemail.headerimportHeader fromemail.mime.multipartimportMIMEMultipart fromemail.mime.applicationimportMIMEApplication sender_email='xxx@qq.com'#發(fā)件人郵箱賬號 sender_password='xxx'#發(fā)件人郵箱授權(quán)碼 receiver_email='xxx@qq.com'#收件人郵箱賬號 subject='Thisisatestemailby數(shù)字ICer'#郵件的主題 smtp_server='smtp.qq.com'#qq郵箱的SMTP服務(wù)器 smtp_port=465#qq郵箱的SMTP服務(wù)器端口465 mail_msg="""Python郵件發(fā)送測試...
""" msg=MIMEText(mail_msg,'html','utf-8') msg['From']=Header("sender_email",'utf-8') msg['To']=Header("receiver_email",'utf-8') msg['Subject']=Header(subject,'utf-8') try: withsmtplib.SMTP_SSL(smtp_server,smtp_port)assmtp: smtp.login(sender_email,sender_password) smtp.sendmail(sender_email,receiver_email,msg.as_string()) print("郵件發(fā)送成功") exceptsmtplib.SMTPException: print("Error:無法發(fā)送郵件")
email.header是Python標準庫中的一個模塊,Header類是一個用于處理電子郵件頭部的工具,它可以處理中文等非ASCII字符集,確保電子郵件頭部可以正確顯示和解析。
當(dāng)在電子郵件頭部中使用中文或其他非ASCII字符時,需要對這些字符進行編碼,以確保電子郵件頭部可以被正確地顯示和解析。Header類可以將這些非ASCII字符編碼為合適的格式。
發(fā)送HTML格式的郵件
審核編輯:劉清
-
SMTP
+關(guān)注
關(guān)注
0文章
32瀏覽量
11948 -
HTML
+關(guān)注
關(guān)注
0文章
278瀏覽量
35524 -
python
+關(guān)注
關(guān)注
56文章
4797瀏覽量
84757
原文標題:如何用python發(fā)送接收郵件
文章出處:【微信號:處芯積律,微信公眾號:處芯積律】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論