Ich schreibe einen einfachen smtp-Sender mit Authentifizierung. Hier ist mein Code
SMTPserver, sender, destination = 'smtp.googlemail.com', 'user@gmail.com', ['reciever@gmail.com']
USERNAME, PASSWORD = "user", "password"
# typical values for text_subtype are plain, html, xml
text_subtype = 'plain'
content="""
Hello, world!
"""
subject="Message Subject"
from smtplib import SMTP_SSL as SMTP # this invokes the secure SMTP protocol (port 465, uses SSL)
# from smtplib import SMTP # use this for standard SMTP protocol (port 25, no encryption)
from email.MIMEText import MIMEText
try:
msg = MIMEText(content, text_subtype)
msg['Subject']= subject
msg['From'] = sender # some SMTP servers will do this automatically, not all
conn = SMTP(SMTPserver)
conn.set_debuglevel(False)
conn.login(USERNAME, PASSWORD)
try:
conn.sendmail(sender, destination, msg.as_string())
finally:
conn.close()
except Exception, exc:
sys.exit( "mail failed; %s" % str(exc) ) # give a error message
Es funktioniert perfekt, bis ich versuche, Nicht-Ascii-Symbole (russisches Kyrillisch) zu senden. Wie sollte ich einen Zeichensatz in einer Nachricht definieren, damit er richtig angezeigt wird? Vielen Dank im Voraus!
UPD. Ich habe meinen Code geändert:
text_subtype = 'text'
content="<p> </p>"
msg = MIMEText(content, text_subtype)
msg['From']=sender # some SMTP servers will do this automatically, not all
msg['MIME-Version']="1.0"
msg['Subject']="=?UTF-8?Q? ?="
msg['Content-Type'] = "text/html; charset=utf-8"
msg['Content-Transfer-Encoding'] = "quoted-printable"
…
conn.sendmail(sender, destination, str(msg))
Also, das erste Mal, wenn ich spectify text_subtype = 'text', und dann in der Kopfzeile platziere ich eine msg['Content-Type'] = "text/html; charset=utf-8" String. Ist das richtig?
UPDATE Endlich habe ich mein Nachrichtenproblem gelöst Sie sollten etwas schreiben wie msg = MIMEText(content.encode('utf-8'), 'plain', 'UTF-8')