python自动发邮件运行正常就是收不到邮件是为什么_python stmp module 163邮箱发送邮件不成功...
開發(fā)環(huán)境:
系統(tǒng):Ubuntu 16.04 LTS
版本:python 3.5.2
郵箱服務(wù)器:stmp.126.com
注意:
1.不可正文群發(fā)帶圖,不然會被stmp.126.com認(rèn)定為垃圾郵件,發(fā)不出去 - -!!! 也就是說該代碼群發(fā)的話,只能用plain純文本模式.
2.由于我的郵箱服務(wù)器是126的,所以建議也使用126郵箱測試,測試的前提是你需要開通客戶端授權(quán),開通后會讓你設(shè)置密碼,那個密碼要記好,下面的passwd接收的是授權(quán)密碼而不是郵箱密碼!
3.代碼中需要改的地方的地方: 發(fā)件人/授權(quán)密碼/收件人/附件中圖片的路徑,以及下面的圖片格式
若不需要發(fā)附件,把with:代碼塊隱藏即可
下面直接貼代碼部分了,我自己已經(jīng)測試過代碼了,在以上環(huán)境運(yùn)行沒有問題,群發(fā),單發(fā),附件,郵件正文帶圖等等.
#!/usr/bin/python3
# coding:utf-8
#=========================================================================
# 加密SMTP
#
# 使用標(biāo)準(zhǔn)的25端口連接SMTP服務(wù)器時,使用的是明文傳輸,發(fā)送郵件的整個過程可能會被竊聽。要更安全地發(fā)送郵件,可以加密SMTP會話,實(shí)際上就是先創(chuàng)建SSL安全連接,然后再使用SMTP協(xié)議發(fā)送郵件。
#=========================================================================
from email import encoders
from email.header import Header
from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr, formatdate
import smtplib
# return Alias_name
def _format_addr(s):
name, addr = parseaddr(s)
return formataddr((Header(name, 'utf-8').encode(), addr))
# 接收參數(shù): 發(fā)件人地址
from_addr = '你的郵箱地址'
# 接收參數(shù): 客戶端授權(quán)密碼
passwd = '你的客戶端授權(quán)密碼'
# 接收參數(shù): 收件人地址,可多個
to_addrs = ['ex@qq.com', 'ex@163.com', 'ex@gmail.com']
# 接收參數(shù): SMTP服務(wù)器(注意:是發(fā)件人的smtp服務(wù)器)
smtp_server = 'smtp.126.com'
# 接收參數(shù): 郵件主題
subject = '人生苦短'
# 接收參數(shù): 郵件正文
plain = '我用python!'
# 帶附件郵件
# 指定subtype為alternative,同時支持html和plain格式
msg = MIMEMultipart('alternative')
# 郵件正文中顯示圖片,同時附件的圖片將不再顯示
# plain = 'Hello world and hello me!'
msg.attach(MIMEText(str(plain), 'plain', 'utf-8')) # 純文本
# html = '
Hello
'# msg.attach(MIMEText(html, 'html', 'utf-8')) # HTML
# 添加附件:即關(guān)聯(lián)一個MIMEBase,圖片為本地讀取
with open('/home/uxeix/Pictures/icon/favicon (Jianshu).ico', 'rb') as f:
# 設(shè)置附件中的MIME和文件名
mime = MIMEBase('image', 'jpeg', filename='hot.jpg')
# 加上必要的頭信息
mime.add_header('Content-Disposition', 'attachment',
filename='hot.jpg')
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)
# 未指定用戶別名,則客戶端會自動提取郵件地址中的名稱作為郵件的用戶別名
msg['From'] = _format_addr(from_addr)
# msg['To'] = _format_addr(to_addrs)
msg['To'] = '%s' % ','.join([_format_addr('' % to_addr)
for to_addr in to_addrs])
msg['Subject'] = Header(str(subject), 'utf-8').encode()
msg['Date'] = formatdate()
#=========================================================================
# 發(fā)送郵件
#=========================================================================
try:
# SMTP服務(wù)器設(shè)置(地址,端口):
server = smtplib.SMTP_SSL(smtp_server, 465)
# server.set_debuglevel(1)
# 連接SMTP服務(wù)器(發(fā)件人地址, 客戶端授權(quán)密碼)
server.login(from_addr, passwd)
# 發(fā)送郵件
server.sendmail(from_addr, to_addrs, msg.as_string())
print('郵件發(fā)送成功')
except smtplib.SMTPException as e:
print(e)
print('郵件發(fā)送失敗')
finally:
# 退出SMTP服務(wù)器
server.quit()
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的python自动发邮件运行正常就是收不到邮件是为什么_python stmp module 163邮箱发送邮件不成功...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2022网商贷逾期几天会上征信,一天
- 下一篇: python列表切片后得到剩余列表_py