亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

簡(jiǎn)單三步,用 Python 發(fā)郵件

haobowd / 1518人閱讀

摘要:使用腳本發(fā)送郵件并不復(fù)雜。以下為思路導(dǎo)圖模塊與發(fā)送郵件相關(guān)的模塊是關(guān)于簡(jiǎn)單郵件傳輸協(xié)議的操作模塊,在發(fā)送郵件的過程中起到服務(wù)器之間互相通信的作用。

0. 前言

發(fā)送電子郵件是個(gè)很常見的開發(fā)需求。比如你寫了個(gè)監(jiān)控天氣的腳本,發(fā)現(xiàn)第二天要下雨,或者網(wǎng)站上關(guān)注的某個(gè)商品降價(jià)了,就可以發(fā)個(gè)郵件到郵箱來提醒自己。

使用 Python 腳本發(fā)送郵件并不復(fù)雜。不過由于各家郵件的發(fā)送機(jī)制和安全策略不同,常常會(huì)因?yàn)橐恍┡渲脝栴}造成發(fā)送失敗。今天我們來舉例講講如何使用 Python 發(fā)送郵件。

本文主要內(nèi)容包括,了解發(fā)郵件的思路,發(fā)送郵件需要的一些設(shè)置,發(fā)送一封簡(jiǎn)單的郵件,發(fā)送一封包含附件的郵件,在寫代碼過程中我們需要注意哪些問題等等。(完整參考代碼地址見文末)

1. 思路

使用腳本發(fā)送郵件的思路其實(shí)和客戶端發(fā)送郵件一樣,過程都是:

登錄 — > 寫郵件 —> 發(fā)送

只不過通過腳本發(fā)送時(shí)我們需要考慮到整個(gè)過程的方方面面。以下為思路導(dǎo)圖:

2. Python-email 模塊

與發(fā)送郵件相關(guān)的 Python 模塊:

smtplib

是關(guān)于 SMTP(簡(jiǎn)單郵件傳輸協(xié)議)的操作模塊,在發(fā)送郵件的過程中起到服務(wù)器之間互相通信的作用。

email

簡(jiǎn)單來說,即服務(wù)器之間通信的信息,包括信息頭、信息主體等等。

舉個(gè)簡(jiǎn)單的例子,當(dāng)你登錄郵箱,寫好郵件后點(diǎn)擊發(fā)送,這部分是由 SMTP 接管;而寫郵件、添加附件是由 email 模塊控制。

3. 開通電子郵箱的SMTP功能

在使用腳本發(fā)郵件之前,我們需要打開自己郵箱的 SMTP 功能,各家郵箱的設(shè)置方法就不一一講述了,具體使用時(shí)可以百度一下,下面以 163 郵箱設(shè)置為例做一個(gè)簡(jiǎn)單的演示:

4. 簡(jiǎn)單代碼

實(shí)踐出真知,我們結(jié)合一個(gè)簡(jiǎn)單的代碼來理解這一過程:登錄 163 郵箱,向 qq 郵箱發(fā)送郵件。

腳本分為三個(gè)步驟:

設(shè)置好服務(wù)器端信息

郵件主體信息

登錄發(fā)送

另外在處理文本時(shí),我們需要使用 MIMEText 類。

import smtplib
from email.mime.text import MIMEText
#設(shè)置服務(wù)器所需信息
#163郵箱服務(wù)器地址
mail_host = "smtp.163.com"
#163用戶名
mail_user = "159*****02"
#密碼(部分郵箱為授權(quán)碼)
mail_pass = "7******x"
#郵件發(fā)送方郵箱地址
sender = "159*****02@163.com"
#郵件接受方郵箱地址,注意需要[]包裹,這意味著你可以寫多個(gè)郵件地址群發(fā)
receivers = ["59*****02@qq.com"]

#設(shè)置email信息
#郵件內(nèi)容設(shè)置
message = MIMEText("content","plain","utf-8")
#郵件主題
message["Subject"] = "title"
#發(fā)送方信息
message["From"] = sender
#接受方信息
message["To"] = receivers[0]

#登錄并發(fā)送郵件
try:
    smtpObj = smtplib.SMTP()
    #連接到服務(wù)器
    smtpObj.connect(mail_host,25)
    #登錄到服務(wù)器
    smtpObj.login(mail_user,mail_pass)
    #發(fā)送
    smtpObj.sendmail(
        sender,receivers,message.as_string())
    #退出
    smtpObj.quit()
    print("success")
