使用Python實現(xiàn)發(fā)送郵件的常用方法小結(jié)
1.發(fā)送普通郵件
1 需要有一個發(fā)送郵件的郵箱
163,126,qq…
今天咱們是以 qq 郵箱為例,其它大家自行嘗試,都基本類似
2 申請開啟發(fā)送郵件
生成一個秘鑰:x**************ic # 很重要,不要泄露
3 寫python代碼,實現(xiàn)發(fā)送郵件(smtp模塊–》python內(nèi)置)
就使用我們的賬號:31*******35@qq.com
以QQ郵箱為例,開啟授權(quán)碼圖解,登錄郵箱,點擊設(shè)置
往下拉,找到pop3那一串,點擊開啟
點擊管理服務(wù),在彈出的頁面生成授權(quán)碼
點擊生成授權(quán)碼,然后需要掃碼發(fā)短信同意授權(quán),會生成一串字符串
4.發(fā)送郵件api詳解
在Python3中,使用mimetext模塊可以輕松地創(chuàng)建電子郵件消息。在發(fā)送電子郵件時,我們需要設(shè)置郵件的主題、收件人、發(fā)件人、正文和附件等信息。
而mimetext模塊就是用來處理郵件中的文本和附件的。本文將詳細(xì)介紹mimetext模塊中的參數(shù)及其用法。
發(fā)郵件常見的幾個類介紹
1.MIMEText類
MIMEText類用來創(chuàng)建郵件的正文,它有三個參數(shù):
_text:郵件正文內(nèi)容,可以是純文本或HTML格式。
_subtype:郵件正文內(nèi)容的類型,可以是"plain"(純文本)、“html”(HTML格式)。
_charset:郵件正文內(nèi)容的編碼方式,常用的有"utf-8"、"gbk"等。
常見用法如下:
from email.mime.text import MIMEText # ----------方法1 msg = MIMEText('測試郵件。收到請不用回復(fù)', 'plain', 'utf-8') # -----------方法2 content = ''' <p>我的地址:</p> <p><a >點擊進(jìn)入我的</a></p> <p>我的公眾號二維碼:</p> <p><img src="cid:image"></p> ''' html = MIMEText(content, 'html', 'utf-8')
2.MIMEImage類
MIMEImage類用來創(chuàng)建郵件中的圖片,它有兩個參數(shù):
_imagedata:圖片的二進(jìn)制數(shù)據(jù)。
_subtype:圖片的類型,可以是"jpeg"、“gif”、"png"等。
代碼示例
from email.mime.image import MIMEImage #-----------方法1 with open('test.jpeg', 'rb') as f: image_data = f.read() msg = MIMEImage(image_data, 'jpeg') # ----------方法2 with open('test.gif', 'rb') as f: image_data = f.read() msg = MIMEImage(image_data, 'gif') # ---------方法3 with open('test.png', 'rb') as f: image_data = f.read() msg = MIMEImage(image_data, 'png')
3.MIMEAudio類
MIMEAudio類用來創(chuàng)建郵件中的音頻文件,它有兩個參數(shù):
_audiodata:音頻文件的二進(jìn)制數(shù)據(jù)。
_subtype:音頻文件的類型,可以是"mp3"、"wav"等。
代碼示例
from email.mime.audio import MIMEAudio with open('test.mp3', 'rb') as f: audio_data = f.read() msg = MIMEAudio(audio_data, 'mp3')
4.MIMEBase類
MIMEBase類是所有MIME類型的基類,它有四個參數(shù):
_maintype:MIME類型的大類,常見的有"text"、“image”、“audio”、“video”、"application"等。
_subtype:MIME類型的子類,如"text/plain"、“image/jpeg”、"audio/mp3"等。
_encoder:編碼方式,可以是"base64"、"quoted-printable"等。
_payload:MIME類型的內(nèi)容,可以是文本、圖片、音頻、視頻等。
代碼示例:
from email.mime.base import MIMEBase with open('test.pdf', 'rb') as f: pdf_data = f.read() msg = MIMEBase('application', 'octet-stream') msg.set_payload(pdf_data)
5.發(fā)送普通郵件完整代碼
# 1 導(dǎo)入模塊 import smtplib from email.mime.text import MIMEText #往郵件中寫內(nèi)容的對象 from email.utils import formataddr #發(fā)件人信息 # 2 發(fā)送方和接收方配置 # 發(fā)件方郵箱:誰發(fā)送的 msg_from='3*****2@qq.com' # 生成的授權(quán)碼:不能泄露 password='h******ifj' # # 發(fā)送給誰,可以寫多個人,以列表形式存儲 msg_to=['li*****91@126.com','18*******68@139.com'] # 郵件主題 subject = "給領(lǐng)導(dǎo)問好" # 主題 content = "領(lǐng)導(dǎo)早上好,領(lǐng)導(dǎo)辛苦了" #郵件內(nèi)容 # 生成一個MIMEText對象(還有一些其它參數(shù)) msg = MIMEText(content) # 放入郵件主題 msg['Subject'] = subject # 放入發(fā)件人,元祖中內(nèi)容第一個是發(fā)件人名稱,第二個是發(fā)件地址 msg['From'] = formataddr(('景天',msg_from)) # 放入收件人,將收件人轉(zhuǎn)化為以逗號分隔的字符串 msg['to'] = ','.join(msg_to) try: # 通過ssl方式發(fā)送,服務(wù)器地址,端口 s = smtplib.SMTP_SSL("smtp.qq.com", 465) # 登錄到郵箱 s.login(msg_from, password) # 發(fā)送郵件:發(fā)送方,收件方,要發(fā)送的消息 s.sendmail(msg_from, msg_to, msg.as_string()) #第二個參數(shù)可以以列表的方式寫多個 print('成功') except BaseException as e: print(e) finally: #不管是否發(fā)送成功,都退出服務(wù) s.quit()
登錄郵箱查看,發(fā)送成功
2.發(fā)送html格式郵件
# 1 導(dǎo)入模塊 import smtplib from email.mime.text import MIMEText #往郵件中寫內(nèi)容的對象 from email.utils import formataddr #發(fā)件人信息 # 2 發(fā)送方和接收方配置 # 發(fā)件方郵箱:誰發(fā)送的 msg_from='3******72@qq.com' # 生成的授權(quán)碼:不能泄露 password='h*********ifj' # # 發(fā)送給誰,可以寫多個人,以列表形式存儲 msg_to=['li*******1@126.com','1**********8@139.com'] # 郵件主題 subject = "非常重要,中了五百萬" # 主題 # 構(gòu)建html標(biāo)簽 content = ''' <h1>恭喜您中獎了</h1> <p><a >點我兌換獎品</a></p> ''' # 生成一個MIMEText對象(發(fā)送html格式郵件) msg = MIMEText(content,'html','utf-8') # 放入郵件主題 msg['Subject'] = subject # 放入發(fā)件人,元祖中內(nèi)容第一個是發(fā)件人名稱,第二個是發(fā)件地址 msg['From'] = formataddr(('景天',msg_from)) # 放入收件人,將收件人轉(zhuǎn)化為以逗號分隔的字符串 msg['to'] = ','.join(msg_to) try: # 通過ssl方式發(fā)送,服務(wù)器地址,端口 s = smtplib.SMTP_SSL("smtp.qq.com", 465) # 登錄到郵箱 s.login(msg_from, password) # 發(fā)送郵件:發(fā)送方,收件方,要發(fā)送的消息 s.sendmail(msg_from, msg_to, msg.as_string()) #第二個參數(shù)可以以列表的方式寫多個 print('成功') except BaseException as e: print(e) finally: #不管是否發(fā)送成功,都退出服務(wù) s.quit()
郵箱查看,發(fā)送成功
3 發(fā)送帶附件郵件
添加附件時需要使用MIMEMultipart類,它有一個attach()方法可以添加郵件中的附件。用smtplib模塊發(fā)送示例代碼:
# 1 導(dǎo)入模塊 import smtplib from email.mime.image import MIMEImage from email.mime.text import MIMEText #往郵件中寫內(nèi)容的對象 from email.utils import formataddr #發(fā)件人信息 from email.mime.multipart import MIMEMultipart from email.mime.base import MIMEBase from email import encoders # 2 發(fā)送方和接收方配置 # 發(fā)件方郵箱:誰發(fā)送的 msg_from='3*******2@qq.com' # 生成的授權(quán)碼:不能泄露 password='h**********fj' # # 發(fā)送給誰,可以寫多個人,以列表形式存儲 msg_to=['li*********1@126.com','1*********8@139.com','3*********2@qq.com'] # 郵件主題 subject = "老板,這是今日日報,請查收" # 主題 # 創(chuàng)建一個帶附件的實例 msg = MIMEMultipart() # 放入郵件主題 msg['Subject'] = subject # 放入發(fā)件人,元祖中內(nèi)容第一個是發(fā)件人名稱,第二個是發(fā)件地址 msg['From'] = formataddr(('景天',msg_from)) # 放入收件人,將收件人轉(zhuǎn)化為以逗號分隔的字符串 msg['to'] = ','.join(msg_to) # 郵件正文內(nèi)容 msg.attach(MIMEText('今日日報:1 xxx', 'plain', 'utf-8')) # 添加附件1 # 構(gòu)造附件1,傳送當(dāng)前目錄下的 ribao.txt 文件,注意文件要以rb的形式讀取 file = open('ribao.txt', 'rb').read() att1 = MIMEText(file, 'base64', 'utf-8') att1["Content-Type"] = 'application/octet-stream' # 這里的filename可以任意寫,寫什么名字,郵件中顯示什么名字 att1.add_header('Content-Disposition', 'attachment', filename="日報.txt") msg.attach(att1) # 添加附件2--圖片 with open('gzh.png', 'rb') as f: # 設(shè)置附件的MIME和文件名,這里是png類型: mime = MIMEBase('image', 'png', filename='gzh.png') # 加上必要的頭信息: mime.add_header('Content-Disposition', 'attachment', filename='gzh.png') mime.add_header('Content-ID', '<0>') mime.add_header('X-Attachment-Id', '0') # 把附件的內(nèi)容讀進(jìn)來: mime.set_payload(f.read()) # 用Base64編碼: encoders.encode_base64(mime) # 添加到MIMEMultipart: msg.attach(mime) # 構(gòu)造附件3,圖片格式 fp = open('對稱加密.png', 'rb') msgImage = MIMEImage(fp.read(),'png') fp.close() # 這里的filename可以任意寫,寫什么名字,郵件中顯示什么名字 msgImage.add_header('Content-Disposition', 'attachment', filename="對稱加密.png") # 定義圖片 ID,在 HTML 文本中引用 msgImage.add_header('Content-ID', '<image1>') msg.attach(msgImage) try: # 通過ssl方式發(fā)送,服務(wù)器地址,端口 s = smtplib.SMTP_SSL("smtp.qq.com", 465) # 登錄到郵箱 s.login(msg_from, password) # 發(fā)送郵件:發(fā)送方,收件方,要發(fā)送的消息 s.sendmail(msg_from, msg_to, msg.as_string()) #第二個參數(shù)可以以列表的方式寫多個 print('成功') except BaseException as e: print(e) finally: #不管是否發(fā)送成功,都退出服務(wù) s.quit()
查看郵件中,已包含附件
4.總結(jié)
綜上,就是我們通過python來發(fā)送郵件的常用方法的詳細(xì)流程,我們也可以結(jié)合linux定時任務(wù),或者celery來實現(xiàn)定時發(fā)送,也不難。上述代碼在使用時可以直接拿去用,只需要改下自己郵箱的參數(shù)即可。
到此這篇關(guān)于使用Python實現(xiàn)發(fā)送郵件的常用方法小結(jié)的文章就介紹到這了,更多相關(guān)Python發(fā)送郵件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
用openCV和Python 實現(xiàn)圖片對比,并標(biāo)識出不同點的方式
今天小編就為大家分享一篇用openCV和Python 實現(xiàn)圖片對比,并標(biāo)識出不同點的方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12BeautifulSoup中find和find_all的使用詳解
這篇文章主要介紹了BeautifulSoup中find和find_all的使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12Python實現(xiàn)機器學(xué)習(xí)算法的分類
今天給大家整理了Python實現(xiàn)機器學(xué)習(xí)算法的分類的文章,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)的小伙伴們很有幫助,需要的朋友可以參考下2021-06-06Python基礎(chǔ)學(xué)習(xí)函數(shù)+模塊+類
這篇文章主要介紹了Python基礎(chǔ)學(xué)習(xí)函數(shù)+模塊+類,這是基礎(chǔ)學(xué)習(xí)的第三篇內(nèi)容,小編已把前兩篇鏈接放在下面,需要學(xué)習(xí)的同學(xué)可以參考一下2022-05-05python監(jiān)控linux內(nèi)存并寫入mongodb(推薦)
這篇文章主要介紹了python監(jiān)控linux內(nèi)存并寫入mongodb的相關(guān)資料,需要的朋友可以參考下2017-09-09關(guān)于Python函數(shù)的定義和參數(shù)
這篇文章主要介紹了關(guān)于Python函數(shù)的定義和參數(shù),Python中的函數(shù)我們可以理解成是一種具有功能的包裝塊,也就是封裝具有某一種功能的代碼塊,需要的朋友可以參考下2023-04-04