【问题标题】:Send content of text file via email通过电子邮件发送文本文件的内容
【发布时间】:2020-12-19 23:44:10
【问题描述】:

我编写了一个脚本,将活动和非活动 wifi 设备列表打印到文本文件中。我想通过电子邮件发送这个文本文件的内容。但是,消息是空的。

import smtplib
from email.mime.text import MIMEText

file = open('list_of_wifi_devices.txt')
file = file.read()

sender = ...
receiver = ...
password = ...

smtpObj = smtplib.SMTP('smtp.gmail.com', 587)
smtpObj.ehlo()
smtpObj.starttls()
smtpObj.login(sender, password)
smtpObj.sendmail(sender, receiver, file)
smtpObj.quit()

【问题讨论】:

  • 您正在尝试将文件内容作为文本包含在电子邮件正文中(不附加实际文件),是吗?
  • 是的,只有内容。不是附件。
  • 是否真的发送了一封电子邮件,但它的正文是空的?我会看看smtpObj.set_debuglevel(1) 是否对你有帮助。另外,尝试使用 SMTP_SSL 替换 SMTP 来启动 SSL 连接,而不是使用 startls 切换到一个(似乎不太可能是原因)。
  • 您的建议没有帮助。是的,该脚本适用于发送电子邮件。身体只是空的。
  • 在正文开头插入换行符,例如file = "\n" + file.read()。 PS 最好不要重用变量名file,但您可以稍后解决。

标签: python


【解决方案1】:

问题在于您对电子邮件的构造不正确。具体来说,msg 参数不能只是电子邮件的正文。它应该是一个 RFC822 消息头,后跟消息正文。

要跳过包含标题,您可以提供一个空行,因此建议尝试在消息开头插入 \n

更好的解决方案可能是在 Python 中使用email package 来正确构造消息。

感谢this answer 的大力帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-28
    • 1970-01-01
    • 1970-01-01
    • 2021-04-10
    相关资源
    最近更新 更多