最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python實(shí)現(xiàn)郵件發(fā)送功能

 更新時(shí)間:2019年08月10日 11:03:55   作者:小黑and小白  
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)郵件發(fā)送功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

什么是POP3、SMTP和MAP?

POP3是Post Office Protocol 3的簡(jiǎn)稱,即郵局協(xié)議的第三個(gè)版本,他是規(guī)定怎樣將個(gè)人計(jì)算機(jī)連接到Internet的郵件服務(wù)器和下載電子郵件的協(xié)議。它是因特網(wǎng)電子郵件的第一個(gè)離線協(xié)議的標(biāo)準(zhǔn)。POP3允許用戶從服務(wù)器上把郵件存儲(chǔ)到本地計(jì)算機(jī)上,同時(shí)刪除保存在郵件服務(wù)器上的郵件,而POP3服務(wù)器則是遵循POP3協(xié)議的接受郵件服務(wù)器,用來(lái)接受電子郵件。

SMTP的全稱是Simple Mail Transfer Protocol,即簡(jiǎn)單的郵件傳輸協(xié)議。它是一組用于從源地址到目的地的地址傳輸郵件的規(guī)范,通過(guò)它控制郵件的中轉(zhuǎn)方式。SMTP協(xié)議屬于TCP/IP協(xié)議簇,它幫助每臺(tái)計(jì)算機(jī)在發(fā)送或者中轉(zhuǎn)信件時(shí)找到下個(gè)目的地。SMTP服務(wù)器就是遵循SMTP協(xié)議的發(fā)送郵件服務(wù)器。

SMTP認(rèn)證,簡(jiǎn)單來(lái)說(shuō)就是要求必須在提供了賬戶名和密碼之后才能登陸SMTP服務(wù)器。

IMAP全稱是Iternet Mail Access Protocol,即交互式郵件存取協(xié)議,它是跟POP3類似的郵件訪問(wèn)標(biāo)準(zhǔn)協(xié)議之一。不同的是,開(kāi)啟了IMAP后,你在電子郵件客戶端收取的郵件仍然保存在服務(wù)器上,同時(shí)在客戶端上的操作都會(huì)反饋到服務(wù)器上,如:刪除郵件、標(biāo)記郵件等,服務(wù)器上的郵件也會(huì)做相應(yīng)的動(dòng)作。無(wú)論從瀏覽器登陸還是客戶端登陸郵箱看到的郵件以及狀態(tài)都是一致的。

我們使用網(wǎng)易的163郵箱來(lái)發(fā)送郵件,所以我們需要先將163郵箱的POP3/SMTP/IMAP都給打開(kāi)。

具體步驟是:設(shè)置->POP3/SMTP/IMAP->設(shè)置POP3/SMTP/IMAP,點(diǎn)擊復(fù)選框時(shí)郵箱會(huì)要求你設(shè)置授權(quán)碼,設(shè)置授權(quán)碼,然后一定要將授權(quán)碼給記住,后面會(huì)用到。郵箱設(shè)置好后我們就開(kāi)始編寫(xiě)代碼發(fā)送郵件。

首先引入我們需要導(dǎo)入的庫(kù)及包

import smtplib
import email
# MIME 多郵件擴(kuò)充協(xié)議
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart

然后設(shè)置郵箱的域名,端口,發(fā)送者郵箱,接收者郵箱

host = 'smtp.163.com' # 使用163郵箱
port = '465' # 163郵箱服務(wù)器的端口號(hào)
sender = 'xxxxxx@163.com' # 發(fā)送者的郵箱
password = 'xxxxxx' # 授權(quán)碼
receiver = 'xxxxxx' # 接收者的郵箱,可以為其他類型的郵箱,如果是多個(gè)接收者請(qǐng)傳入列表

接下來(lái)構(gòu)建文本郵箱的主體

​body = 'xxx' # 你要發(fā)送的郵件的內(nèi)容
subject = 'xxx' # 你要發(fā)送的郵件的標(biāo)題
 
# plain表示郵件內(nèi)容的類型,文本類型默認(rèn)是plain。utf-8表示內(nèi)容的編碼格式。
message = MIMEText(body, 'plain', 'utf-8')
message['From'] = sender # 發(fā)送者
message['To'] = receiver # 接收者
message['Subject'] = subject # 郵件標(biāo)題

接下來(lái)我們獲取SMTP協(xié)議的證書(shū),登陸我們的郵箱發(fā)送郵件

