Отправка HTML-письма с помощью Python

Как я могу отправить содержимое HTML в электронном письме с помощью Python? Я могу отправить простой текст.

    8 Solutions collect form web for “Отправка HTML-письма с помощью Python”

    Из документации Python v2.6.2 – 19.1.11. email: Примеры :

    Вот пример того, как создать HTML-сообщение с альтернативной текстовой версией:

    #! /usr/bin/python import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText # me == my email address # you == recipient's email address me = "my@email.com" you = "your@email.com" # 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. s = smtplib.SMTP('localhost') # sendmail function takes 3 arguments: sender's address, recipient's address # and message to send - here it is sent as one string. s.sendmail(me, you, msg.as_string()) s.quit() 

    Вы можете попробовать использовать модуль моей почтовой программы .

     from mailer import Mailer from mailer import Message message = Message(From="me@example.com", To="you@example.com") 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) 

    Вот реализация Gmail принятого ответа:

     import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText # me == my email address # you == recipient's email address me = "my@email.com" you = "your@email.com" # 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() 

    Вот простой способ отправить HTML-адрес электронной почты, просто указав заголовок Content-Type как «text / html»:

     import email.message import smtplib msg = email.message.Message() msg['Subject'] = 'foo' msg['From'] = 'sender@test.com' msg['To'] = 'recipient@test.com' msg.add_header('Content-Type','text/html') msg.set_payload('Body of <b>message</b>') s = smtplib.SMTP(mailmerge_conf.smtp_server) s.starttls() s.login(email_login, email_passwd) s.sendmail(msg['From'], [msg['To']], msg.as_string()) 

    Вот пример кода. Это вдохновляет код, найденный на сайте Cookbook Python (не удается найти точную ссылку)

     def createhtmlmail (html, text, subject, fromEmail): """Create a mime-message that will render HTML in popular MUAs, text in better ones""" import MimeWriter import mimetools import cStringIO out = cStringIO.StringIO() # output buffer for our message htmlin = cStringIO.StringIO(html) txtin = cStringIO.StringIO(text) writer = MimeWriter.MimeWriter(out) # # set up some basic headers... we put subject here # because smtplib.sendmail expects it to be in the # message body # writer.addheader("From", fromEmail) writer.addheader("Subject", subject) writer.addheader("MIME-Version", "1.0") # # start the multipart section of the message # multipart/alternative seems to work better # on some MUAs than multipart/mixed # writer.startmultipartbody("alternative") writer.flushheaders() # # the plain text section # subpart = writer.nextpart() subpart.addheader("Content-Transfer-Encoding", "quoted-printable") pout = subpart.startbody("text/plain", [("charset", 'us-ascii')]) mimetools.encode(txtin, pout, 'quoted-printable') txtin.close() # # start the html subpart of the message # subpart = writer.nextpart() subpart.addheader("Content-Transfer-Encoding", "quoted-printable") # # returns us a file-ish object we can write to # pout = subpart.startbody("text/html", [("charset", 'us-ascii')]) mimetools.encode(htmlin, pout, 'quoted-printable') htmlin.close() # # Now that we're done, close our writer and # return the message body # writer.lastpart() msg = out.getvalue() out.close() print msg return msg if __name__=="__main__": import smtplib html = 'html version' text = 'TEST VERSION' subject = "BACKUP REPORT" message = createhtmlmail(html, text, subject, 'From Host <sender@host.com>') server = smtplib.SMTP("smtp_server_address","smtp_port") server.login('username', 'password') server.sendmail('sender@host.com', 'target@otherhost.com', message) server.quit() 

    Фактически, yagmail принял несколько иной подход.

    Он по умолчанию отправит HTML, с автоматическим возвратом для неспособных читателей электронной почты. Это уже не XVII век.

    Конечно, это можно переопределить, но здесь говорится:

     import yagmail yag = yagmail.SMTP("me@example.com", "mypassword") html_msg = """<p>Hi!<br> How are you?<br> Here is the <a href="http://www.python.org">link</a> you wanted.</p>""" yag.send("to@example.com", "the subject", html_msg) 

    Для инструкций по установке и многих других замечательных функций посмотрите на github .

    Вот мой ответ для AWS, используя boto3

      subject = "Hello" html = "<b>Hello Consumer</b>" client = boto3.client('ses', region_name='us-east-1', aws_access_key_id="your_key", aws_secret_access_key="your_secret") client.send_email( Source='ACME <do-not-reply@acme.com>', Destination={'ToAddresses': [email]}, Message={ 'Subject': {'Data': subject}, 'Body': { 'Html': {'Data': html} } } 

    Ниже приведен рабочий пример отправки текстовых и HTML-писем из Python с использованием smtplib вместе с параметрами CC и BCC.

    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 = "from_email@domain.com" 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': 'to_email@domain.com', 'email_cc': 'cc_email@domain.com', 'email_bcc': 'bcc_email@domain.com', 'email_subject': 'Test message from python library', 'email_body': '<h1>Hello World</h1>' } for t in ['plain', 'html']: send_mail(params, t) 
     
    Interesting Posts for Van-Lav

    как установить значения в строки столбца с логической фильтрацией данных

    Горизонтальное масштабирование ноутбука Ipython

    Обнаружение рабочей станции / Блокировка экрана системы с помощью Python (ubuntu)

    Как поддерживать долгоживущие проекты python по зависимостям и версиям python?

    python asyncore отслеживает клиентов

    matplotlib colorbar чередующиеся верхние нижние метки

    Использование инструкции python с инструкцией с блоком try-except

    В python, почему чтение из массива происходит медленнее, чем чтение из списка?

    pcap наносекунды Python

    Почему перестановка моей проверки в Keras меняет производительность моей модели?

    Проблема с запуском python / matplotlib в фоновом режиме после завершения сеанса ssh

    UnicodeEncodeError: кодек ascii не может кодировать символы

    ImportError: переменная среды DjANGO_SETTINGS_MODULE не определена

    XLWT несколько стилей

    Vim автоматически удаляет отступы в комментариях Python

    Python - лучший язык программирования в мире.