一、SMTP協議的簡介
SMTP(Simple Mail Transfer Protocol)是一種郵件傳輸協議,用於發送、路由和接收電子郵件消息。
在發送郵件時,需要先把郵件從發件人的郵件服務器發送至收件人的郵件服務器,再由收件人的郵件客戶端下載。SMTP協議就是在發件人和收件人之間傳遞郵件的過程中發揮作用。
Python內置smtplib模塊可以方便地使用SMTP協議進行郵件發送。
二、SMTP郵件的基本用法
下面是一個使用Python發送郵件的基本示例:
import smtplib
from email.mime.text import MIMEText
from email.header import Header
# 郵件內容
mail_content = '這是一封測試郵件。'
# 創建一個MIMEText對象,表示郵件正文
message = MIMEText(mail_content, 'plain', 'utf-8')
# 設置郵件主題
message['Subject'] = Header('測試郵件', 'utf-8')
# 設置發件人
message['From'] = 'sender@163.com'
# 設置收件人
message['To'] = 'receiver@qq.com'
# 郵箱賬號和密碼
mail_user = 'sender@163.com'
mail_password = 'password'
# 發送郵件
smtp_server = 'smtp.163.com'
smtp_port = 25
server = smtplib.SMTP(smtp_server, smtp_port)
server.login(mail_user, mail_password)
server.sendmail(mail_user, [message['To']], message.as_string())
server.quit()
以上代碼中,使用email模塊構建了一個郵件對象message,包括郵件正文、主題、發件人和收件人。然後使用smtplib模塊連接郵件服務器並發送郵件。
三、SMTP郵件的進階用法
1. 發送附件
除了文本內容以外,我們還可以發送附件。具體做法是將文件讀取為二進制內容,再使用email模塊構建MIMEBase對象,並將其添加到MIMEMultipart對象中。
下面是一個發送帶有附件的郵件示例:
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.mime.text import MIMEText
from email.utils import COMMASPACE
from email import encoders
from email.header import Header
import os
# 郵件內容和主題
mail_content = '這是一封帶有附件的測試郵件。'
subject = '測試郵件'
# 發件人和收件人
from_addr = 'sender@163.com'
to_addrs = ['receiver@qq.com']
# 發送附件
file_path = '附件文件路徑'
filename = '附件名稱'
file = open(file_path, 'rb')
file_data = file.read()
file.close()
part = MIMEBase('application', 'octet-stream')
part.set_payload(file_data)
encoders.encode_base64(part)
part.add_header('Content-Disposition', 'attachment', filename=('gb2312', '', filename))
# 郵件對象
msg = MIMEMultipart()
msg['From'] = from_addr
msg['To'] = COMMASPACE.join(to_addrs)
msg['Subject'] = Header(subject, 'utf-8')
msg.attach(MIMEText(mail_content, 'plain', 'utf-8'))
msg.attach(part)
# 發送郵件
smtp_server = 'smtp.163.com'
smtp_port = 25
smtp_user = 'sender@163.com'
smtp_password = 'password'
server = smtplib.SMTP(smtp_server, smtp_port)
server.login(smtp_user, smtp_password)
server.sendmail(from_addr, to_addrs, msg.as_string())
server.quit()
2. 發送HTML郵件
如果需要發送HTML格式的郵件,只需要在MIMEText對象中指定’mimetype’為text/html即可。
下面是一個發送HTML郵件的示例:
import smtplib
from email.mime.text import MIMEText
from email.header import Header
# HTML內容
mail_content = '<h1>這是一封測試郵件</h1><p>郵件正文內容。</p>'
# 郵件對象
message = MIMEText(mail_content, 'html', 'utf-8')
message['Subject'] = Header('測試郵件', 'utf-8')
message['From'] = 'sender@163.com'
message['To'] = 'receiver@qq.com'
# 發送郵件
smtp_server = 'smtp.163.com'
smtp_port = 25
mail_user = 'sender@163.com'
mail_password = 'password'
server = smtplib.SMTP(smtp_server, smtp_port)
server.login(mail_user, mail_password)
server.sendmail(mail_user, [message['To']], message.as_string())
server.quit()
3. 發送帶圖片的郵件
如果需要在郵件中嵌入圖片,需要使用cid和Content-ID進行引用。具體做法是將圖片讀取為二進制內容,然後使用MIMEImage對象構建相關內容。
下面是一個發送帶圖片的郵件的示例:
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage
from email.mime.text import MIMEText
from email.header import Header
# 郵件內容和主題
mail_content = '<h1>這是一封帶圖片的測試郵件</h1><p><img src="cid:image1"></p>'
subject = '測試郵件'
# 發件人和收件人
from_addr = 'sender@163.com'
to_addrs = ['receiver@qq.com']
# 讀取圖片和郵件內容
image_path = '圖片文件路徑'
image_file = open(image_path, 'rb').read()
msg = MIMEMultipart()
msg['From'] = from_addr
msg['To'] = ','.join(to_addrs)
msg['Subject'] = Header(subject, 'utf-8')
msg.attach(MIMEText(mail_content, 'html', 'utf-8'))
# 添加圖片
image = MIMEImage(image_file)
image.add_header('Content-ID', '<image1>')
msg.attach(image)
# 發送郵件
smtp_server = 'smtp.163.com'
smtp_port = 25
smtp_user = 'sender@163.com'
smtp_password = 'password'
server = smtplib.SMTP(smtp_server, smtp_port)
server.login(smtp_user, smtp_password)
server.sendmail(from_addr, to_addrs, msg.as_string())
server.quit()
四、總結
Python SMTP郵件是一種簡單、方便的發送郵件方式。使用Python內置的smtplib和email模塊,可以快速實現郵件的發送。不僅可以發送文本郵件,還可以發送帶有附件、HTML內容和圖片的郵件。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/301737.html
微信掃一掃
支付寶掃一掃