except smtplib.SMTPException as e:
    print("error",e) #打印錯(cuò)誤

結(jié)果:

注意事項(xiàng):

一些郵箱登錄比如 QQ 郵箱需要 SSL 認(rèn)證,所以 SMTP 已經(jīng)不能滿足要求,而需要SMTP_SSL,解決辦法為:

#啟動(dòng)
smtpObj = smtplib.SMTP()
#連接到服務(wù)器
smtpObj.connect(mail_host,25)
#######替換為########
smtpObj = smtplib.SMTP_SSL(mail_host)

5. 帶有附件的email

上面我們介紹了發(fā)送字符串的郵件,但這明顯不滿足現(xiàn)代郵件的需求,下面我們介紹如何發(fā)送內(nèi)容以 HTML 格式,并且?guī)в袌D片和文本文件的郵件。

處理多種形態(tài)的郵件主體我們需要 MIMEMultipart 類,而處理圖片需要 MIMEImage 類。

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage

#設(shè)置登錄及服務(wù)器信息
mail_host = "smtp.163.com"
mail_user = "159*****02"
mail_pass = "7******x"
sender = "159*****02@163.com"
receivers = ["7******0@qq.com"]

#設(shè)置eamil信息
#添加一個(gè)MIMEmultipart類,處理正文及附件
message = MIMEMultipart()
message["From"] = sender
message["To"] = receivers[0]
message["Subject"] = "title"
#推薦使用html格式的正文內(nèi)容,這樣比較靈活,可以附加圖片地址,調(diào)整格式等
with open("abc.html","r") as f:
    content = f.read()
#設(shè)置html格式參數(shù)
part1 = MIMEText(content,"html","utf-8")
#添加一個(gè)txt文本附件
with open("abc.txt","r")as h:
    content2 = h.read()
#設(shè)置txt參數(shù)
part2 = MIMEText(content2,"plain","utf-8")
#附件設(shè)置內(nèi)容類型,方便起見,設(shè)置為二進(jìn)制流
part2["Content-Type"] = "application/octet-stream"
#設(shè)置附件頭,添加文件名
part2["Content-Disposition"] = "attachment;filename="abc.txt""
#添加照片附件
with open("1.png","rb")as fp:
    picture = MIMEImage(fp.read())
    #與txt文件設(shè)置相似
    picture["Content-Type"] = "application/octet-stream"
    picture["Content-Disposition"] = "attachment;filename="1.png""
#將內(nèi)容附加到郵件主體中
message.attach(part1)
message.attach(part2)
message.attach(picture)

#登錄并發(fā)送
try:
    smtpObj = smtplib.SMTP()
    smtpObj.connect(mail_host,25)
    smtpObj.login(mail_user,mail_pass)
    smtpObj.sendmail(
        sender,receivers,message.as_string())
    print("success")
    smtpObj.quit()
except smtplib.SMTPException as e:
    print("error",e)

6.小結(jié)

通過上面的代碼,想必大家已經(jīng)對(duì)發(fā)郵件有了基本的認(rèn)識(shí)。

從整體上我們要把握整個(gè)過程的思路:

登錄

寫郵件

發(fā)送

微觀上我們需要了解:

smtplib/email 模塊的代碼規(guī)則;

什么時(shí)候使用 SMTP,什么時(shí)候使用 SMTP_SSL?

針對(duì)不同的郵件內(nèi)容需要使用到不同的類,MIMEmultipart、MIMEText、MIMEIamge 等等;

怎么去設(shè)置附件信息

當(dāng)然,看再多教程,不如親自動(dòng)手寫一段代碼。大家不妨都自己發(fā)一封郵件試一試。

在公眾號(hào)(crossincode)中回復(fù)『email』,可以獲取實(shí)例代碼。

其他文章及回答:

Python 與 Excel 不得不說的事 - Crossin的編程教室 - 知乎專欄

Python-Excel 模塊哪家強(qiáng)?- Crossin的編程教室 - 知乎專欄

爆款游戲《貪吃蛇大作戰(zhàn)》的 Python 實(shí)現(xiàn) - Crossin的編程教室 - 知乎專欄

