使用Python實現(xiàn)發(fā)送郵件的常用方法小結
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郵箱為例,開啟授權碼圖解,登錄郵箱,點擊設置

往下拉,找到pop3那一串,點擊開啟

點擊管理服務,在彈出的頁面生成授權碼

點擊生成授權碼,然后需要掃碼發(fā)短信同意授權,會生成一串字符串
4.發(fā)送郵件api詳解
在Python3中,使用mimetext模塊可以輕松地創(chuàng)建電子郵件消息。在發(fā)送電子郵件時,我們需要設置郵件的主題、收件人、發(fā)件人、正文和附件等信息。
而mimetext模塊就是用來處理郵件中的文本和附件的。本文將詳細介紹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('測試郵件。收到請不用回復', 'plain', 'utf-8')
# -----------方法2
content = '''
<p>我的地址:</p>
<p><a >點擊進入我的</a></p>
<p>我的公眾號二維碼:</p>
<p><img src="cid:image"></p>
'''
html = MIMEText(content, 'html', 'utf-8')
2.MIMEImage類
MIMEImage類用來創(chuàng)建郵件中的圖片,它有兩個參數(shù):
_imagedata:圖片的二進制數(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:音頻文件的二進制數(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 導入模塊
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'
# 生成的授權碼:不能泄露
password='h******ifj'
# # 發(fā)送給誰,可以寫多個人,以列表形式存儲
msg_to=['li*****91@126.com','18*******68@139.com']
# 郵件主題
subject = "給領導問好" # 主題
content = "領導早上好,領導辛苦了" #郵件內(nèi)容
# 生成一個MIMEText對象(還有一些其它參數(shù))
msg = MIMEText(content)
# 放入郵件主題
msg['Subject'] = subject
# 放入發(fā)件人,元祖中內(nèi)容第一個是發(fā)件人名稱,第二個是發(fā)件地址
msg['From'] = formataddr(('景天',msg_from))
# 放入收件人,將收件人轉化為以逗號分隔的字符串
msg['to'] = ','.join(msg_to)
try:
# 通過ssl方式發(fā)送,服務器地址,端口
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ā)送成功,都退出服務
s.quit()
登錄郵箱查看,發(fā)送成功

2.發(fā)送html格式郵件
# 1 導入模塊
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'
# 生成的授權碼:不能泄露
password='h*********ifj'
# # 發(fā)送給誰,可以寫多個人,以列表形式存儲
msg_to=['li*******1@126.com','1**********8@139.com']
# 郵件主題
subject = "非常重要,中了五百萬" # 主題
# 構建html標簽
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))
# 放入收件人,將收件人轉化為以逗號分隔的字符串
msg['to'] = ','.join(msg_to)
try:
# 通過ssl方式發(fā)送,服務器地址,端口
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ā)送成功,都退出服務
s.quit()
郵箱查看,發(fā)送成功

3 發(fā)送帶附件郵件
添加附件時需要使用MIMEMultipart類,它有一個attach()方法可以添加郵件中的附件。用smtplib模塊發(fā)送示例代碼:
# 1 導入模塊
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'
# 生成的授權碼:不能泄露
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))
# 放入收件人,將收件人轉化為以逗號分隔的字符串
msg['to'] = ','.join(msg_to)
# 郵件正文內(nèi)容
msg.attach(MIMEText('今日日報:1 xxx', 'plain', 'utf-8'))
# 添加附件1
# 構造附件1,傳送當前目錄下的 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:
# 設置附件的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)容讀進來:
mime.set_payload(f.read())
# 用Base64編碼:
encoders.encode_base64(mime)
# 添加到MIMEMultipart:
msg.attach(mime)
# 構造附件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ā)送,服務器地址,端口
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ā)送成功,都退出服務
s.quit()

查看郵件中,已包含附件

4.總結
綜上,就是我們通過python來發(fā)送郵件的常用方法的詳細流程,我們也可以結合linux定時任務,或者celery來實現(xiàn)定時發(fā)送,也不難。上述代碼在使用時可以直接拿去用,只需要改下自己郵箱的參數(shù)即可。
到此這篇關于使用Python實現(xiàn)發(fā)送郵件的常用方法小結的文章就介紹到這了,更多相關Python發(fā)送郵件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
用openCV和Python 實現(xiàn)圖片對比,并標識出不同點的方式
今天小編就為大家分享一篇用openCV和Python 實現(xiàn)圖片對比,并標識出不同點的方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12
BeautifulSoup中find和find_all的使用詳解
這篇文章主要介紹了BeautifulSoup中find和find_all的使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-12-12
python監(jiān)控linux內(nèi)存并寫入mongodb(推薦)
這篇文章主要介紹了python監(jiān)控linux內(nèi)存并寫入mongodb的相關資料,需要的朋友可以參考下2017-09-09

