一、初識SMTP
SMTP(Simple Mail Transfer Protocol,簡單郵件傳送協議)是一種用於電子郵件的發送協議。當你發送一封電子郵件時,它會被分成若干個複雜的字符流傳遞到 SMTP 服務器。服務器接收到電子郵件之後,會使用 SMTP 協議進一步將其傳遞到目標郵箱服務器。SMTP 可以將郵件從你的電腦發送到任意想要接收它的電腦。通過 SMTP,我們可以實現用代碼發送郵件的功能。
二、Python的smtplib模塊
Python標準庫中提供了smtplib模塊,它定義了SMTP客戶端。使用smtplib模塊,我們可以連接到SMTP服務器,並使用UNIX上的sendmail命令、或Windows系統上的SMTP服務提交電子郵件。
Python的smtplib模塊與POP3、IMAP、NNTP、HTTP等協議一樣,都是通過socket模塊來操作的。所以在使用smtplib時,我們必須對Python的socket模塊有一定的了解。
三、Python SMTP實例
下面是一個使用Python SMTP模塊發送電子郵件的示例程序:
import smtplib sender = '你的郵箱地址' password = '你的郵箱密碼' receiver = ['發送的郵箱地址'] message = """ Subject: Python SMTP 郵件測試 郵件內容 """ try: smtp_obj = smtplib.SMTP('smtp.gmail.com', 587) smtp_obj.starttls() smtp_obj.login(sender, password) smtp_obj.sendmail(sender, receiver, message) print('郵件發送成功') except smtplib.SMTPException as e: print('郵件發送失敗', e)
上面這段代碼中,我們首先定義了發送方、密碼、接收方和郵件內容等信息。接着使用SMTP()方法連接到SMTP服務器。SMTP服務器經常有多個,我們需要先知道自己所用的SMTP服務器的地址和端口號,例如,《使用Gmail SMTP服務器發送郵件》文章中我們使用了Gmail的SMTP服務器,服務器地址為smtp.gmail.com,端口號為587。
在連接到SMTP服務器之後,我們調用starttls()方法啟動TLS安全連接。若SMTP服務器支持TLS,則我們將通過TLS連接到服務器。TLS是加密協議,可以為我們的郵件內容提供安全保障。
接着,我們使用login()方法登錄SMTP服務器,並發送電子郵件。
如果發送成功,則輸出“郵件發送成功”,否則,輸出“郵件發送失敗”並將異常信息打印輸出。
四、發送帶有附件的郵件
我們還可以使用Python的smtplib模塊來發送帶有附件的郵件。下面的代碼演示了如何發送文本文件:
from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.mime.application import MIMEApplication import smtplib sender = '你的郵箱地址' password = '你的郵箱密碼' receiver = ['發送的郵箱地址'] message = MIMEMultipart() message['From'] = sender message['To'] = ";".join(receiver) message['Subject'] = 'Python SMTP 郵件測試(帶附件)' body = """ 郵件內容 """ message.attach(MIMEText(body, 'plain')) with open('/path/to/attachment.txt', 'rb') as f: attach_file = MIMEApplication(f.read()) attach_file.add_header('Content-Disposition', 'attachment', filename='file.txt') message.attach(attach_file) try: smtp_obj = smtplib.SMTP('smtp.gmail.com', 587) smtp_obj.starttls() smtp_obj.login(sender, password) smtp_obj.sendmail(sender, receiver, message.as_string()) print('郵件發送成功') except smtplib.SMTPException as e: print('郵件發送失敗', e)
在上面的代碼中,我們首先創建了一個MIMEMultipart對象,並定義郵件的發送方、接收方和主題等信息。接着在郵件正文中加入了郵件內容,然後調用MIMEApplication()方法添加附件。最後使用SMTP模塊的sendmail()方法來發送郵件。
附件的格式可以是任意的,在上面代碼中,我們發送了一個txt格式的文件。若是需要發送其他格式的文件,需要修改以下幾個地方:
- filename:該參數指定附件的文件名。
- MIMEApplication:該方法的第二個參數可以指定文件的類型。
五、結語
Python的smtplib模塊提供了非常便捷的郵件發送功能,輕鬆實現電子郵件發送功能,並且支持發送帶附件的郵件。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/296045.html