在現代社會中,電子郵件已經成為人們日常溝通的主要方式之一,其重要性也不斷地得到關注。郵件的傳輸涉及到諸多隱私數據,如賬戶密碼、資料文件等。為了保障這些隱私數據的安全,郵件傳輸必須得到加密,極為必要。於此,Python中內置的smtplib.smtp_ssl模塊應運而生,這個模塊能夠為你的郵件安全傳輸提供保障。下面,我們就從多個方面對這個模塊做詳細的闡述。
一、連接SMTP伺服器
smtplib.SMTP_SSL是Python內置的模塊之一,其可以幫助開發者通過SSL/TLS協議連接郵件伺服器。下面是一個連接SMTP伺服器並發送郵件的示例代碼:
import smtplib # 設置SMTP伺服器 smtp_server = "smtp.qq.com" smtp_port = 465 smtp_username = "example@qq.com" smtp_password = "examplepassword" # 連接SMTP伺服器 smtp = smtplib.SMTP_SSL(smtp_server, smtp_port) smtp.login(smtp_username, smtp_password) # 發送郵件 sender = "example@qq.com" receiver = "example@163.com" message = "這是一封測試郵件" smtp.sendmail(sender, receiver, message) # 關閉SMTP伺服器連接 smtp.quit()
在代碼中,我們首先設置SMTP伺服器的信息,然後通過調用smtplib.SMTP_SSL方法連接SMTP伺服器。接著,我們使用郵件賬號和密碼進行SMTP伺服器的登陸。最後,我們使用sendmail方法,定義發件人、收件人和郵件內容,從而實現郵件發送。最後,我們記住要使用smtp.quit()關閉連接。
二、發送附件郵件
在實際開發中,我們通常會需要發送帶有附件的郵件,下面是一個簡單的帶有附件的郵件發送代碼:
import smtplib from email.mime.multipart import MIMEMultipart from email.mime.base import MIMEBase from email.mime.text import MIMEText from email import encoders # 設置SMTP伺服器 smtp_server = "smtp.qq.com" smtp_port = 465 smtp_username = "example@qq.com" smtp_password = "examplepassword" # 構造MIMEMultipart()對象 message = MIMEMultipart() # 構造附件MIMEBase對象 file_name = "test.pdf" attachment = open(file_name, "rb") part = MIMEBase('application', 'octet-stream') part.set_payload((attachment).read()) encoders.encode_base64(part) part.add_header('Content-Disposition', "attachment; filename= %s" % file_name) # 組裝郵件 message.attach(part) message['From'] = "example@qq.com" message['To'] = "example@163.com" message['Subject'] = "測試郵件" # 發送郵件 smtp = smtplib.SMTP_SSL(smtp_server, smtp_port) smtp.login(smtp_username, smtp_password) smtp.sendmail(message['From'], message['To'], message.as_string()) smtp.quit()
代碼中,我們首先定義SMTP伺服器的信息,接著構造MIMEMultipart對象。然後,通過open方法打開我們需要發送的文件,構造MIMEBase對象,並將attachment的read()讀出來的內容設置到part的set_payload中。再通過MIMEBase的編碼,為附件名稱添加郵件頭。最後,我們將part加到message中,設置郵件的發件人、收件人和主題,並使用smtp對象發送郵件。
三、發送HTML郵件
HTML郵件是指郵件中的內容我們可以使用HTML語言進行格式的排版。smtplib.smtp_ssl模塊能夠幫助我們在Python中快速地發送HTML郵件,下面是示例代碼:
import smtplib from email.mime.text import MIMEText # 設置SMTP伺服器信息 smtp_server = "smtp.qq.com" smtp_port = 465 smtp_username = "example@qq.com" smtp_password = "examplepassword" # 定義HTML郵件正文內容 content = """HTML郵件 Hello World!
這是一封HTML郵件!
""" # 構造HTML郵件MIMEText對象 message = MIMEText(content, "html", "utf-8") # 組裝郵件 message["From"] = smtp_username message["To"] = "example@163.com" message["Subject"] = "HTML郵件" # 發送郵件 smtp = smtplib.SMTP_SSL(smtp_server, smtp_port) smtp.login(smtp_username, smtp_password) smtp.sendmail(message["From"], message["To"], message.as_string()) smtp.quit()
我們首先設置SMTP伺服器信息,定義HTML郵件正文內容,接著,構造MIMEText對象,設置郵件的正文類型為「html」,最後組裝郵件,設置郵件的發件人、收件人和主題,並使用smtp對象發送郵件。
四、使用SSL/TLS協議發送郵件
SMTP伺服器默認的SMTP埠是25,但這個埠是不加密的。為了保障郵件在傳輸過程中的安全,我們可以使用SSL/TLS協議。代碼實現如下:
import smtplib import ssl from email.mime.text import MIMEText smtp_server = "smtp.qq.com" smtp_port = 587 smtp_username = "example@qq.com" smtp_password = "examplepassword" context = ssl.create_default_context() message = MIMEText("這是一封測試郵件。") message["From"] = "example@qq.com" message["To"] = "example@163.com" message["Subject"] = "測試郵件" with smtplib.SMTP(smtp_server, smtp_port) as server: server.starttls(context=context) server.login(smtp_username, smtp_password) server.sendmail("example@qq.com", "example@163.com", message.as_string())
我們首先設置SMTP伺服器信息,接著定義context,設置為默認的SSL上下文。然後,構造MIMEText對象,並設置發件人、收件人和主題。接下來,使用smtplib.SMTP類連接到SMTP伺服器,並使用starttls(context=context)方法打開SSL加密連接,執行登陸並發送郵件。在使用完畢之後,使用with結構退出SSL加密連接,保證連接的正常關閉。
五、小結
Python的smtplib.smtp_ssl模塊為我們提供了郵件安全傳輸方面的保障,能夠快速地實現附件郵件、HTML郵件的發送。通過SSL/TLS協議,我們還可以添加加密措施,保障郵件傳輸的更加安全可靠。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/153088.html