溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python smtplib模塊實現(xiàn)發(fā)送郵件

發(fā)布時間:2020-09-23 15:11:23 來源:億速云 閱讀:176 作者:Leah 欄目:編程語言

本篇文章給大家分享的是有關(guān)Python smtplib模塊實現(xiàn)發(fā)送郵件,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

使用 Python 的 smtplib 模塊來發(fā)送郵件非常簡單,大部分底層的處理都由 smtplib 進行了封裝,開發(fā)者只需要按照如下 3 步來發(fā)送郵件即可:

連接 SMTP 服務器,并使用用戶名、密碼登錄服務器。

創(chuàng)建 EmailMessage 對象,該對象代表郵件本身。

調(diào)用代表與 SMTP 服務器連接的對象的 sendmail() 方法發(fā)送郵件。

下面程序按照上面步驟示范了如何發(fā)送郵件:

純文本復制

import smtplib
from email.message import EmailMessage

# 定義SMTP服務器地址:
smtp_server = 'smtp.qq.com'
# 定義發(fā)件人地址
from_addr = 'kongyeeku@qq.com'
# 定義登錄郵箱的密碼
password = '123456'
# 定義收件人地址:
to_addr = 'kongyeeku@163.com'

# 創(chuàng)建SMTP連接
#conn = smtplib.SMTP(smtp_server, 25)
conn = smtplib.SMTP_SSL(smtp_server,465)
conn.set_debuglevel(1)
conn.login(from_addr, password)            #①
# 創(chuàng)建郵件對象
msg = EmailMessage()
# 設置郵件內(nèi)容
msg.set_content('您好,這是一封來自Python的郵件', 'plain', 'utf-8')
# 發(fā)送郵件
conn.sendmail(from_addr, [to_addr], msg.as_string())
# 退出連接
conn.quit()

上面程序中,第 15 行、19 行和 23 行代碼基本代表了使用 Python 的 smtp 模塊發(fā)送郵件的 3 大核心步驟,其中 ① 號代碼使用了發(fā)件人的地址和密碼來登錄郵箱。

關(guān)于該程序有以下幾點需要說明:

程序中提供的郵箱密碼是錯誤的,不用嘗試。讀者必須改為使用自己的郵箱地址和密碼。

早期SMTP 服務器都采用普通的網(wǎng)絡連接,因此默認端口是 25。但現(xiàn)在絕大部分 SMTP 都是基于 SSL(Secure Socket Layer)的,這樣保證網(wǎng)絡上傳輸?shù)男畔⒍际羌用苓^的,從而使得信息更加安全。這種基于 SSL 的 SMTP 服務器的默認端口是 465。上面程序中連接的是 QQ 郵箱的基于 SSL 的 SMTP 服務器,QQ 郵箱服務器不支持普通的 SMTP。

國內(nèi)有些公司的免費郵箱(比如 QQ 郵箱)默認是關(guān)閉了 SMTP 的,因此需要讀者登錄郵箱進行設置。

由于該程序發(fā)送的郵件太簡單,郵件沒有主題,而且程序在測試過程中可能會發(fā)送很多郵件,因此有些郵箱服務商會將該程序發(fā)送的郵件當成垃圾郵件。

早期 Python 2.x 提供了 email.mime、email.header、email.charset、email.encoders、email.iterators 等庫來處理郵件,這些庫設計得過于煩瑣,用起來極為不便,因此讀者應該盡快改為使用最新的 Python 庫。本教程不會介紹這些過時的庫。具體可參考 https://docs.python.org/3/library/email.html 頁面的說明。

由于程序打開了 smtplib 調(diào)試模式(將 debuglevel 設置為 1),因此在運行該程序時,可以看到 SMTP 發(fā)送郵件的詳細過程。當程序運行結(jié)束后,將可以在收件人郵箱中看到一封新郵件(可能在垃圾郵件內(nèi)),如下圖所示Python smtplib模塊實現(xiàn)發(fā)送郵件

上面這封郵件是最簡單的,沒有為該郵件設置主題、發(fā)件人名字和收件人名字,郵件內(nèi)容也只是簡單的文本。如果要為郵件設置主題、發(fā)件人名字和收件人名字,那么只需設置 EmailMessage 對象的相應屬性即可。如果程序要將郵件內(nèi)容改為 HTML 內(nèi)容,那么只需將調(diào)用 EmailMessage的set_content() 方法的第二個參數(shù)設置為 html 即可。

例如,如下程序只是對 EmailMessage 進行了修改:

import smtplib
from email.message import EmailMessage

# 定義SMTP服務器地址:
smtp_server = 'smtp.qq.com'
# 定義發(fā)件人地址
from_addr = 'kongyeeku@qq.com'
# 定義登錄郵箱的密碼
password = '123456'
# 定義收件人地址:
to_addr = 'kongyeeku@163.com'

# 創(chuàng)建SMTP連接
#conn = smtplib.SMTP(smtp_server, 25)
conn = smtplib.SMTP_SSL(smtp_server,465)
conn.set_debuglevel(1)
conn.login(from_addr, password)            #①
# 創(chuàng)建郵件對象
msg = EmailMessage()
# 設置郵件內(nèi)容,指定郵件內(nèi)容為HTML
msg.set_content('<h3>郵件內(nèi)容</h3>' +
    '<p>您好,這是一封來自Python的郵件<p>' +
    '來自<a href="http://c.biancheng.net">C語言中文網(wǎng)</a>', 'html', 'utf-8')
msg['subject'] = '一封HTML郵件'
msg['from'] = '李剛 <%s>' % from_addr
msg['to'] = '新用戶 <%s>' % to_addr
# 發(fā)送郵件
conn.sendmail(from_addr, [to_addr], msg.as_string())
# 退出連接
conn.quit()

該程序與上一個程序基本相似,只是在調(diào)用 set_content() 方法時將第二個參數(shù)改為了“html”。

以上就是Python smtplib模塊實現(xiàn)發(fā)送郵件,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降摹OM隳芡ㄟ^這篇文章學到更多知識。更多詳情敬請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI