import smtplib
from email.mime.text import MIMEText
from email.header import Header
smtp_server='smtp.qq.com' # 要發送的服務器
port=465 # 服務器端口號
sender = '' # 發送郵箱的賬號
receivers = [''] # 接收郵件,可設置爲你的QQ郵箱或者其他郵箱
mail_msg ='<h1>先測試一下</h1>'
message = MIMEText(mail_msg, 'html', 'utf-8')
message['From'] = Header("測試", 'utf-8')
message['To'] = Header("測試", 'utf-8')
subject = 'Python SMTP 郵件測試' # 發送的郵箱主題
message['Subject'] = Header(subject, 'utf-8')
try:
smtpObj = smtplib.SMTP(smtp_server,port)
smtpObj.set_debuglevel(1)
smtpObj.login(sender, sender_password)
smtpObj.sendmail(sender, receivers, message.as_string())
print("郵件發送成功")
smtpObj.quit()
except smtplib.SMTPException as e:
print("Error: 無法發送郵件{}".format(e))
上面有一個坑,因爲使用的是QQ郵箱,一般需要先開啓 QQ郵箱設置裏的各種服務。比如使用pop.qq.com收件,用smtp.qq.com發件,根據需要開啓。
開啓之後,會看到溫馨提示這裏有個授權碼,一堆七七八八的操作之後得到(因爲是重要信息圖片處理了)授權碼,那麼我們需要給發送的郵箱授權。
這裏的sender_password就是sender的授權碼
import smtplib
from email.mime.text import MIMEText
from email.header import Header
smtp_server='smtp.qq.com' # 要發送的服務器
port=465 # 服務器端口號
sender = '' # 發送郵箱的賬號
sender_password='' # 發送郵箱的授權碼
receivers = [''] # 接收郵件,可設置爲你的QQ郵箱或者其他郵箱
mail_msg ='<h1>先測試一下</h1>'
message = MIMEText(mail_msg, 'html', 'utf-8')
message['From'] = Header("測試", 'utf-8')
message['To'] = Header("測試", 'utf-8')
subject = 'Python SMTP 郵件測試' # 發送的郵箱主題
message['Subject'] = Header(subject, 'utf-8')
try:
smtpObj = smtplib.SMTP(smtp_server,port)
smtpObj.set_debuglevel(1)
smtpObj.login(sender, sender_password)
smtpObj.sendmail(sender, receivers, message.as_string())
print("郵件發送成功")
smtpObj.quit()
except smtplib.SMTPException as e:
print("Error: 無法發送郵件{}".format(e))
這時候我以爲會發送成功,結果報錯了:
信息提示是連接關閉,然後檢查一下代碼,發現需要將smtplib.SMTP()改成smtplib.SMTP_SSL(),smtplib.SMTP()是使用明文傳輸,對郵件內容不加密,而smtplib.SMTP_SSL()是使用ssl加密方式,通信過程加密,郵件數據安全。
import smtplib
from email.mime.text import MIMEText
from email.header import Header
smtp_server='smtp.qq.com' # 要發送的服務器
port=465 # 服務器端口號
sender = '' # 發送郵箱的賬號
sender_password='' # 發送郵箱的授權碼
receivers = [''] # 接收郵件,可設置爲你的QQ郵箱或者其他郵箱
mail_msg ='<h1>先測試一下</h1>'
message = MIMEText(mail_msg, 'html', 'utf-8')
message['From'] = Header("測試", 'utf-8')
message['To'] = Header("測試", 'utf-8')
subject = 'Python SMTP 郵件測試' # 發送的郵箱主題
message['Subject'] = Header(subject, 'utf-8')
try:
smtpObj = smtplib.SMTP_SSL(smtp_server,port) #將smtplib.SMTP()改成smtplib.SMTP_SSL()
smtpObj.set_debuglevel(1)
smtpObj.login(sender, sender_password)
smtpObj.sendmail(sender, receivers, message.as_string())
print("郵件發送成功")
smtpObj.quit()
except smtplib.SMTPException as e:
print("Error: 無法發送郵件{}".format(e))
於是終於發送成功。具體使用還請參考官方文件。
https://docs.python.org/zh-cn/3.7/library/smtplib.html?highlight=email#smtplib.SMTP.quit