# 獲取SMTP協(xié)議證書(shū)
email_clint = smtplib.SMTP_SSL(host, port)
# 登陸郵箱,這里也是用授權(quán)碼登陸郵箱的
login_result = email_clint.login(sender, password)
# 發(fā)送郵件
email_clent.sendmail(from_addr=sender, to_addrs=receiver, msg=message.as_string())
# 關(guān)閉郵件發(fā)送客戶端
email_client.close()

其實(shí)這里我們可以打印login_result,如果返回的狀態(tài)碼是235則證明郵件發(fā)送成功。

下面是發(fā)送文本郵件的全部代碼。

import email
import smtplib
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
 
class SendEmail(object):
 def __init__(self):
 self.host = 'smtp.163.com'
 self.port = '465'
 self.sender = 'xxxxxx@163.com'
 self.password = 'xxxxxx'
 
 def send_email(self, receiver, subject='', body=''):
 message = MIMEText(body, 'plain', 'utf-8')
 message['From'] = self.sender
 message['To'] = receiver
 message['Subject'] = subject
 
 try:
  email_clint = smtplib.SMTP_SSL(self.host, self.port)
  print('獲取證書(shū)成功')
  login_result = email_clint.login(self.sender, self.password)
  print('開(kāi)始登陸')
  if login_result[0] == 235:
  print('登陸成功')
  email_clint.sendmail(self.sender, receiver, message.as_string())
  print('郵件發(fā)送成功')
  else:
  print('登陸失敗')
 except Exception as e:
  print('發(fā)生錯(cuò)誤', e)

下面介紹發(fā)送HTML格式內(nèi)容的郵件以及向郵件內(nèi)容中添加圖片。

其實(shí)發(fā)送HTML格式內(nèi)容的郵件很簡(jiǎn)單,只需將發(fā)送郵件的內(nèi)容格式改為html就行了,像這樣

message = MIMEText('<h2 style="color">學(xué)習(xí)使我快樂(lè)</h2>', 'html', 'utf-8')

還有使用內(nèi)嵌的方法向郵件內(nèi)容中加入文本或者圖片

# related 表示使用內(nèi)嵌資源的形式,將郵件發(fā)送給對(duì)方
message = MIMEMultipart('related')

然后向郵件中添加內(nèi)容,如果把圖片嵌入到郵件正文中只需在HTML中通過(guò)引用src="cid:x"即可。x代表圖片的編號(hào)可以是數(shù)字也可是是字符串

# ---------------發(fā)送文本-----------------
message_html = MIMEText('<h2 style="color:red;font-size:100px">學(xué)習(xí)使我快樂(lè)</h2><img src="cid:small">','html','utf-8')
# 將郵件內(nèi)容 裝入到郵件信息當(dāng)中去
message.attach(message_html)
# ---------------發(fā)送圖片-----------------
# rb 讀取二進(jìn)制文件(圖片是二進(jìn)制文件)
image_data = open('1.gif','rb')
# 設(shè)置讀取獲取的二進(jìn)制數(shù)據(jù)
message_image = MIMEImage(image_data.read())
# 關(guān)閉剛才打開(kāi)的文件
image_data.close()
message_image.add_header('Content-ID','small')
# 添加圖片文件到郵件信息當(dāng)中去
message.attach(message_image)

然后構(gòu)建郵件的主體,發(fā)送郵件即可

message['From'] = sender # 發(fā)送者
message['To'] = receiver # 接收者
message['Subject'] = subject # 郵件標(biāo)題
​
email_clint = smtplib.SMTP_SSL(host, port)
login_result = email_clint.login(sender, password)
email_clent.sendmail(from_addr=sender, to_addrs=receiver, msg=message.as_string())
email_client.close()

我們經(jīng)常會(huì)向郵件中添加附件,下面介紹添加附件的方式

添加附件也是使用內(nèi)嵌的方式添加的

# 對(duì)二進(jìn)制文件需要設(shè)置默認(rèn)的編碼形式
# 對(duì)于MIMEText()來(lái)說(shuō) 默認(rèn)的編碼形式就是base64
# 如果對(duì)于二進(jìn)制文件來(lái)說(shuō) 沒(méi)有設(shè)置base64進(jìn)行編碼 則附件的就會(huì)呈現(xiàn)亂碼
# --------------------添加圖片附件----------------------
message_image = MIMEText(open('1.gif','rb').read(),'base64','utf-8')
# 設(shè)置附件在郵件中的名字
message_image['Content-disposition'] = 'attachment;filename="happy.gif"'
message.attach(message_image)
 
