python3實(shí)現(xiàn)SMTP發(fā)送郵件詳細(xì)教程
簡介
Python發(fā)送郵件的教程本人在網(wǎng)站搜索的時(shí)候搜索出來了一大堆,但是都是說了一大堆原理然后就推出了實(shí)現(xiàn)代碼,我測試用給出的代碼進(jìn)行發(fā)送郵件時(shí)都不成功,后面找了很久才找到原因,這都是沒有一個(gè)詳細(xì)的環(huán)境調(diào)試導(dǎo)致,所以今天特出一個(gè)詳細(xì)的教程,一步一步從環(huán)境調(diào)試到代碼實(shí)現(xiàn)整一個(gè)教程,希望對還在苦苦尋找解決方法卻遲遲不能得到有效解決的朋友們一點(diǎn)幫助。
SMTP協(xié)議
首先了解SMTP(簡單郵件傳輸協(xié)議),郵件傳送代理程序使用SMTP協(xié)議來發(fā)送電郵到接收者的郵件服務(wù)器。SMTP協(xié)議只能用來發(fā)送郵件,不能用來接收郵件,而大多數(shù)的郵件發(fā)送服務(wù)器都是使用SMTP協(xié)議。SMTP協(xié)議的默認(rèn)TCP端口號是25。
環(huán)境調(diào)試
上面說了是使用SMTP協(xié)議發(fā)送的郵件,所以需要先查看你的發(fā)件人郵箱是否有開啟SMTP協(xié)議,如沒有,則需要開啟,我測試使用的是163.com的郵箱作為發(fā)信人郵箱,在設(shè)置中開啟SMTP協(xié)議如下圖所示。

測試的前提是你需要開通客戶端授權(quán),開通后會讓你設(shè)置密碼,那個(gè)密碼要記好,下面的passwd接收的是授權(quán)密碼而不是郵箱密碼!否則會出現(xiàn)下圖所示的錯(cuò)誤提示:

Demo
import smtplib
from email.header import Header
from email.mime.text import MIMEText
# 第三方 SMTP 服務(wù)
mail_host = "smtp.163.com" # SMTP服務(wù)器
mail_user = "***" # 用戶名
mail_pass = "***" # 授權(quán)密碼,非登錄密碼
sender = ***@163.com' # 發(fā)件人郵箱(最好寫全, 不然會失敗)
receivers = [***@qq.com'] # 接收郵件,可設(shè)置為你的QQ郵箱或者其他郵箱
content = '我用Python'
title = '人生苦短' # 郵件主題
def sendEmail():
message = MIMEText(content, 'plain', 'utf-8') # 內(nèi)容, 格式, 編碼
message['From'] = "{}".format(sender)
message['To'] = ",".join(receivers)
message['Subject'] = title
try:
smtpObj = smtplib.SMTP_SSL(mail_host, 465) # 啟用SSL發(fā)信, 端口一般是465
smtpObj.login(mail_user, mail_pass) # 登錄驗(yàn)證
smtpObj.sendmail(sender, receivers, message.as_string()) # 發(fā)送
print("mail has been send successfully.")
except smtplib.SMTPException as e:
print(e)
def send_email2(SMTP_host, from_account, from_passwd, to_account, subject, content):
email_client = smtplib.SMTP(SMTP_host)
email_client.login(from_account, from_passwd)
# create msg
msg = MIMEText(content, 'plain', 'utf-8')
msg['Subject'] = Header(subject, 'utf-8') # subject
msg['From'] = from_account
msg['To'] = to_account
email_client.sendmail(from_account, to_account, msg.as_string())
email_client.quit()
if __name__ == '__main__':
sendEmail()
# receiver = '***'
# send_email2(mail_host, mail_user, mail_pass, receiver, title, content)
剛開始測試時(shí),第一次發(fā)送郵件是成功的,但是后面再次測試時(shí)卻出現(xiàn)了提示554,根據(jù)給出的網(wǎng)址查看錯(cuò)誤代碼
554 DT:SPM 發(fā)送的郵件內(nèi)容包含了未被許可的信息,或被系統(tǒng)識別為垃圾郵件。請檢查是否有用戶發(fā)送病毒或者垃圾郵件。如下圖所示:

針對該問題,究竟如何解決,會在下一篇博文中進(jìn)行展開。若看到的朋友有好的解決方法,還請?zhí)岢?,在此感謝。
附 參考資料
附 電子書福利(免積分下載)
《Flask Web開發(fā):基于Python的Web應(yīng)用開發(fā)實(shí)戰(zhàn)》
《Learning Python, 5th Edition》
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- python使用smtplib模塊發(fā)送郵件
- Python SMTP配置參數(shù)并發(fā)送郵件
- Python基于smtplib協(xié)議實(shí)現(xiàn)發(fā)送郵件
- 基于python SMTP實(shí)現(xiàn)自動發(fā)送郵件教程解析
- Python基于smtplib模塊發(fā)送郵件代碼實(shí)例
- python3.6使用SMTP協(xié)議發(fā)送郵件
- Python使用QQ郵箱發(fā)送郵件報(bào)錯(cuò)smtplib.SMTPAuthenticationError
- python基于SMTP協(xié)議發(fā)送郵件
- python3實(shí)現(xiàn)163郵箱SMTP發(fā)送郵件
- python3使用smtplib實(shí)現(xiàn)發(fā)送郵件功能
- Python基于SMTP發(fā)送郵件的方法
相關(guān)文章
使用python進(jìn)行圖像分類的實(shí)現(xiàn)步驟
圖像分類與識別是計(jì)算機(jī)視覺中的重要任務(wù),它可以幫助我們自動識別圖像中的對象、場景或者特征,在本文中,我們將介紹使用python進(jìn)行圖像分類的實(shí)現(xiàn)步驟,感興趣的小伙伴跟著小編一起來看看吧2024-09-09
Python中l(wèi)ru_cache的使用和實(shí)現(xiàn)詳解
這篇文章主要介紹了Python 中 lru_cache 的使用和實(shí)現(xiàn)詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
Python全棧之進(jìn)程和守護(hù)進(jìn)程
這篇文章主要為大家介紹了Python進(jìn)程和守護(hù)進(jìn)程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2021-12-12
在Python中使用xlrd和xlwt讀寫Excel文件代碼實(shí)例
這篇文章主要介紹了在Python中使用xlrd和xlwt讀寫Excel文件代碼實(shí)例,python操作excel主要用到xlrd和xlwt兩個(gè)庫,即xlrd是讀excel,xlwt是寫excel庫,文中提供了部分實(shí)例代碼,需要的朋友可以參考下2023-08-08
Python OpenCV處理圖像之圖像像素點(diǎn)操作
這篇文章主要為大家詳細(xì)介紹了Python OpenCV處理圖像之圖像像素點(diǎn)操作,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07
Python實(shí)戰(zhàn)之利用Geopandas算出每個(gè)省面積
GeoPandas是一個(gè)基于pandas,針對地理數(shù)據(jù)做了特別支持的第三方模塊。本文將利用GeoPandas計(jì)算出每個(gè)省的面積,感興趣的小伙伴快跟隨小編一起學(xué)習(xí)一下吧2021-12-12

