在 python 中使用 smtplib 附件被附加两次

Attachments getting attached twice using smptplib in python

我正在尝试在 python 中实现一项功能,我想在其中发送 文件作为电子邮件警报的附件 一切正常。我收到了包含必填主题的电子邮件提醒,但唯一的问题是我在电子邮件提醒中收到了两次相同的附件。

    fileMsg = email.mime.base.MIMEBase('application','octet-stream')
    fileMsg.set_payload(file('/home/bsingh/python_files/file_dict.txt').read())
    #email.encoders.encode_base64(fileMsg)
    fileMsg.add_header('Content-Disposition','attachment;filename=LogFile.txt')
    emailMsg.attach(fileMsg)

  # send email
    server = smtplib.SMTP(smtp_server)
    server.starttls()
    server.login(username, password)
    server.sendmail(from_add, to_addr,emailMsg.as_string())
    server.quit()

yagmail(我是开发人员)的全部目的是让发送电子邮件变得非常容易,尤其是在 HTML 或需要附件的情况下。

请尝试以下代码:

import yagmail
yag = yagmail.SMTP(from_add, password)
contents = ['See my attachment below', '/home/bsingh/python_files/file_dict.txt']
yag.send(contents = contents)

注意这里的神奇之处:contents 是一个列表,其中等于文件路径的项目将自动加载、猜测并附加 mimetype。

还有更多魔法,例如易于嵌入图像、无密码脚本、无用户名脚本、简单的别名、智能默认值(注意我省略了 tosubject 参数?)和多得多。我 advise/encourage 你阅读它的 github 页面 :-)。欢迎提出问题或添加功能请求!

yagmail可以通过pip安装获取:

pip install yagmail # Python 2
pip3 install yagmail # Python 3

我自己也遇到过这个问题。我将 'alternative' 作为消息的 MIMEMultipart 类型。当我更改为默认值时,'mixed',重复项消失了。

因此,如果您使用 MIMEMultipart('alternative') 创建了 emailMsg,您可能会遇到同样的问题。

我认为 'alternative' 用于同时提供文本和 html 版本的邮件正文,因此我认为如果您使用它,除了附件之外还需要同时提供这两种版本。

希望对您有所帮助。

我还没有在任何地方找到很好的解释;电子邮件可能会变得相当复杂。

版本有问题..已解决