python - “str”对象没有属性 'message_from_bytes'

标签 python gmail-imap

我有一段代码可以从我的收件箱(gmail)的消息中获取电子邮件。当我打印 email_from 时,电子邮件工作正常,但我想对数据拆分名称和电子邮件等进行一些操作,但在打印第一个循环步骤后代码中断,我收到错误:

Traceback (most recent call last):
  File "C:\Users\loc\Desktop\extract_gmail.py", line 24, in <module>
    email_message_raw = email.message_from_bytes(data[0][1])
AttributeError: 'str' object has no attribute 'message_from_bytes'

你能给我一些如何解决这个问题的建议吗?

代码:

import imaplib
import email
from email.header import Header, decode_header, make_header

# Connection settings
HOST = 'imap.gmail.com'
USERNAME = '***'
PASSWORD = '***'

m = imaplib.IMAP4_SSL(HOST, 993)
m.login(USERNAME, PASSWORD)
m.select('INBOX')

result, data = m.uid('search', None, "ALL")
if result == 'OK':
    for num in data[0].split()[:5]:
        result, data = m.uid('fetch', num, '(RFC822)')
        if result == 'OK':
            # Get raw message
            email_message_raw = email.message_from_bytes(data[0][1])

            # Decode headers
            email_from = str(make_header(decode_header(email_message_raw['From'])))

            # Print each name and email
            name, email = email_from.split('<')
            email.replace(">", "")
            print(name + "|" + email)

            # When i swap to just print email_from then works
            # print(email_from)



# Close server connection
m.close()
m.logout()

最佳答案

在您的代码中,您替换了电子邮件变量..

试试这个...

import imaplib
import email
from email.header import Header, decode_header, make_header

# Connection settings
HOST = 'imap.gmail.com'
USERNAME = '***'
PASSWORD = '***'

m = imaplib.IMAP4_SSL(HOST, 993)
m.login(USERNAME, PASSWORD)
m.select('INBOX')

result, data = m.uid('search', None, "ALL")
if result == 'OK':
    for num in data[0].split()[:5]:
        result, data = m.uid('fetch', num, '(RFC822)')
        if result == 'OK':
            # Get raw message
            email_message_raw = email.message_from_bytes(data[0][1])

            # Decode headers
            email_from = str(make_header(decode_header(email_message_raw['From'])))

            # Print each name and email
            name, email_addr = email_from.split('<')
            email_addr.replace(">", "")
            print(name + "|" + email_addr)

            # When i swap to just print email_from then works
            # print(email_from)



# Close server connection
m.close()
m.logout()

关于python - “str”对象没有属性 'message_from_bytes',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38739739/

相关文章:

Ruby net/imap 获取 OpenSSL::SSL::SSLError - 自签名证书?

c# - TCP 客户端通过 C# 中的多线程

python - 如何在 Factory Boy 中使用 lazy_attribute 和 Faker

python - 'HY00 0', ' SQL 包含 31 个参数标记,但使用 access mdb 文件提供了 32 个参数'

c - 如何获取电子邮件的 x-gm-labels

gmail - 新的 Gmail API 对 XOAUTH2 意味着什么?

python - Python 中的位置比较

python - plotly .ly。对多个绘图使用 slider 控件

python - 将类实例的输出作为另一个实例的输入

c++ - imap:从 C++ 程序发送电子邮件时为 "Unable to create selectable TCP socket"