【问题标题】:Cannot forward an email with attachments using imap and smtplib无法使用 imap 和 smtplib 转发带有附件的电子邮件
【发布时间】:2016-05-07 19:03:52
【问题描述】:

我读过on how to forward an email using imaplib and stmplib。我从 gmail 中获取这些电子邮件(有附件),对它们进行排序并希望将它们转发到另一个电子邮件帐户。

我的代码在这里,看起来非常相似:

message.mail.replace_header("From", from_addresses)
message.mail.replace_header("To", to_addresses)
server = smtplib.SMTP('smtp.gmail.com:587')
server.ehlo()
server.starttls()
server.login(settings.RECEIPTS_EMAIL_ACCOUNT, settings.RECEIPTS_EMAIL_PASSWORD)
server.sendmail(from_addresses, to_addresses, message.mail.as_string())
server.close()

但是,每当它到达message.mail.as_string() 上的sendmail 行时,邮件就会崩溃

*** AttributeError: 'list' object has no attribute 'encode'

如何将其转换为可以通过 imaplib 发送的内容?

【问题讨论】:

    标签: python email imap smtplib


    【解决方案1】:

    根据its documentationSMTP.sendmail() 接受单个地址,而不是列表。

    那么,试试吧:

    server.sendmail(from_address, to_addresses, message.mail.as_string())
    

    server.sendmail(from_addresses[0], to_addresses, message.mail.as_string())
    

    同样,Message.replace_header 不应传递给列表。试试这个:

    message.mail.replace_header("From", from_addresses[0])
    message.mail.replace_header("To", to_addresses[0])
    server = smtplib.SMTP('smtp.gmail.com:587')
    server.ehlo()
    server.starttls()
    server.login(settings.RECEIPTS_EMAIL_ACCOUNT, settings.RECEIPTS_EMAIL_PASSWORD)
    server.sendmail(from_addresses[0], to_addresses, message.mail.as_string())
    server.close()
    

    【讨论】:

    • 不幸的是,message.mail.as_string() 中断了,from 和 to 都是一个地址。我在刚才的问题中说得更清楚了。
    • 在这种情况下,错误是您将列表传递给replace_header()。查看我最近的编辑。
    • 您完全正确,非常感谢。我不敢相信我在调试中没有发现。
    猜你喜欢
    • 2011-07-31
    • 2011-02-12
    • 2013-04-11
    • 2023-04-09
    • 2020-09-19
    • 1970-01-01
    • 1970-01-01
    • 2015-09-07
    • 1970-01-01
    相关资源
    最近更新 更多