Wie sende ich HTML-Inhalte per E-Mail mit Python? Ich kann einfache Texte verschicken.
Senden Sie HTML-E-Mails mit Python
Hier ist ein Gmail Umsetzung der akzeptierten Antwort:
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
# me == my email address
# you == recipient's email address
me = "[email protected]"
you = "[email protected]"
# Create message container - the correct MIME type is multipart/alternative.
msg = MIMEMultipart('alternative')
msg['Subject'] = "Link"
msg['From'] = me
msg['To'] = you
# Create the body of the message (a plain-text and an HTML version).
text = "Hi!\nHow are you?\nHere is the link you wanted:\nhttp://www.python.org"
html = """\
<html>
<head></head>
<body>
<p>Hi!<br>
How are you?<br>
Here is the <a href="http://www.python.org">link</a> you wanted.
</p>
</body>
</html>
"""
# Record the MIME types of both parts - text/plain and text/html.
part1 = MIMEText(text, 'plain')
part2 = MIMEText(html, 'html')
# Attach parts into message container.
# According to RFC 2046, the last part of a multipart message, in this case
# the HTML message, is best and preferred.
msg.attach(part1)
msg.attach(part2)
# Send the message via local SMTP server.
mail = smtplib.SMTP('smtp.gmail.com', 587)
mail.ehlo()
mail.starttls()
mail.login('userName', 'password')
mail.sendmail(me, you, msg.as_string())
mail.quit()
-
Toller Code, es funktioniert bei mir, wenn ich eingeschaltet habe geringe sicherheit bei google
– Towask
25. Juni 2015 um 12:49 Uhr
-
Ich benutze ein Google anwendungsspezifisches Passwort mit python smtplib hat es funktioniert, ohne auf niedrige Sicherheit gehen zu müssen.
– Jojo
30. Juni 2015 um 22:48 Uhr
-
Für alle, die die obigen Kommentare lesen: Sie benötigen nur dann ein “App-Passwort”, wenn Sie zuvor die Bestätigung in zwei Schritten in Ihrem Gmail-Konto aktiviert haben.
– Mugen
11. Oktober 2018 um 16:21 Uhr
-
Gibt es eine Möglichkeit, etwas dynamisch in den HTML-Teil der Nachricht einzufügen?
– Magma
9. Mai 2020 um 13:59 Uhr
-
Irgendwie scheint nur der letzte angehängte Teil zu funktionieren.
– Zobayer Hasan
28. Juni 2021 um 20:28 Uhr
-
Verwenden Sie als Verbesserung dazu, wenn Sie zusätzlich einen Anhang senden möchten
email.add_alternative()
(genau wie bei diremail.set_content()
um HTML hinzuzufügen, und fügen Sie dann mithilfe von einen Anhang hinzuemail.add_attachment()
(Das hat mich Ewigkeiten gekostet, um es herauszufinden)– Zilbert97
30. Oktober 2020 um 20:26 Uhr
-
Das
EmailMessage
API war erst ab Python 3.6 offiziell verfügbar, wurde aber bereits in 3.3 als Alternative ausgeliefert. Neuer Code sollte dies unbedingt anstelle des alten verwendenemail.message.Message
Legacy-API, die die meisten Antworten hier leider immer noch vorschlagen. Alles mitMIMEText
oderMIMEMultipart
ist die alte API und sollte vermieden werden, es sei denn, Sie haben Legacy-Gründe.– Dreier
8. Februar um 20:53 Uhr
Hier ist eine einfache Möglichkeit, eine HTML-E-Mail zu senden, indem Sie einfach den Content-Type-Header als „text/html“ angeben:
import email.message
import smtplib
msg = email.message.Message()
msg['Subject'] = 'foo'
msg['From'] = '[email protected]'
msg['To'] = '[email protected]'
msg.add_header('Content-Type','text/html')
msg.set_payload('Body of <b>message</b>')
# Send the message via local SMTP server.
s = smtplib.SMTP('localhost')
s.starttls()
s.login(email_login,
email_passwd)
s.sendmail(msg['From'], [msg['To']], msg.as_string())
s.quit()
-
Dies ist eine nette einfache Antwort, praktisch für schnelle und schmutzige Skripte, danke. Übrigens kann man sich einfach auf die akzeptierte Antwort beziehen
smtplib.SMTP()
Beispiel, das tls nicht verwendet. Ich habe dies für ein internes Skript bei der Arbeit verwendet, wo wir ssmtp und einen lokalen Mailhub verwenden. Auch dieses Beispiel fehlts.quit()
.– Mike S
2. September 2015 um 14:42 Uhr
-
“mailmerge_conf.smtp_server” ist nicht definiert … sagt zumindest Python 3.6 …
– ZEE
27. Dezember 2017 um 20:47 Uhr
Sie könnten versuchen, meine zu verwenden Mailer Modul.
from mailer import Mailer
from mailer import Message
message = Message(From="[email protected]",
To="[email protected]")
message.Subject = "An HTML Email"
message.Html = """<p>Hi!<br>
How are you?<br>
Here is the <a href="http://www.python.org">link</a> you wanted.</p>"""
sender = Mailer('smtp.example.com')
sender.send(message)
-
Dies ist eine nette einfache Antwort, praktisch für schnelle und schmutzige Skripte, danke. Übrigens kann man sich einfach auf die akzeptierte Antwort beziehen
smtplib.SMTP()
Beispiel, das tls nicht verwendet. Ich habe dies für ein internes Skript bei der Arbeit verwendet, wo wir ssmtp und einen lokalen Mailhub verwenden. Auch dieses Beispiel fehlts.quit()
.– Mike S
2. September 2015 um 14:42 Uhr
-
“mailmerge_conf.smtp_server” ist nicht definiert … sagt zumindest Python 3.6 …
– ZEE
27. Dezember 2017 um 20:47 Uhr
Hier ist ein funktionierendes Beispiel zum Senden von Nur-Text- und HTML-E-Mails aus Python smtplib
zusammen mit den CC- und BCC-Optionen.
https://varunver.wordpress.com/2017/01/26/python-smtplib-send-plaintext-and-html-emails/
#!/usr/bin/env python
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
def send_mail(params, type_):
email_subject = params['email_subject']
email_from = "[email protected]"
email_to = params['email_to']
email_cc = params.get('email_cc')
email_bcc = params.get('email_bcc')
email_body = params['email_body']
msg = MIMEMultipart('alternative')
msg['To'] = email_to
msg['CC'] = email_cc
msg['Subject'] = email_subject
mt_html = MIMEText(email_body, type_)
msg.attach(mt_html)
server = smtplib.SMTP('YOUR_MAIL_SERVER.DOMAIN.COM')
server.set_debuglevel(1)
toaddrs = [email_to] + [email_cc] + [email_bcc]
server.sendmail(email_from, toaddrs, msg.as_string())
server.quit()
# Calling the mailer functions
params = {
'email_to': '[email protected]',
'email_cc': '[email protected]',
'email_bcc': '[email protected]',
'email_subject': 'Test message from python library',
'email_body': '<h1>Hello World</h1>'
}
for t in ['plain', 'html']:
send_mail(params, t)
-
Denken Sie, diese Antwort deckt alles ab. Tolle Verbindung
– StachelMantis
24. Oktober 2017 um 17:02 Uhr
Nur eine fette Warnung. Wenn Sie nicht-ASCII E-Mail mit Python < 3.0, erwägen Sie die Verwendung von E-Mail in Django. Es wickelt UTF-8 Zeichenfolgen richtig und ist auch viel einfacher zu bedienen. Du wurdest gewarnt 🙂
– Anders Rune Jensen
14. Dezember 2009 um 14:42 Uhr
Wenn Sie ein HTML mit Unicode senden möchten, siehe hier: stackoverflow.com/questions/36397827/…
– Güttli
11. April 2016 um 10:53 Uhr