python3接收 解析郵件

2022-03-26 17:15:11 字數 3086 閱讀 7684

python3可以使用poplib.pop3進行郵件接收,具體如下:

import poplib

from email.parser import parser

def get_email(email,password,host="mail.163.com"):

# connect to pop3 server

server = poplib.pop3(host)

# open debug

server.set_debuglevel(1)

# 身份驗證

server.user(email)

server.pass_(password)

# 返回郵件總數目和占用伺服器的空間大小(位元組數), 通過stat()方法即可

# print("mail counts: , storage size: ".format(server.stat()))

# 使用list()返回所有郵件的編號,預設為位元組型別的串

resp, mails, octets = server.list()

# print("響應資訊: ", resp)

# print("所有郵件簡要資訊: ", mails)

# print("list方法返回資料大小(位元組): ", octets)

# get the latest, index from 1:

index = len(mails)

if index < 1:

return none

resp, lines, octets = server.retr(index)

# 可以獲得整個郵件的原始文字:

msg_content = b'\r\n'.join(lines).decode('utf-8')

# 解析出郵件:

msg = parser().parsestr(msg_content)

# print(msg)

# print("解碼後的郵件資訊:\r\n"+str(msg))

#close

server.close()

return msg

def delete_email(email,password,host="mail.163.com"):

# connect to pop3 server

server = poplib.pop3(host)

# open debug

# server.set_debuglevel(1)

# 身份驗證

server.user(email)

server.pass_(password)

# 使用list()返回所有郵件的編號,預設為位元組型別的串

# list()返回tuple

resp, mails, octets = server.list()

# print("響應資訊: ", resp)

# print("所有郵件簡要資訊: ", mails)

# print("list方法返回資料大小(位元組): ", octets)

# get the latest, index from 1:

index = len(mails)

# 刪除所有郵件

while index > 0:

server.dele(index)

print(index)

index = index -1

# commit command and close

server.quit()

# 解析郵件正文

def get_mail_content(msg):

if msg == none:

return none

for part in msg.walk():

if not part.is_multipart():

data = part.get_payload(decode=true)

# print("emailcontent:\r\n"+data.decode())

return data.decode()

標記訊息號 which 以進行刪除。在大多數伺服器上,刪除直到quit才被實際執行(主要例外是eudora qpop,它通過在任何斷開連線上進行未決刪除而故意違反rfc)。

登出:提交更改,解鎖郵箱,刪除連線。

walk() 方法是一種通用的生成器,可用於以深度優先遍歷順序遍歷訊息物件樹的所有部分和子部分。您通常會在 for 迴圈中使用 walk() 作為迭代器;每次迭代返回下乙個子部分。

is_multipart()

如果訊息的有效內容是乙個子emailmessage 物件的列表,則返回 true,否則返回 false。當 is_multipart() 返回 false 時,有效負載應為字串物件(可能是cte編碼的二進位制有效負載)。注意,is_multipart() 返回 true 並不一定意味著「msg.get_content_maintype() == 『multipart』」將返回 true。例如,當 emailmessage 型別為 message/rfc822 時,is_multipart 將返回 true。

get_content_type()返回訊息的內容型別,強制為** maintype/subtype 的小寫。如果訊息中沒有 content-type 頭,則返回 get_default_type() 返回的值。如果 content-type 頭無效,則返回 text/plain。

(根據 rfc 2045,訊息總是有乙個預設型別,get_content_type() 將總是返回乙個值。rfc 2045 定義乙個訊息的預設型別為 text/plain,除非它出現在乙個 multipart/digest 容器中,在這種情況下,它將是 message/rfc822 如果 content-type 頭有乙個無效的型別規範,rfc 2045 強制預設型別為 text/plain。)

email.message api文件

Python3實現郵件群發

1 在 mysql 資料庫建立 mail 資料庫,並建立 mail 表 2 將郵箱的電子郵件位址存在於mail 表中 3 編寫 python 程式 coding utf 8 import smtplib from email.mime.text import mimetext import time...

初識python3郵件傳送

前不久學習了一下python是如何傳送郵件到指定郵箱,python使用版本為python3.7。usr bin python3 匯入smtplib包,引用對應外掛程式 import smtplib from email.mime.text import mimetext from email.uti...

使用Python 3發郵件

直接使用別人封裝好的第三方庫 usr bin env python coding utf 8 time 2018 6 5 21 42 author hewj file demon.py import yagmail args yagmail.smtp args emaillist 893369127...