目錄
?前景知識:
💥代碼講解
?純文本的郵件
?完善的郵件
? 有附件的郵箱
💥加密SMTP
?前景知識:
SMTP是發送郵件的協議,
Python內置對SMTP的支持,可以發送純文本郵件、HTML郵件以及帶附件的郵件
Python對SMTP支持有smtplib和email兩個模塊,email負責構造郵件,smtplib負責發送郵件
比如我們構造一個簡單的郵箱資訊
from email.mime.text import MIMEText
msg = MIMEText('hello, send by Python...', 'plain', 'utf-8')
1.第一個引數就是郵件正文
2.第二個引數是MIME的subtype(樣式),傳入
'plain'表示純文本,最終的MIME就是'text/plain'3.第三個引數一定要用
utf-8(編碼方式)編碼保證多語言兼容性,
💥代碼講解
1.set_debuglevel(1)就可以列印出和SMTP服務器互動的所有資訊,SMTP協議就是簡單的文本命令和回應,
2.login()方法用來登錄SMTP服務器,
3.sendmail()方法就是發郵件,由于可以一次發給多個人,所以傳入一個list,郵件正文是一個str,as_string()把MIMEText物件變成str
4.加上附件構造一個
MIMEMultipart物件代表郵件本身,然后往里面加上一個
MIMEText作為郵件正文,再繼續往里面加上表示附件的
MIMEBase物件即可
?純文本的郵件
"""
CSDN : heart_6662
PYTHON amateur
"""
from email import encoders
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr
import smtplib
def _format_addr(s):
name, addr = parseaddr(s)
return formataddr((Header(name, 'utf-8').encode(), addr))
from_addr = input('From: ')
password = input('Password: ')
to_addr = input('To: ')
smtp_server = input('SMTP server: ')
msg = MIMEText('hello, send by Python...', 'plain', 'utf-8')
msg['From'] = _format_addr('Python愛好者 <%s>' % from_addr)
msg['To'] = _format_addr('管理員 <%s>' % to_addr)
msg['Subject'] = Header('來自SMTP的問候……', 'utf-8').encode()
server = smtplib.SMTP(smtp_server, 25)
server.set_debuglevel(1)
server.login(from_addr, password)
server.sendmail(from_addr, [to_addr], msg.as_string())
server.quit()

注意你的密碼要在郵箱里面設定,比如我的QQ郵箱 ,要自己手動開授權碼
什么是授權碼,它又是如何設定?_QQ郵箱幫助中心
?完善的郵件
from email import encoders
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr
import smtplib
def _format_addr(s):
name, addr = parseaddr(s)
return formataddr((Header(name, 'utf-8').encode(), addr))
from_addr = input('From: ')
password = input('Password: ')
to_addr = input('To: ')
smtp_server = input('SMTP server: ')
msg = MIMEText('<html><body><h1>Hello</h1>' +
'<p>send by <a href="http://www.python.org">Python</a>...</p>' +
'</body></html>', 'html', 'utf-8')
msg['From'] = _format_addr('Python愛好者 <%s>' % from_addr)
msg['To'] = _format_addr('管理員 <%s>' % to_addr)
msg['Subject'] = Header('來自SMTP的問候……', 'utf-8').encode()
server = smtplib.SMTP(smtp_server, 25)
server.set_debuglevel(1)
server.login(from_addr, password)
server.sendmail(from_addr, [to_addr], msg.as_string())
server.quit()
結果就會這樣,有一個超鏈接
? 有附件的郵箱
"""
CSDN : heart_6662
PYTHON amateur
"""
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
import smtplib
def _format_addr(s):
name, addr = parseaddr(s)
return formataddr((Header(name, 'utf-8').encode(), addr))
from_addr = input('From: ')
password = input('Password: ')
to_addr = input('To: ')
smtp_server = input('SMTP server: ')
# 郵件物件:
msg = MIMEMultipart()
msg['From'] = _format_addr('Python愛好者 <%s>' % from_addr)
msg['To'] = _format_addr('管理員 <%s>' % to_addr)
msg['Subject'] = Header('來自SMTP的問候……', 'utf-8').encode()
# 郵件正文是MIMEText:
msg.attach(MIMEText('send with file...', 'plain', 'utf-8'))
# 添加附件就是加上一個MIMEBase,從本地讀取一個圖片:
with open('./tset.jpg', 'rb') as f:
# 設定附件的MIME和檔案名,這里是png型別:
mime = MIMEBase('image', 'png', filename='test.png')
# 加上必要的頭資訊:
mime.add_header('Content-Disposition', 'attachment', filename='test.png')
mime.add_header('Content-ID', '<0>')
mime.add_header('X-Attachment-Id', '0')
# 把附件的內容讀進來:
mime.set_payload(f.read())
# 用Base64編碼:
encoders.encode_base64(mime)
# 添加到MIMEMultipart:
msg.attach(mime)
server = smtplib.SMTP(smtp_server, 25)
server.set_debuglevel(1)
server.login(from_addr, password)
server.sendmail(from_addr, [to_addr], msg.as_string())
server.quit()
結果
💥加密SMTP
使用標準的25埠連接SMTP服務器時,使用的是明文傳輸,發送郵件的整個程序可能會被竊聽,要更安全地發送郵件,可以加密SMTP會話,實際上就是先創建SSL安全連接,然后再使用SMTP協議發送郵件,
某些郵件服務商,QQ郵箱SMTP的埠號是465或587
"""
CSDN : heart_6662
PYTHON amateur
"""
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
import smtplib
def _format_addr(s):
name, addr = parseaddr(s)
return formataddr((Header(name, 'utf-8').encode(), addr))
from_addr = input('From: ')
password = input('Password: ')
to_addr = input('To: ')
smtp_server = input('SMTP server: ')
# 郵件物件:
msg = MIMEMultipart()
msg['From'] = _format_addr('Python愛好者 <%s>' % from_addr)
msg['To'] = _format_addr('管理員 <%s>' % to_addr)
msg['Subject'] = Header('來自SMTP的問候……', 'utf-8').encode()
# 郵件正文是MIMEText:
msg.attach(MIMEText('send with file...', 'plain', 'utf-8'))
# 添加附件就是加上一個MIMEBase,從本地讀取一個圖片:
with open('./tset.jpg', 'rb') as f:
# 設定附件的MIME和檔案名,這里是png型別:
mime = MIMEBase('image', 'png', filename='test.png')
# 加上必要的頭資訊:
mime.add_header('Content-Disposition', 'attachment', filename='test.png')
mime.add_header('Content-ID', '<0>')
mime.add_header('X-Attachment-Id', '0')
# 把附件的內容讀進來:
mime.set_payload(f.read())
# 用Base64編碼:
encoders.encode_base64(mime)
# 添加到MIMEMultipart:
msg.attach(mime)
smtp_server = 'smtp.qq.com'
smtp_port = 587
server = smtplib.SMTP(smtp_server, smtp_port)
server.starttls()
server.set_debuglevel(1)
server.login(from_addr, password)
server.sendmail(from_addr, [to_addr], msg.as_string())
server.quit()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/402617.html
標籤:其他
