首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >imapclient未正确读取电子邮件

imapclient未正确读取电子邮件
EN

Stack Overflow用户
提问于 2021-12-01 17:25:21
回答 1查看 43关注 0票数 0

我正在尝试在python中导入一个包含在电子邮件中的HTML表。

我尝试了以下脚本:

代码语言:javascript
复制
HOST = 'imap.gmail.com'
USERNAME = username
PASSWORD = password
ssl = True

server = IMAPClient(HOST, use_uid=True, ssl=ssl)
server.login(USERNAME, PASSWORD)

select_info = server.select_folder('INBOX')
messages = server.search(['FROM', sender_address])

if len(messages) > 0:
   for mail_id, data in server.fetch(messages,['ENVELOPE','BODY[TEXT]']).items():
       envelope = data[b'ENVELOPE']
       body = data[b'BODY[TEXT]']

soup = BeautifulSoup(body)
table = soup.find_all('table')
df = pd.read_html(str(table))[0]

这个脚本运行得很好,但是我得到一些随机的"=“和一个"<= /td>”插入到表中。这是一个包含黄色错误的数据框输出示例

以下是原始电子邮件表的示例:

我认为错误出在IMAPClient命令中(而不是BS解析或pandas中),因为如果我检查"body“变量中的超文本标记语言,我会发现错误已经存在。

我做错了什么?谢谢

EN

回答 1

Stack Overflow用户

发布于 2021-12-01 18:45:58

如果有人需要它,下面的代码运行得很好:

代码语言:javascript
复制
imap = imaplib.IMAP4_SSL('imap.gmail.com')
imap.login(username, password)
imap.select("inbox")

resp, items = imap.search(None, '(FROM "xxxx@xxxxxxxxx.com")')

for n, num in enumerate(items[0].split(), 1):
    resp, data = imap.fetch(num, '(RFC822)')

    body = data[0][1]
    msg = email.message_from_bytes(body)
    content = msg.get_payload(decode=True)

    soup = BeautifulSoup(content)
    table = soup.find_all('table')
    df = pd.read_html(str(table))[0]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70188636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档