劇情介紹
今天心血來潮,學(xué)了一下Python3,里面有個章節(jié)是發(fā)送郵件,用示例里面的代碼,運行后報錯,然后記錄一下問題是如何解決的,大家可以看一下,可以有效避坑。
SMTP簡介
SMTP是一種提供可靠且有效的電子郵件傳輸?shù)膮f(xié)議。SMTP是建立在FTP文件傳輸服務(wù)上的一種郵件服務(wù),主要用于系統(tǒng)之間的郵件信息傳遞,并提供有關(guān)來信的通知。SMTP獨立于特定的傳輸子系統(tǒng),且只需要可靠有序的數(shù)據(jù)流信道支持,SMTP的重要特性之一是其能跨越網(wǎng)絡(luò)傳輸郵件,即“SMTP郵件中繼”。使用SMTP,可實現(xiàn)相同網(wǎng)絡(luò)處理進程之間的郵件傳輸,也可通過中繼器或網(wǎng)關(guān)實現(xiàn)某處理進程與其他網(wǎng)絡(luò)之間的郵件傳輸。
SMTP協(xié)議介紹
SMTP(Simple Mail Transfer Protocol)即簡單郵件傳輸協(xié)議,它是一組用于由源地址到目的地址傳送郵件的規(guī)則,由它來控制信件的中轉(zhuǎn)方式。
python的smtplib提供了一種很方便的途徑發(fā)送電子郵件。它對smtp協(xié)議進行了簡單的封裝。
Python創(chuàng)建 SMTP 對象語法如下:
import smtplib
smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )
參數(shù)說明:
- host: SMTP 服務(wù)器主機。 你可以指定主機的ip地址或者域名如:runoob.com,這個是可選參數(shù)。
- port: 如果你提供了 host 參數(shù), 你需要指定 SMTP 服務(wù)使用的端口號,一般情況下SMTP端口號為25。
- local_hostname: 如果SMTP在你的本機上,你只需要指定服務(wù)器地址為 localhost 即可。
Python SMTP對象使用sendmail方法發(fā)送郵件,語法如下:
SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options]
參數(shù)說明:
- from_addr: 郵件發(fā)送者地址。
- to_addrs: 字符串列表,郵件發(fā)送地址。
- msg: 發(fā)送消息
這里要注意一下第三個參數(shù),msg是字符串,表示郵件。我們知道郵件一般由標(biāo)題、發(fā)信人、收件人、郵件內(nèi)容、附件等構(gòu)成,發(fā)送郵件時需要注意msg的格式,這個格式就是smtp協(xié)議中定義的格式。
使用騰訊SMTP協(xié)議發(fā)送郵件,注意事項列表
發(fā)送普通文本郵件
# SMTP發(fā)送郵件
import smtplib
from email.mime.text import MIMEText
from email.header import Header
sender = '923284735@qq.com'
password = 'hcwpwdbppbqhbg'
receiver = 'pgqybfq@163.com'
message = MIMEText('Python 郵件發(fā)送測試', 'plain', 'utf-8')
message['From'] = sender
message['To'] = receiver
message['Subject'] = Header('Python SMTP 郵件測試', 'utf-8')
try:
smtpObj = smtplib.SMTP('smtp.qq.com')
smtpObj.login(sender, password)
smtpObj.sendmail(sender, ['2314728477@qq.com', 'pgqybfq@163.com'], message.as_string())
print("郵件發(fā)送成功")
except smtplib.SMTPException as error:
print("Error:無法發(fā)送郵件{0}", error)
登陸163郵箱查看是否成功發(fā)送,如下:
發(fā)送HTML格式郵件
# 發(fā)送HTML格式的郵件
import smtplib
from email.mime.text import MIMEText
from email.header import Header
sender = '923284735@qq.com'
password = 'hcwpwdbppbqhbg'
receiver = 'pgqybfq@163.com'
htmlContent = "<a
messageHtml = MIMEText(htmlContent, 'html', 'utf-8')
messageHtml['From'] = sender
messageHtml['To'] = receiver
messageHtml['Subject'] = Header(htmlContent, 'utf-8')
try:
smtpObj = smtplib.SMTP('smtp.qq.com')
smtpObj.login(sender, password)
smtpObj.sendmail(sender, receiver, messageHtml.as_string())
print("HTML郵件發(fā)送成功")
except smtplib.SMTPException as err:
print("HTML郵件發(fā)送出現(xiàn)了錯誤:{0}", err)
登陸163郵箱查看是否成功發(fā)送,如下:文章來源:http://www.zghlxwxcb.cn/news/detail-454919.html
發(fā)送帶附件的郵件
# 發(fā)送帶附件的郵件
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.header import Header
sender = '923284735@qq.com'
password = 'hcwpwdbppbqhbg'
receiver = 'pgqybfq@163.com'
fileName = 'wallhaven-1p8e3v.jpg'
fileName1 = 'wallhaven-yxgx6l.jpg'
message = MIMEMultipart()
message['From'] = sender
message['To'] = receiver
message['Subject'] = Header('Python 郵件測試', 'utf-8')
message.attach(MIMEText('Python 郵件發(fā)送測試', 'plain', 'utf-8'))
file = MIMEText(open('/Users/cainiao007/Downloads/' + fileName, 'rb').read(), 'base64', 'utf-8')
file['Content-Type'] = 'application/octet-stream'
file['Content-Disposition'] = 'attachment; filename=' + fileName
message.attach(file)
file1 = MIMEText(open('/Users/cainiao007/Downloads/' + fileName1, 'rb').read(), 'base64', 'utf-8')
file1['Content-Type'] = 'application/octet-stream'
file1['Content-Disposition'] = 'attachment; filename=' + fileName1
message.attach(file1)
try:
smtpObj = smtplib.SMTP('smtp.qq.com')
smtpObj.login(sender, password)
smtpObj.sendmail(sender, receiver, message.as_string())
print('附件郵件發(fā)送成功!')
except smtplib.SMTPException as err:
print('帶附件郵件發(fā)送失?。簕0}', err)
登陸163郵箱查看是否成功發(fā)送,如下:文章來源地址http://www.zghlxwxcb.cn/news/detail-454919.html
到了這里,關(guān)于使用SMTP協(xié)議發(fā)送郵件的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!