Python實現(xiàn)郵件發(fā)送的9個核心方法


【蜂郵EDM】:郵件群發(fā)系統(tǒng),EDM郵件營銷平臺,郵件代發(fā)服務。 查看價格
【AokSend郵件API】:觸發(fā)式郵件API,15元/萬封,99%送達率。 查看價格
【烽火郵箱】:新人領取免費域名郵箱,可用作企業(yè)郵箱公司郵箱。 查看價格
Python 實現(xiàn)郵件發(fā)送的 9 個核心方法
隨著 Python 程序的發(fā)展,郵件發(fā)送功能在各個行業(yè)中的應用越來越廣泛。無論是企業(yè)內(nèi)部的郵件通知,還是個人用戶的需求,Python 提供了多種強大的工具和方法來實現(xiàn)郵件發(fā)送功能。本文將詳細介紹 Python 中實現(xiàn)郵件發(fā)送的 9 個核心方法,幫助您更好地掌握這一技能。
一、使用 SMTplib 實現(xiàn)郵件發(fā)送
1.1 背景介紹
SMTplib 是 Python 的內(nèi)置模塊,用于與郵件服務器(如 SMTP 服務器)交互。通過 SMTplib,我們可以發(fā)送電子郵件,無論是內(nèi)部郵件還是外部郵件。
1.2 實現(xiàn)步驟
要使用 SMTplib 實現(xiàn)郵件發(fā)送,需要完成以下步驟:
設置 SMTP 服務器
首先,您需要配置您的 SMTP 服務器信息,包括 SMTP 服務器地址、用戶認證信息(如用戶名、密碼)以及 SSL/TLS 證書。編寫發(fā)送郵件的函數(shù)
下面是一個基本的郵件發(fā)送函數(shù)示例:import smtplibfrom email.mime.multipart import MIMEMultipartfrom email.mime.text import MIMETextimport mimetypesimport timedef send_email(sender, receiver, subject, message): msg = MIMEMultipart() msg['From'] = sender msg['To'] = receiver msg['Subject'] = subject text = MIMEText(message, 'plain') msg.attach(text) try: server = smtplib.SMTP_SSL('smtp.example.com', 465) server.login(sender, password) server.sendmail(sender, receiver, msg.as_string()) print("郵件已成功發(fā)送") except Exception as e: print(f"發(fā)送郵件失?。簕e}") time.sleep(5) # 等待 5 秒再重試
注意事項
- 確保 SMTP 服務器配置正確,并且擁有訪問權限。
- 安全性問題,如密碼存儲,建議使用加密方法(如 SSL/TLS)。
- 如果需要頻繁發(fā)送郵件,建議設置重試機制,避免因失敗而被 SMTP 服務器拒絕。
二、使用第三方 API 發(fā)送郵件
2.1 背景介紹
第三方郵件 API 提供了現(xiàn)成的郵件發(fā)送功能,您可以調(diào)用這些 API 來簡化郵件發(fā)送過程。常見的第三方 API 包括 Postman、meatsending、sendgrid 等。
2.2 Postman
Postman 是一個免費的郵件 API,支持 bulk send(批量發(fā)送)功能。以下是使用 Postman 發(fā)送郵件的步驟:
?????? 【烽火郵箱】:烽火郵箱是一款簡潔高效的企業(yè)郵箱平臺,新客戶贈送免費企業(yè)郵箱,一個起賣、按月付費(低至9.9元);支持別名郵箱及群組郵箱,支持定制無限郵箱。高權重純凈IP池,系統(tǒng)自帶反垃圾機制。
立即查看 >> :企業(yè)郵箱價格
【蜂郵EDM】:郵件群發(fā)系統(tǒng),EDM郵件營銷平臺,郵件代發(fā)服務,專業(yè)研發(fā)定制郵件營銷系統(tǒng)及郵件群發(fā)解決方案!蜂郵自研產(chǎn)品線主要分為標準版、外貿(mào)版、企業(yè)版、定制版,及郵件API郵件SMTP接口服務。
立即查看 >> :郵件發(fā)送價格
【AokSend郵件API】:專注觸發(fā)式郵件API發(fā)送服務。15元/萬封,發(fā)送驗證碼郵件、忘記密碼郵件、通知告警郵件等,不限速。綜合送達率99%、進箱率98%。觸發(fā)郵件也叫事務性郵件或推送郵件,包含:驗證碼郵件、重置密碼郵件、余額提醒郵件、會員到期郵件、賬號認證郵件等!
立即查看 >> :郵件發(fā)送價格
注冊并登錄 Postman
如果您還沒有 Postman,可以免費注冊并登錄。創(chuàng)建新郵件模板
Postman 提供了多種郵件模板,您可以根據(jù)需求選擇或自定義模板。批量發(fā)送郵件
選擇郵件模板后,輸入收件人列表和郵件內(nèi)容,點擊發(fā)送即可。Postman 支持同時發(fā)送給多個收件人。
2.3 meatsending
meatsending 是一個功能強大的郵件 API,支持多種功能,包括 bulk send、SMTP 發(fā)送、郵件統(tǒng)計等。以下是使用 meatsending 的步驟:
注冊并登錄 meatsending
訪問 meatsending 官網(wǎng),注冊并登錄。選擇 API 方法
根據(jù)需要選擇“send email” API。編寫請求
按照 API 的文檔格式編寫請求,包括收件人地址、主題、正文等參數(shù)。處理響應
meatsending 會返回響應數(shù)據(jù),您可以根據(jù)返回碼判斷請求是否成功。
2.4 sendgrid
sendgrid 提供支持 bulk send 和多語言郵件發(fā)送的功能,適合企業(yè)級應用。以下是使用 sendgrid 發(fā)送郵件的步驟:
注冊并登錄 sendgrid
訪問 sendgrid 官網(wǎng),注冊并登錄。選擇 API 方法
根據(jù)需要選擇“send email” API。編寫請求
sendgrid 的 API 要求您提供收件人地址、主題、正文、以及 API 關鍵字(API Key)。處理響應
sendgrid 會返回響應數(shù)據(jù),您可以根據(jù)返回碼判斷請求是否成功。
2.5 適用場景
- Postman:適合個人用戶和小規(guī)模郵件發(fā)送。
- meatsending:適合企業(yè)級應用,支持批量發(fā)送和郵件統(tǒng)計。
- sendgrid:適合需要多語言郵件和復雜郵件模板的應用。
三、自定義郵件模板
除了調(diào)用 API,您還可以通過自定義郵件模板來提升郵件的專業(yè)性和美觀性。以下是使用 Python 創(chuàng)建自定義郵件模板的步驟。
3.1 使用第三方庫
可以使用 pyMailer
或 doveexpress
這樣的第三方庫來創(chuàng)建自定義郵件模板。
from pymailer import Documentfrom pyMailer OuputMultipart import OutputMultipart# 創(chuàng)建文檔doc = Document()doc.add_header('Content-Type', 'text/html; charset=UTF-8')doc.add_header('Content-Disposition', 'inline', 'filename="example.html"')# 添加郵件正文doc.append('Hello, this is an email template.')doc.append('You can customize the content here.')# 導出為 HTML 文件doc.output('email.html')
3.2 使用 CSS 自定義樣式
即使使用現(xiàn)成的郵件模板,您也可以通過添加 CSS 風格來提升郵件的外觀。
body { font-family: Arial, sans-serif; line-height: 1.6;}h1 { color: #333; margin-bottom: 20px;}p { color: #666;}a { color: #007bff; text-decoration: none;}a:hover { text-decoration: underline;}
3.3 使用第三方樣式表
有些郵件模板支持自定義樣式表(如 .vscode 郵件模板),您可以根據(jù)需求調(diào)整樣式。
3.4 適用場景
自定義郵件模板適用于需要專業(yè)性較高、重復性較高的郵件通知,例如企業(yè)內(nèi)部通知、產(chǎn)品發(fā)布郵件等。
四、使用/background 發(fā)送郵件
背景任務可以自動發(fā)送郵件,而無需手動操作。以下是使用 Python 的 threading
模塊實現(xiàn)背景郵件發(fā)送的步驟。
4.1 實現(xiàn)步驟
創(chuàng)建郵件發(fā)送函數(shù)
與前面介紹的send_email
函數(shù)類似。啟動背景郵件發(fā)送任務
使用threading.Thread
創(chuàng)建一個線程,并將郵件發(fā)送函數(shù)作為目標。
import threadingdef send_email_task(sender, receiver, subject, message): send_email(sender, receiver, subject, message)if __name__ == '__main__': # 啟動郵件發(fā)送任務 thread = threading.Thread(target=send_email_task, args=('您的郵件地址', '接收郵件的地址', '郵件主題', '郵件內(nèi)容')) thread.start()
4.2 注意事項
- 確保線程安全,避免多個線程同時發(fā)送郵件導致資源沖突。
- 如果需要頻繁發(fā)送郵件,建議設置線程的執(zhí)行頻率(如每 5 秒發(fā)送一次郵件)。
五、使用自定義函數(shù)發(fā)送郵件
如果您需要 highly customized 的郵件發(fā)送功能,可以自定義發(fā)送函數(shù),以下是一個示例:
def send_email customized(sender, receiver, subject, message): # 設置 SMTP 服務器信息 server = smtplib.SMTP('smtp.example.com', 587) server.starttls() server.login(sender, password) # 創(chuàng)建郵件內(nèi)容 msg = MIMEMultipart() msg['From'] = sender msg['To'] = receiver msg['Subject'] = subject text = MIMEText(message, 'plain') msg.attach(text) # 發(fā)送郵件 server.sendmail(sender, receiver, msg.as_string()) server.quit() print("郵件已成功發(fā)送")
5.1 注意事項
- 確保 SMTP 服務器配置正確。
- 安全性問題,如密碼存儲,建議使用加密方法(如 SSL/TLS)。
- 如果需要頻繁發(fā)送郵件,建議設置重試機制。
六、編寫郵件內(nèi)容自動化腳本
如果您需要自動化發(fā)送郵件,可以編寫一個 Python 腳本,根據(jù)某些條件自動發(fā)送郵件。以下是一個示例:
import smtplibfrom email.mime.multipart import MIMEMultipartfrom email.mime.text import MIMETextimport timedef send_emailAutomation(sender, receiver, subject, message): msg = MIMEMultipart() msg['From'] = sender msg['To'] = receiver msg['Subject'] = subject text = MIMEText(message, 'plain') msg.attach(text) try: server = smtplib.SMTP_SSL('smtp.example.com', 465) server.login(sender, password) server.sendmail(sender, receiver, msg.as_string()) print("郵件已成功發(fā)送") except Exception as e: print(f"發(fā)送郵件失?。簕e}") time.sleep(5) # 等待 5 秒再重試# 示例調(diào)用send_emailAutomation('您的郵件地址', '接收郵件的地址', '郵件主題', '郵件內(nèi)容')
6.1 參數(shù)說明
sender
:發(fā)送郵件的地址。receiver
:收件人的地址。subject
:郵件主題。message
:郵件正文。
七、使用自定義返回地址
您可以通過自定義返回地址,讓郵件發(fā)送方隱藏真實地址。以下是實現(xiàn)方法:
import smtplibfrom email.mime.multipart import MIMEMultipartfrom email.mime.text import MIMETextimport mimetypesimport timedef send_emailReturnAddress(sender, receiver, subject, message): msg = MIMEMultipart() msg['From'] = '您的隱藏地址' # 返回地址 msg['To'] = receiver msg['Subject'] = subject text = MIMEText(message, 'plain') msg.attach(text) try: server = smtplib.SMTP_SSL('smtp.example.com', 465) server.login(sender, password) server.sendmail(sender, receiver, msg.as_string()) # 設置返回地址 server Bounce("error", "您的郵件地址") # 如果需要設置返回地址 print("郵件已成功發(fā)送") except Exception as e: print(f"發(fā)送郵件失?。簕e}") time.sleep(5) # 等待 5 秒再重試
7.1 注意事項
- 返回地址設置后,郵件發(fā)送方會隱藏您的真實地址。
- 如果需要設置返回地址,建議在郵件服務器上進行配置。
八、使用郵件群發(fā)工具
如果您需要發(fā)送大量郵件,可以使用第三方郵件群發(fā)工具,如 Mailchimp、Zoho Mail 等。以下是使用 Mailchimp 發(fā)送郵件的 Python 碼:
import requestsimport jsonimport timedef send_massaget.Send(sender, subject, body, recipients): data = { 'from': '您的發(fā)送地址', 'to': recipients, 'subject': subject, 'body': body, 'api_key': '您的 API 關鍵字' } response = requests.post( 'https://api.mailchimp.com/v3/sends', headers={'Authorization': 'Basic ' + str(bearer_token)}, json=data ) if response.status_code == 200: print("發(fā)送郵件成功") else: print("發(fā)送郵件失?。?, response.status_code)# 示例調(diào)用send_massage.Send('您的發(fā)送地址', '郵件主題', '郵件內(nèi)容', ['收件人地址'])
8.1 參數(shù)說明
sender
:發(fā)送郵件地址。subject
:郵件主題。body
:郵件正文。recipients
:收件人列表。api_key
:Mailchimp 的 API 關鍵字。
九、總結(jié)
通過以上方法,您可以實現(xiàn)多種功能的郵件發(fā)送功能,包括使用 SMTplib、第三方 API、自定義模板、背景任務、自動化發(fā)送等。選擇適合您需求的方法,并結(jié)合其他方法,可以實現(xiàn)更加復雜的郵件發(fā)送功能。
希望本文對您有所幫助!


【蜂郵EDM】:郵件群發(fā)系統(tǒng),EDM郵件營銷平臺,郵件代發(fā)服務。 查看價格
【AokSend郵件API】:觸發(fā)式郵件API,15元/萬封,99%送達率。 查看價格
【烽火郵箱】:新人領取免費域名郵箱,可用作企業(yè)郵箱公司郵箱。 查看價格