Python解析邮件
Python邮件正文及附件解析 - 简书 (jianshu.com)
python读取并解析邮箱邮件,读取邮件主题、内容、时间_python imaplib search获取邮件时间-CSDN博客
python获取邮箱内容并解析_mob64ca12e63b18的技术博客_51CTO博客
import email
import imaplib
import json
from email.parser import Parser
from email.header import decode_header
import requests
from bs4 import BeautifulSoup
import re
import datetime
imap_user = '用户名email地址'
imap_object = imaplib.IMAP4_SSL(port=993, host="imap.feishu.cn") # 如果使用非安全链接,请尝试使用imaplib的IMAP4方法
imap_object.login("", "")
imap_object.select('INBOX') # 选择'收件箱'
# 获取状态和邮件id列表
status, msg_ids = imap_object.search(None, 'ALL')
# msg_ids,是list,数据是二进制,且只有一个
ids = msg_ids[0]
# 二进制数据转str
ret = ids.decode('utf-8')
# str转list
message_id_list = ret.split()
int_mail_num = len(message_id_list)
# print('收件箱中共有%s封邮件' % int_mail_num)
# print('msg_list=', message_id_list)
# 选择1封邮件测试
ids = message_id_list[-2]
status2, data = imap_object.fetch(ids, "(RFC822)")
imap_object.close() # 关闭与imap服务器的连接
# str_source = data[0][1].decode('UTF-8')
str_source = email.message_from_bytes(data[0][1])
# 解析邮件内容
def decode_data(bytes, added_encode=None):
"""
字节解码
:param bytes:
:return:
"""
def _decode(bytes, encoding):
try:
return str(bytes, encoding=encoding)
except Exception as e:
return None
encodes = ['UTF-8', 'GBK', 'GB2312']
if added_encode:
encodes = [added_encode] + encodes
for encoding in encodes:
str_data = _decode(bytes, encoding)
if str_data is not None:
return str_data
return None
# 获取邮件主题
mail_encode = decode_header(str_source.get("Subject"))[0][1]
mail_subject = decode_data(decode_header(str_source.get("Subject"))[0][0], mail_encode)
# print(mail_subject)
# 解析邮件内容
def get_body(msg):
if msg.is_multipart():
return get_body(msg.get_payload(0))
else:
return msg.get_payload(None, decode=True)
mail_body = decode_data(get_body(str_source))
# print(mail_body)
soup = BeautifulSoup(mail_body, 'lxml')
subject = soup.find_all('div', class_='title title-cn')[0].text
print(subject)
name_list = []
names = soup.find_all('div', class_='td-title td-title-cn')
for name in names:
name_list.append(name.text)
print(name_list)
value_list = []
values = soup.find_all('td', class_='td-value')
for value in values:
value_list.append(value.text)
print(value_list)
content = []
for i in range(len(name_list)):
content.append([{"tag": "text", "text": f'{name_list[i]}:'}, {"tag": "text", "text": value_list[i]}])
# 推送到飞书群里
url = ''
headers = {
"Content-Type": "application/json; charset=utf-8",
}
payload_message = {
"msg_type": "post",
"content": {
"post": {
"zh_cn": {
"title": subject,
"content": content,
}
}
}
}
response = requests.post(url=url, data=json.dumps(payload_message), headers=headers)
print(response)
import imaplib
import email
from email.utils import parsedate_to_datetime
from email.header import make_header, decode_header
email_value_config = {
'imap_server': 'imap.feishu.cn',
'username': '',
'password': '',
}
def extract_email():
email_server = imaplib.IMAP4_SSL(email_value_config['imap_server'])
email_server.login(email_value_config["username"], email_value_config['password'])
email_server.select('INBOX') # 选择【收件箱】
# 选择收件箱
_typ, _search_data = email_server.search(None, 'ALL')
# 开始解析
mailidlist = _search_data[0].split() # 转成标准列表,获得所有邮件的ID
print(f'一共解析邮件数量:{len(mailidlist)}')
# 解析内容:
for mail_id in mailidlist:
result, data = email_server.fetch(mail_id, '(RFC822)') # 通过邮件id获取邮件
email_message = email.message_from_bytes(data[0][1]) # 邮件内容(未解析)
subject = make_header(decode_header(email_message['SUBJECT'])) # 主题
mail_from = make_header(decode_header(email_message['From'])) # 发件人
mail_dt = parsedate_to_datetime(email_message['Date']).strftime("%Y-%m-%d %H:%M:%S") # 收件时间
email_info = {
"主题": str(subject),
"发件人": str(mail_from),
"收件时间": mail_dt,
"邮件内容(未解析)": email_message,
}
print(email_info)
if __name__ == '__main__':
extract_email()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)