一、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