Dies ist ein seltsames Problem, das mich seit den letzten 2 Tagen nervt. Ich schrieb eine einfache Mail-Funktion, die smtplib verwendet, um E-Mails mit Bild als Anhang zu senden.Der Versuch, eine Mail mit Hilfe von smtplib in Python zu senden. Mail Körper kommt mit Betreff Zeile
Das Problem ist der Körperteil wird mit der Betreffzeile verkettet. Wenn ich keine MIME-Nachricht und nur eine Zeichenfolge verwende, werden sie korrekt getrennt. Aber normale Zeichenketten erlauben keine Bildanhänge.
Irgendwelche Bibliothek, die ich hier vermisse?
Bitte den Code unten:
# -*- coding: utf-8 -*-
"""
Created on Tue Jun 14 20:08:00 2016
@author: HOME
"""
import smtplib
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import base64
import time
import datetime
print str(datetime.datetime.now())
def send_mail(pwd):
password = base64.b64decode(pwd)
# in the prod system, ask the mail exchange server and port
server = smtplib.SMTP('smtp.gmail.com:587')
server.ehlo()
server.starttls()
server.login('[email protected]', password)
msg = MIMEMultipart()
body = "\nThe message body is this one. Thanks \n\n"
subject = "Your daily digest " + str(datetime.datetime.now())
msg['From'] = "[email protected]"
msg['To'] = "[email protected]"
# I was hoping that creating a string in the subject should parse for newline and automatically pick the 2nd line onwards as body
# If I send mail using the commented code (line 46 t0 line 52), the subject and body are different. But I am unable to attach images
# but if i use the MIMEMultipart message , then i can attach images, but the body comes in the subject line
msg['Subject'] = "\r\n".join([subject,"",body])
#msg.attach(MIMEText(body,'text'))
msg.preamble = 'Daily Updates'
"""
msg = "\r\n".join([
"From: [email protected]",
"To: [email protected]",
"Subject: Daily digest " + str(datetime.datetime.now()),
"",
"Good Morning, How are you ? "
])
"""
# Image attachment code
fp = open("D://sample.png",'rb')
img = MIMEImage(fp.read())
msg.attach(img)
print msg
#try:
server.sendmail('[email protected]','[email protected]',msg.as_string())
print "Mail send successfully to [email protected]"
server.close()
#except:
# print "Mail not sent"
if __name__ == '__main__':
pwd = base64.b64encode('howdy')
send_mail(pwd)