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()

 

posted @   你说夕阳很美  阅读(291)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示