带附件的Python Sendmail?

时间:2011-11-25 16:37:13

标签: python mime-types sendmail

我用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

2 个答案:

答案 0 :(得分:3)

您忘记将文字附加为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'])

看看这是否适合你。

答案 1 :(得分:0)

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

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

相关问题