Python利用smtplib實(shí)現(xiàn)郵件發(fā)送
1.引言
在當(dāng)今數(shù)字時(shí)代,電子郵件已成為我們生活和工作中不可或缺的一部分。Python
中的 smtplib
庫(kù)提供了一個(gè)簡(jiǎn)單的接口,使得發(fā)送電子郵件變得非常容易。通過(guò)Python可以方便地自動(dòng)發(fā)送郵件,將郵件發(fā)送給客戶(hù)、同事或朋友,以及提醒你的任務(wù)列表或提醒你必須完成的工作。本篇文章將為你講解如何在Python
發(fā)送郵件,并為你提供實(shí)現(xiàn)的多種方式。不管你是初學(xué)者還是有一定編程經(jīng)驗(yàn)的高級(jí)用戶(hù),都能從中受益。 若要實(shí)現(xiàn)發(fā)送電子郵件,我們的大致思路可分為以下幾個(gè)步驟:
- 1.申請(qǐng)郵箱賬號(hào)(本文以163郵箱為例)
- 2.登錄:提供賬號(hào)密碼,并通過(guò)python smtplib庫(kù)登錄。
- 3.編輯郵件內(nèi)容:包括發(fā)件人、收件人、抄送人、主題、郵件內(nèi)容(文本、附件)等。
- 4.發(fā)送郵件。
2. POP3、SMTP、IMAP協(xié)議
POP3、IMAP、SMTP 都是與電子郵件相關(guān)的協(xié)議。 POP3(Post Office Protocol version 3) 是一種常用的電子郵件接收郵件協(xié)議,它允許用戶(hù)從遠(yuǎn)程服務(wù)器下載自己的郵件收件箱中的郵件。它的主要缺點(diǎn)是如何管理收件箱中的郵件,即當(dāng)用戶(hù)將電子郵件從服務(wù)器上下載到本地計(jì)算機(jī)時(shí),它通常從服務(wù)器上刪除郵件,在某些情況下,會(huì)導(dǎo)致一些問(wèn)題。
IMAP(Internet Message Access Protocol) 允許用戶(hù)遠(yuǎn)程管理郵件服務(wù)器中的電子郵件。它提供了一種在客戶(hù)端計(jì)算機(jī)和郵件服務(wù)器之間保持持久化連接的方式,因此它在管理郵件上有更大的靈活性。它還提供了一種能夠讓用戶(hù)保存郵件的方式,即當(dāng)用戶(hù)在客戶(hù)端中刪除電子郵件時(shí),它不會(huì)從郵件服務(wù)器上刪除。
SMTP(Simple Mail Transfer Protocol) 是一個(gè)定義了郵件傳輸方式的簡(jiǎn)單且基本的協(xié)議。它用于從一臺(tái)服務(wù)器(發(fā)送郵件的服務(wù)器)將郵件傳輸?shù)搅硪慌_(tái)服務(wù)器(接收郵件的服務(wù)器)。SMTP使用TCP/ IP協(xié)議來(lái)傳輸郵件,并使用25端口(默認(rèn)情況下)。它允許用戶(hù)發(fā)送電子郵件以便其他用戶(hù)可以接收它。
3. 申請(qǐng)郵箱賬號(hào)
如圖所示,注冊(cè)并登錄郵箱后,我們需開(kāi)啟客戶(hù)端登錄權(quán)限,并獲取到授權(quán)碼(此處以163郵箱為例)。
這些前置工作做好后,讓我們開(kāi)始進(jìn)入編程實(shí)操吧!
4.發(fā)送普通郵件
下面我們將使用Python內(nèi)置的smtplib模塊和ssl模塊發(fā)送電子郵件。這個(gè)方法需要一些郵件服務(wù)器的相關(guān)信息,例如SMTP地址和端口號(hào),以及登錄憑據(jù)(上面已經(jīng)準(zhǔn)備好了)。具體步驟如下:
4.1 導(dǎo)入必要模塊
導(dǎo)入smtplib和ssl模塊,ssl模塊將保護(hù)您的登錄憑據(jù),確保安全發(fā)送電子郵件。
import smtplib, ssl
4.2 設(shè)置服務(wù)器和端口號(hào)
使用您的郵箱提供商提供的SMTP地址和端口號(hào)來(lái)設(shè)置SMTP服務(wù)器。根據(jù)您的郵箱,可以設(shè)置為不同的地址和端口號(hào)。
smtp_server = "smtp.163.com" port = 465# 對(duì)于TLS連接,我們使用465端口。
4.3 建立連接并登錄
使用SMTP服務(wù)器建立與服務(wù)器的連接。然后,使用您的發(fā)送電子郵件的電子郵件地址和密碼進(jìn)行身份驗(yàn)證。電子郵件與您的登錄密碼或其他訪問(wèn)令牌是相互關(guān)聯(lián)的,因此此過(guò)程也稱(chēng)為“登錄”。 下面是一個(gè)完整的Python示例,用于向收件人發(fā)送電子郵件:
# -*- coding: utf-8 import smtplib # 郵箱服務(wù)器相關(guān)配置 smtp_server = 'smtp.163.com' smtp_port = 465 # 發(fā)件人相關(guān)配置 mail_sender = 'liululee@163.com' # 發(fā)件人電子郵箱 mail_sender_password = 'XXXXXXXXXXXXXXXXXXX' # 發(fā)件人郵箱密碼 # 建立到郵件服務(wù)器的加密連接 server = smtplib.SMTP_SSL(smtp_server, smtp_port) server.login(mail_sender, mail_sender_password) # 郵件內(nèi)容 receiver_email = "729235361@qq.com" message = "\n".join([ ? ? "Subject: Test email", ? ? "To: {}".format(receiver_email), ? ? "From: {}".format(mail_sender), ? ? "", ? ? "This is a test email sent with Python." ]) # 發(fā)送郵件 server.sendmail(mail_sender, receiver_email, message) print("Email sent successfully.")
成功收到郵件:
5.發(fā)送復(fù)雜郵件
接下來(lái),我們使用email模塊相關(guān)的組件來(lái)實(shí)現(xiàn)發(fā)送復(fù)雜郵件,它可以?來(lái)構(gòu)建郵件主題以及各種形式的郵件內(nèi)容(包括文字內(nèi)容、圖片內(nèi)容、html內(nèi)容、附件)等,當(dāng)我們發(fā)送復(fù)雜郵件時(shí),使用它非常便利。
## -*- coding: utf-8 import smtplib, ssl from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.header import Header # 郵箱服務(wù)器相關(guān)配置 smtp_server = 'smtp.163.com' smtp_port = 465 # 發(fā)件人相關(guān)配置 mail_sender = 'liululee@163.com' # 發(fā)件人電子郵箱 mail_sender_password = 'XXXXXXXXXXXXXXXXX' # 發(fā)件人郵箱密碼 # 創(chuàng)建SSL類(lèi)的上下文對(duì)象 context = ssl.create_default_context() # 建立到郵件服務(wù)器的加密連接 server = smtplib.SMTP_SSL(smtp_server, smtp_port) server.login(mail_sender, mail_sender_password) # 郵件內(nèi)容 receiver_email = "729235361@qq.com" # message = "\n".join([ # ? ? "Subject: Test email", # ? ? "To: {}".format(receiver_email), # ? ? "From: {}".format(mail_sender), # ? ? "", # ? ? "This is a test email sent with Python." # ]) # 1.創(chuàng)建郵件對(duì)象 message = MIMEMultipart() # 2.設(shè)置郵件主題 subject = Header('來(lái)自poycode.cn的晚安問(wèn)候', 'utf-8').encode() message['Subject'] = subject # 3.設(shè)置發(fā)送者 message['From'] = mail_sender # 4.設(shè)置接收者 message['To'] = receiver_email # 5.設(shè)置抄送者 message['Cc'] = 'developlee@163.com' # 6.添加文字內(nèi)容 ## 6.1 普通文字 text = MIMEText('Hi, 歡迎你訪問(wèn)我的個(gè)人站點(diǎn) poycode.cn ', 'plain', 'utf-8') message.attach(text) ## 6.2 超文本內(nèi)容 # 添加html內(nèi)容 content = """ <h2>陸理手記</h2> <p>來(lái)自poycode.cn</p> <p>感謝你關(guān)注我的公眾號(hào)</p> <img src='https://static.poycode.cn/wp-content/uploads/2023/06/20230602225540172.jpg'> <center>陸理手記公眾號(hào)二維碼</center> <a >陸理手記-個(gè)人博客</a> """ htmltext = MIMEText(content, 'html', 'utf-8') message.attach(htmltext) # 7.添加附件 attachment = MIMEText(open('poycode.txt', 'rb').read(), 'base64', 'utf-8') attachment["Content-Disposition"] = 'attachment; filename="poycode.txt"' message.attach(attachment) # 發(fā)送郵件 server.sendmail(mail_sender, receiver_email, message.as_string()) server.quit() print("Email sent successfully.")
郵件收到了!很快??!
6.總結(jié)
上一篇教程:Python基礎(chǔ)教程:requests模塊發(fā)送http請(qǐng)求 Python中的smtplib模塊可用于發(fā)送電子郵件,它提供了一種方便易用的方式來(lái)處理郵件。在教程中,通過(guò)使用email模塊,使得我們可以發(fā)送更為復(fù)雜的郵件。通過(guò)Python發(fā)送郵件與其它功能,如定時(shí)任務(wù)、告警等功能相結(jié)合,可以幫助我們更好地處理日常工作。希望這篇教程能夠幫助到您!以上的步驟應(yīng)用于Python郵件發(fā)送的基本過(guò)程,您可以根據(jù)自己的需要對(duì)代碼進(jìn)行修改和改進(jìn)。
以上就是Python利用smtplib實(shí)現(xiàn)郵件發(fā)送的詳細(xì)內(nèi)容,更多關(guān)于Python smtplib發(fā)送郵件的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python xmltodict模塊安裝及代碼實(shí)例
這篇文章主要介紹了Python xmltodict模塊安裝及代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10Python讀取ZIP和TAR格式壓縮包的實(shí)現(xiàn)
本文介紹了使用Python讀取ZIP和TAR格式的壓縮包,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-01-01Python實(shí)現(xiàn)在一行中交換兩個(gè)變量
這篇文章主要為大家詳細(xì)介紹了如何利用Python語(yǔ)言實(shí)現(xiàn)在一行中交換兩個(gè)變量功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-08-08Python re.split方法分割字符串的實(shí)現(xiàn)示例
本文主要介紹了Python re.split方法分割字符串的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08Python?PaddleGAN實(shí)現(xiàn)照片人物性別反轉(zhuǎn)
PaddleGAN中的styleganv2editing.py是支持性別編輯的。所以本文將介紹如何通過(guò)調(diào)整參數(shù),來(lái)試著實(shí)現(xiàn)一下照片的性別翻轉(zhuǎn)。感興趣的小伙伴可以學(xué)習(xí)一下2021-12-12Python連接SQLite數(shù)據(jù)庫(kù)操作實(shí)戰(zhàn)指南從入門(mén)到精通
在Python中使用SQLite進(jìn)行數(shù)據(jù)庫(kù)操作時(shí),我們將深入研究SQLite數(shù)據(jù)庫(kù)的創(chuàng)建、表格管理、數(shù)據(jù)插入、查詢(xún)、更新和刪除等關(guān)鍵主題,幫助你全面了解如何使用SQLite進(jìn)行數(shù)據(jù)庫(kù)操作2023-11-11Python計(jì)算時(shí)間間隔(精確到微妙)的代碼實(shí)例
今天小編就為大家分享一篇關(guān)于Python計(jì)算時(shí)間間隔(精確到微妙)的代碼實(shí)例,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-02-02