Python Sendmail с вложением? - PullRequest
       16

Python Sendmail с вложением?

3 голосов
/ 25 ноября 2011

Я программирую на 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 ]

3 голосов
/ 25 ноября 2011

Вы забыли прикрепить текст как msg.attach (MIMEText (текст))

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'])

Проверьте, работает ли это для вас.

0 голосов
/ 25 ноября 2011

Вы можете найти ответ (и дополнительные полезные идеи) в примерах модуля электронной почты .

Один из примеров использует msg.preamble = "..." для основного текста сообщения.

...