Zmail-簡單易用的python郵件模組

zyunh發表於2018-03-16

GitHub地址: github.com/ZYunH/zmail

覺得對你有用請Star或者Fork!

介紹

Zmail 允許你傳送和接受郵件儘可能的簡單。你不需要去檢查你的伺服器地址、埠以及自己構造MIME物件,使用Zmail,你只需要關注你的郵件內容即可。

安裝

Zmail僅支援python3,不需要任何其他外部依賴. 不支援python2.

選項一:通過pip安裝(推薦)

$ pip3 install zmail
複製程式碼

或者

$ pip install zmail
複製程式碼

這樣做也意味著此pip版本是支援python3的。

選項二: 從GitHub下載安裝

你可以下載Zmail的master分支,將其解壓,切換到相應目錄,然後

$ python3 setup.py install
複製程式碼

特性

  • 自動尋找伺服器地址以及埠
  • 自動使用可靠的連結協議
  • 自動將一個python字典對映成MIME物件(帶有附件的)
  • 自動新增標頭檔案以及localhostname來避免伺服器拒收你的郵件
  • 輕鬆自定義你的標頭檔案
  • 支援使用HTML作為郵件內容
  • 僅需python>=3.5,你可以將其嵌入你的專案而無需其他的依賴

使用須知

使用它之前,請保證

  • 使用Python3
  • 確保開啟了郵箱的POP3和SMTP功能 (對於 @163.com@gmail.com 你需要設定你的應用專用密碼)

然後,剩下你需要做的就是import zmail即可

使用示例

傳送你的郵件

import zmail
mail = {
    'subject': 'Success!',  # Anything you want.
    'content': 'This message from zmail!',  # Anything you want.
    'attachments': '/Users/zyh/Documents/example.zip',  # Absolute path will be better.
}

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

server.send_mail('yourfriend@example.com', mail)
複製程式碼
  • 給一個列表的收件人發件
server.send_mail(['yourfriend@example.com','12345@example.com'], mail)
複製程式碼
  • 傳送HTML作為郵件內容
mail = {
    'subject': 'Success!',  # Anything you want.
    'content_html': zmail.get_html('/Users/example.html'), # Absolute path will be better.
    'attachments': '/Users/zyh/Documents/example.zip',  # Absolute path will be better.
}
server.send_mail('yourfriend@example.com',mail)
複製程式碼

或者

with open('/Users/example.html','r') as f:
    content_html = f.read()
mail = {
    'subject': 'Success!',  # Anything you want.
    'content_html': content_html, 
    'attachments': '/Users/zyh/Documents/example.zip',  # Absolute path will be better.
}
server.send_mail('yourfriend@example.com',mail)
複製程式碼

取回你的郵件

  • 取得最新的郵件
import zmail
server = zmail.server('yourmail@example.com', 'yourpassword')
mail = server.get_latest()
複製程式碼
  • 依據id取回郵件
mail = server.get_mail(2)
複製程式碼
  • 依據 (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()
複製程式碼

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

解析你的郵件

在zmail中,接收到的郵件被對映為一個字典,你可以通過訪問python字典的形式來訪問你的郵件,例如

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<zmail@126.com>
date 2018-2-3 01: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
複製程式碼

郵件的結構

  • content-type: 郵件內容的型別
  • subject: 郵件主題
  • to:收件人
  • from:寄件人
  • date: 年-月-日 時間 時區
  • boundary: 如果郵件為multiple parts,你可以得到其分界線
  • content: 郵件的文字內容(僅在text/plain時可以被解析)
  • contents: 郵件的body,裡面包含著由分界線分割的每一個段落
  • attachments: None 或者 [['附件名稱;編碼方式','附件的二進位制內容']...]
  • 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')
複製程式碼

支援的郵件服務商

列表中的郵件服務商已經被測試可正常使用

如果你的郵箱不在此列,請不要擔心,目前尚未發現不支援的郵箱.如果你發現任何問題,請在GitHub上告知於我

服務商地址 傳送郵件 取回郵件 備註
@163.com 需要應用專用密碼
@qq.com POP3 需要應用專用密碼
@126.com
@yeah.net
@gmail.com 需要應用專用密碼
@sina.com
@outlook

API

server = zmail.server('user@example','password')

SMTP

  • server.send_mail([recipient,], mail)

POP3

  • server.get_mail(which)
  • server.get_mails(subject, sender, after, before)
  • server.get_latest()
  • server.get_info()
  • server.stat()

Parse mail

  • server.get_attachment(mail)

Mail

  • subject
  • content
  • content_html
  • from
  • to

Other

  • zmail.show()

相關文章