0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Python開源項目介紹:用zmail簡單地發(fā)郵件

馬哥Linux運維 ? 來源:lq ? 2019-01-30 15:17 ? 次閱讀

發(fā)送郵件是個很簡單的需求,但是在實際的使用中依然碰到了很多坑,因此創(chuàng)建了zmail這個項目,讓你使用python發(fā)送郵件的過程盡可能簡單。

GitHub:https://github.com/ZYunH/zmail

其他輪子的缺點:

服務(wù)端拒信:首要問題。很多其他的輪子需要自己構(gòu)造MIME和郵件頭(通常優(yōu)化了過程),但經(jīng)常遭遇拒信,具體原因是其沒有正確的定義郵件頭,諸如From和To的頭信息在使用SMTP時每家服務(wù)商檢查都會有細微的差別,以及一些平臺的差異(win10 localhost亂碼導(dǎo)致發(fā)件拒信),甚至在你發(fā)往不同的地址檢查也會有差別(國內(nèi)發(fā)國外需要額外驗證一些信息預(yù)防垃圾郵件)。

構(gòu)造太麻煩:特別是添加附件的時候,有些還需要額外去自定義類型,體驗很差。

發(fā)送太麻煩:你需要找到你服務(wù)商的smtp地址,端口號,有些服務(wù)商不是默認的端口(@http://163.com),有些只能SSL驗證(@http://qq.com),有些需要TLS(@gmailcom),一個不小心就發(fā)送失敗。

解析郵件復(fù)雜:Bytes坑多,還有boundary,各種格式亂碼錯誤

引入過多的外部包:一些輪子引入了好幾個包,可能會造成包與原來的程序版本沖突(常見于requests之類的包),并且發(fā)生錯誤無法得到及時的文檔支持。在我嘗試發(fā)送失敗后,使用django的email模塊成功發(fā)送了郵件,但是django的目的顯然不是這個,使用一個如此大的框架來實現(xiàn)那么小的需求顯然不合理(并且構(gòu)造過程依然復(fù)雜)。

Zmail的優(yōu)勢:

自動填充大多數(shù)導(dǎo)致服務(wù)端拒信的頭信息(From To LocalHost之類的)

將一個字典映射為email,構(gòu)造信件就像構(gòu)造字典一樣簡單

自動尋找郵件服務(wù)商端口號地址,自動選擇合適的協(xié)議(經(jīng)過認證的)

只依賴于python3,嵌入其他項目時無需煩惱

你可以使用zmail來:

作為監(jiān)控腳本的發(fā)送&接收郵件模塊,及時傳遞信息

嵌入到已有的項目中實現(xiàn)郵件功能

自定義郵件發(fā)送過程,諸如準點發(fā)送、定時發(fā)送、自動監(jiān)控等

安裝

$ pip3 install zmail

也可以使用pip代替pip3

注意:zmail僅支持python3,不支持python2,使用前所有郵箱都要開啟SMTP功能,@http://163.com和@http://gmail.com 的郵箱需要額外設(shè)定SMTP密碼,網(wǎng)上很多信息,具體自行百度google,這里先行省略。

發(fā)送郵件

import zmail

# 你的郵件內(nèi)容

mail_content = {

'subject': 'Success!', # 隨便填寫

'content': 'This message from zmail!', # 隨便填寫

}

# 使用你的郵件賬戶名和密碼登錄服務(wù)器

server = zmail.server('12345678@qq.com, '你的qq郵箱密碼')

# 發(fā)送郵件

server.send_mail('555555@qq.com', mail)

為你的郵件添加附件,修改你的郵件內(nèi)容 即可,其他內(nèi)容同上

# 你的郵件內(nèi)容

mail_content = {

'subject': 'Success!', # 隨便填寫

'content': 'This message from zmail!', # 隨便填寫

'attachments': '/Users/zyh/Documents/example.zip', # 最好使用絕對路徑,若你電腦沒有這個文件會造成錯誤

}

給多個信箱發(fā)件,修改發(fā)送郵件 即可,其他內(nèi)容同上

# 發(fā)送郵件

server.send_mail(['555555@qq.com','666666@qq.com'], mail)

添加額外的頭信息,直接加入到mail_content即可

取回你的郵件

取得最新的郵件

import zmail

server = zmail.server('yourmail@example.com, 'yourpassword')

mail = server.get_latest()

依據(jù)id取回郵件

mail = server.get_mail(2)

依據(jù) (subject,after,before,sender)取回一個列表的郵件

mail = server.get_mails(subject='GitHub',after='2018-1-1',sender='github')

示例中, 如果 'GitHub' 在郵件的主題中,這封郵件將會被匹配, 例如' [GitHub] Your password has changed'

sender亦是如此

得到所有郵件的頭文件信息.一個由字典組成的列表,每個字典包含了所有能夠提取的頭文件.

mail_info = server.get_info()

得到郵箱的信息

mailbox_info = server.stat()

結(jié)果為包含兩個整型的元組: (郵件的數(shù)量, 郵箱的大小).

解析你的郵件

在zmail中,接收到的郵件被映射為一個字典,你可以通過訪問python字典的形式來訪問你的郵件,字典中的所有key在下方郵件結(jié)構(gòu)中有列出,例如

subject = mail['subject']

展示你的郵件,使用 zmail.show()

import zmail

server = zmail.server('yourmail@example.com, 'yourpassword')

mail = server.get_latest()

zmail.show(mail)

輸出 :

content-type multipart/mixed

subject Success!

to zmail_user

from zmail

date 2018-2-301:42:29 +0800

boundary ===============9196441298519098157==

content ['This message from zmail!']

contents [[b'Content-Type: text/plain; charset="utf-8"', b'MIME-Version: 1.0', b'Content-Transfer-Encoding: base64', b'', b'VGhpcyBtZXNzYWdlIGZyb20gem1haWwh', b'']]

attachments None

id 5

郵件的結(jié)構(gòu)

content-type: 郵件內(nèi)容的類型

subject: 郵件主題

to:收件人

from:寄件人

date: 年-月-日 時間 時區(qū)

boundary: 如果郵件為multiple - - - parts,你可以得到其分界線

content: 郵件的文本內(nèi)容(僅在text/plain時可以被解析)

contents: 郵件的body,里面包含著由分界線分割的每一個段落

attachments: None 或者 [['附件名稱;編碼方式','附件的二進制內(nèi)容']...]

id: 在郵箱中的id

獲得附件

import zmail

server = zmail.server('yourmail@example.com, 'yourpassword')

mail = server.get_latest()

zmail.get_attachment(mail)

你可以重命名你的附件,使用

zmail.get_attachment(mail,'example.zip')

支持的郵件服務(wù)商列表中的郵件服務(wù)商已經(jīng)被測試可正常使用

如果你的郵箱不在此列,前往Github提交issue。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 模塊
    +關(guān)注

    關(guān)注

    7

    文章

    2729

    瀏覽量

    47616
  • 郵件
    +關(guān)注

    關(guān)注

    0

    文章

    32

    瀏覽量

    18817
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4802

    瀏覽量

    84885

原文標題:Python開源項目介紹:用zmail簡單地發(fā)郵件

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    labview發(fā)郵件實現(xiàn)與遠程預(yù)警

    labview發(fā)郵件實現(xiàn)與遠程預(yù)警
    發(fā)表于 08-18 11:48

    要看portel99教程的給我發(fā)郵件

    要看portel99教程的給我發(fā)郵件fflyinsky@126.com
    發(fā)表于 05-23 08:16

    如何在嵌入式Linux下發(fā)郵件

    有誰知道如何在嵌入式Linux下發(fā)郵件?的2440開發(fā)板...
    發(fā)表于 05-08 10:18

    版主招募ing、交流/建議、板塊運營 發(fā)郵件

    版主招募ing、交流/建議、板塊運營請發(fā)郵件到 users@elecfans.com
    發(fā)表于 11-10 10:40

    GPRS模塊收發(fā)郵件有參考的資料嗎

    MC52ir3 GPRS模塊,可以收發(fā)郵件大家有參考的資料嗎,
    發(fā)表于 01-28 04:24

    請問這個是發(fā)郵件到哪里的?

    One easy way to import a file is to e-mail it to yourself and then select open in SensorTag app.請問這個是發(fā)郵件到哪里,在app里看到有一個IBMcloud,是不是和哪個有關(guān)。
    發(fā)表于 10-11 08:14

    Python爬蟲8個常用的爬蟲技巧分析總結(jié)

    python也差不多一年多了,python應(yīng)用最多的場景還是web快速開發(fā)、爬蟲、自動化運維:寫過簡單網(wǎng)站、寫過自動發(fā)帖腳本、寫過收發(fā)郵件
    的頭像 發(fā)表于 08-18 11:45 ?5117次閱讀

    精選10個Python開源項目

    過去一個月里,我們對近 250 個 Python 開源項目進行了排名,并挑選出熱度前 10 的項目
    的頭像 發(fā)表于 11-12 09:47 ?6344次閱讀

    簡單:Python讓Excel飛起來

    簡單:Python讓Excel飛起來
    發(fā)表于 05-25 10:46 ?56次下載

    簡單電源開源項目

    電子發(fā)燒友網(wǎng)站提供《簡單電源開源項目.zip》資料免費下載
    發(fā)表于 07-06 11:12 ?9次下載
    <b class='flag-5'>簡單</b>電源<b class='flag-5'>開源</b><b class='flag-5'>項目</b>

    如何用python發(fā)郵件呢?

    先做一些準備,把郵件SMTP服務(wù)器、收發(fā)mail、郵件標題和正文準備好。
    的頭像 發(fā)表于 03-06 14:49 ?789次閱讀

    怎么Python構(gòu)建一個自動發(fā)送郵件的腳本

    ? 類似的應(yīng)用場景還有很多,不僅僅是在股票策略提醒上,比如定時向某些人發(fā)送郵件;網(wǎng)站宕機了,實時發(fā)送郵件提醒;網(wǎng)站負載過高,發(fā)送郵件提醒......等等。 下面就來講講怎么
    的頭像 發(fā)表于 10-21 14:47 ?786次閱讀
    怎么<b class='flag-5'>用</b><b class='flag-5'>Python</b>構(gòu)建一個自動發(fā)送<b class='flag-5'>郵件</b>的腳本

    怎么Python構(gòu)建一個自動發(fā)送郵件的腳本

    呢? 類似的應(yīng)用場景還有很多,不僅僅是在股票策略提醒上,比如定時向某些人發(fā)送郵件;網(wǎng)站宕機了,實時發(fā)送郵件提醒;網(wǎng)站負載過高,發(fā)送郵件提醒......等等。 下面就來講講怎么
    的頭像 發(fā)表于 10-31 16:36 ?570次閱讀
    怎么<b class='flag-5'>用</b><b class='flag-5'>Python</b>構(gòu)建一個自動發(fā)送<b class='flag-5'>郵件</b>的腳本

    如何用Python批量定制化發(fā)送郵件

    現(xiàn)實生活中,如果只是發(fā)郵件給自己,像上一篇文章那樣簡陋的格式是可以接受的,但若要針對每個人進行郵件的定制化,群發(fā)給公司客戶、內(nèi)部員工、親戚朋友,則需更加高級的郵件發(fā)送方式。 我們可以通過HTML制作
    的頭像 發(fā)表于 11-01 11:32 ?2289次閱讀

    如何使用Python編寫腳本來自動發(fā)送郵件

    Python是一種非常流行的編程語言,可以用于多種用途,包括自動化任務(wù)。其中一個常見的自動化任務(wù)是自動發(fā)送郵件。在本文中,我們將介紹如何使用Python編寫腳本來自動發(fā)送
    的頭像 發(fā)表于 12-07 11:36 ?1394次閱讀