NBA 舉辦編程馬拉松 - 數(shù)據(jù)分析時(shí)代的到來 - Crossin的文章 - 知乎專欄

想用 Python 做數(shù)據(jù)分析?先玩玩這個(gè)再說 - Crossin的文章 - 知乎專欄

用 Python 實(shí)現(xiàn)你的量化交易策略 - Crossin的文章 - 知乎專欄

學(xué)習(xí)編程的過程中可能會(huì)走哪些彎路,有哪些經(jīng)驗(yàn)可以參考? - Crossin 的回答

你是如何自學(xué) Python 的? - Crossin 的回答

Python 抓取網(wǎng)頁(yè)亂碼原因分析 - Crossin的編程教室 - 知乎專欄

Crossin的編程教室

微信ID:crossincode

論壇:Crossin的編程教室

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/42016.html

相關(guān)文章

  • Python 發(fā)郵件

    摘要:程序人員對(duì)于郵件自動(dòng)化的日常需求還是很高的。更是自帶一套模塊實(shí)現(xiàn)郵件發(fā)送。正是為了實(shí)現(xiàn)這個(gè)而生的,一句話就可以完成所有的登錄發(fā)送文字附件等功能。參考一句話發(fā)送郵件正常一點(diǎn)的發(fā)送郵件 程序人員對(duì)于郵件自動(dòng)化的日常需求還是很高的。但是入過了Linux的命令行郵件客戶端如Sendmail, Mutt, Alpine等坑之后,發(fā)現(xiàn)現(xiàn)代其實(shí)很少人真的在用它們實(shí)現(xiàn)郵件自動(dòng)化,根據(jù)搜索引擎里相關(guān)文章...

    tuomao 評(píng)論0 收藏0
  • python實(shí)現(xiàn)網(wǎng)頁(yè)截屏、查庫(kù)、發(fā)郵件(selenium、phantomjs、mailer、jinj

    摘要:使用實(shí)現(xiàn)網(wǎng)頁(yè)截屏查庫(kù)發(fā)郵件的。本是用于發(fā)周報(bào)郵件的,周報(bào)內(nèi)容包括數(shù)據(jù)庫(kù)中的記錄以及網(wǎng)頁(yè)指定元素的截屏。用于網(wǎng)頁(yè)截屏,用于傳遞參數(shù)。注意其中使用截取中為的元素的操作。 使用python(2.7)實(shí)現(xiàn)網(wǎng)頁(yè)截屏、查庫(kù)、發(fā)郵件的demo。用到了selenium、phantomjs、mailer、jinja2、mysqldb還有image,都是比較典型的用法,可復(fù)用性比較強(qiáng),記錄分享一下。 本d...

    李文鵬 評(píng)論0 收藏0
  • Python yagmail三行代碼發(fā)郵件

    摘要:一般郵箱中,進(jìn)入設(shè)置,然后設(shè)置,打開服務(wù)就可以設(shè)置授權(quán)碼了。參數(shù)是收件人郵箱給多個(gè)目標(biāo)發(fā)郵件只需創(chuàng)建一個(gè)列表,將郵箱放在列表中即可是主題是郵箱正文是附件傳入文件路徑 Python 發(fā)送郵件 網(wǎng)上其實(shí)是有關(guān)于python發(fā)郵件的教程的,主要用的都是smtplib庫(kù),雖然也不復(fù)雜,但是并沒有今天要介紹的方法簡(jiǎn)單! 今天要介紹的重點(diǎn)對(duì)象——yagmail庫(kù) 話不多說,先看例子: im...

    yck 評(píng)論0 收藏0
  • 定時(shí)給Ta講笑話

    摘要:定時(shí)給講笑話大四的生活就是這么無聊,我琢磨著也學(xué)了這么多東西了,為啥不能用自己的知識(shí)來給生活找點(diǎn)樂子呢我想反正每天都要給問候一聲早安,為何不同時(shí)講個(gè)笑話呢如果能寫個(gè)程序每天早上定時(shí)給發(fā)一條問候早安同時(shí)講一個(gè)笑話的短信該多好。 定時(shí)給Ta講笑話 大四的生活就是這么無聊,我琢磨著也學(xué)了這么多東西了,為啥不能用自己的知識(shí)來給生活找點(diǎn)樂子呢?我想反正每天都要給Ta問候一聲早安,為何不同時(shí)講個(gè)笑...

    chanjarster 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<