【问题标题】:Python Sendmail with Attachment?带有附件的 Python Sendmail?
【发布时间】:2011-11-25 16:37:12
【问题描述】:

我正在使用 python 编程。我已经有一个发送带有附件的邮件的功能,但问题是它接收邮件并将其作为附件。我需要它尊重消息作为消息和附件作为附件。我进行了调查,发现这与 MIME Multipart "MIXED" 有关,但我不知道如何将其添加或更改为我的实际功能。

这是我正在使用的函数的python代码:

def enviarCorreo(fromaddr, toaddr, file):
    msg = MIMEMultipart('mixed')
    msg['From'] = fromaddr
    msg['To'] = toaddr
    msg['Subject'] = 'asunto'
    #adjunto
    adjunto = MIMEBase('application', "octet-stream")
    adjunto.set_payload(open(file, "rb").read())
    encode_base64(adjunto)
    adjunto.add_header('Content-Disposition', 'attachment; filename= "%s"' % file)
    msg.attach(adjunto)
    #enviar
    server = smtplib.SMTP('localhost')
    server.set_debuglevel(1)
    server.sendmail(fromaddr, toaddr, msg.as_string())
    server.quit()
    return

【问题讨论】:

  • 对不起代码的顺序.....不知道为什么会这样!!
  • 下一次,选择您的代码,然后使用带有 {} 的按钮进行格式化。
  • 您在哪里添加您的实际电子邮件信息?
  • 实际上这是我的问题的一部分......我不知道如何添加电子邮件......我发现函数 SENDMAIL 将其作为参数(FROM,TO,MESSAGE)...... .我已经在使用 MESSAGE 参数来发送我要附加的文件....所以我不知道将实际消息放在哪里将是 HTML

标签: python mime-types sendmail


【解决方案1】:

您忘记将文本附加为 msg.attach(MIMEText(text))

def enviarCorreo(fromaddr, toaddr, text, file):
    msg = MIMEMultipart('mixed')
    msg['From'] = fromaddr
    msg['To'] = toaddr
    msg['Subject'] = 'asunto'

    #This is the part you had missed.
    msg.attach( MIMEText(text) )

    #adjunto
    adjunto = MIMEBase('application', "octet-stream")
    adjunto.set_payload( open(file,"rb").read() )
    Encoders.encode_base64(adjunto)
    adjunto.add_header('Content-Disposition', 'attachment; filename="%s"' % os.path.basename(file))
    msg.attach(adjunto)

    server = smtplib.SMTP('localhost')
    server.set_debuglevel(1)
    server.sendmail(fromaddr, toaddr, msg.as_string())
    server.close()

enviarCorreo("x@from.com", ["y@to.com"], "Hello World", ['/tmp/sample.png'])

看看这是否适合你。

【讨论】:

  • 没问题。很高兴我能提供帮助。
  • 如果我想添加纯文本消息,该代码效果很好,但是如果我希望消息是 HTML,我应该更改什么???谢谢!!!
  • @mauguerra 用 msg.attach(MIMEText(text, 'html')) 替换第 8 行
【解决方案2】:

您可能会在email module examples 中找到答案(以及其他有用的想法)。

一个例子似乎使用msg.preamble = "..."作为主要消息文本。

【讨论】:

  • outer.preamble 不会在支持 MIME 的邮件阅读器中显示为文本。该文件提到了这一点。例如苹果邮件。 - 编辑 - 也不适用于 Google WebMail。
  • msg.preamble 到底是做什么的????我尝试使用它,但它停止发送电子邮件
  • docs.python.org/library/… 在这里解释。
猜你喜欢
  • 1970-01-01
  • 2021-07-23
  • 2011-10-07
  • 2012-03-16
  • 1970-01-01
  • 2023-04-01
  • 2014-02-09
  • 2015-01-23
  • 2016-01-11
相关资源
最近更新 更多