# --------------------添加xlsx表格附件---------------
message_xlsx = MIMEText(open('table.xlsx','rb').read(),'base64','utf-8')
# 設(shè)置附件在郵件當(dāng)中的名字
message_xlsx['Content-Disposition'] = 'attachment;filename="test.xlsx"'
message.attach(message_xlsx)

然后發(fā)送郵件即可。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • pip 錯(cuò)誤unused-command-line-argument-hard-error-in-future解決辦法

    pip 錯(cuò)誤unused-command-line-argument-hard-error-in-future解決辦法

    這篇文章主要介紹了Python包管理器pip安裝軟件時(shí)出現(xiàn)unused-command-line-argument-hard-error-in-future錯(cuò)誤的解決辦法,需要的朋友可以參考下
    2014-06-06
  • wxPython的安裝圖文教程(Windows)

    wxPython的安裝圖文教程(Windows)

    下面小編就為大家分享一篇wxPython的安裝圖文教程(Windows),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • 基于Python編寫(xiě)一個(gè)有趣的年會(huì)抽獎(jiǎng)系統(tǒng)

    基于Python編寫(xiě)一個(gè)有趣的年會(huì)抽獎(jiǎng)系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了如何使用Python編寫(xiě)一個(gè)簡(jiǎn)易的抽獎(jiǎng)系統(tǒng),順便幫助大家鞏固一下對(duì)Python語(yǔ)法和框架的理解,感興趣的小伙伴可以了解下
    2023-12-12
  • 詳談pandas中agg函數(shù)和apply函數(shù)的區(qū)別

    詳談pandas中agg函數(shù)和apply函數(shù)的區(qū)別

    下面小編就為大家分享一篇詳談pandas中agg函數(shù)和apply函數(shù)的區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • Python3操作MongoDB增冊(cè)改查等方法詳解

    Python3操作MongoDB增冊(cè)改查等方法詳解

    這篇文章主要介紹了Python操作MongoDB增冊(cè)改查等方法詳解,需要的朋友可以參考下
    2020-02-02
  • 詳解Python函數(shù)可變參數(shù)定義及其參數(shù)傳遞方式

    詳解Python函數(shù)可變參數(shù)定義及其參數(shù)傳遞方式

    這篇文章主要介紹了詳解Python函數(shù)可變參數(shù)定義及其參數(shù)傳遞方式的相關(guān)資料,這里提供實(shí)例代碼幫助大家學(xué)習(xí)理解這部分內(nèi)容,需要的朋友可以參考下
    2017-08-08
  • python輸入多行的方法總結(jié)

    python輸入多行的方法總結(jié)

    Python中的Input()函數(shù)在輸入時(shí),遇到回車符,那么一次輸入就結(jié)束了,這不能滿足輸入多行文本并且行數(shù)也不確定的情形,當(dāng)然輸入空行也是允許的,本文給大家總結(jié)了python輸入多行的方法,需要的朋友可以參考下
    2024-04-04
  • Python引用計(jì)數(shù)操作示例

    Python引用計(jì)數(shù)操作示例

    這篇文章主要介紹了Python引用計(jì)數(shù)操作,結(jié)合實(shí)例形式分析了Python引用計(jì)數(shù)相關(guān)操作與運(yùn)行機(jī)制,需要的朋友可以參考下
    2018-08-08
  • 基于python生成器封裝的協(xié)程類

    基于python生成器封裝的協(xié)程類

    這篇文章主要為大家詳細(xì)介紹了基于python生成器封裝的協(xié)程類,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • Django csrf校驗(yàn)的實(shí)現(xiàn)

    Django csrf校驗(yàn)的實(shí)現(xiàn)

    這篇文章主要介紹了Django csrf校驗(yàn)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05

最新評(píng)論

久治县| 淮滨县| 什邡市| 石嘴山市| 元阳县| 高邮市| 西平县| 义乌市| 鹰潭市| 哈尔滨市| 青田县| 白城市| 永寿县| 汪清县| 马边| 蓬莱市| 连州市| 英超| 鹿泉市| 盐城市| 申扎县| 邢台县| 长兴县| 罗定市| 克什克腾旗| 佳木斯市| 运城市| 南昌县| 泰宁县| 南平市| 孟州市| 叙永县| 英山县| 阿坝县| 射洪县| 清远市| 建平县| 尚义县| 融水| 芦溪县| 亚东县|