How to send style email in Python3?

I am sending emails with a Python3 script (using smtplib). Currently, I always receive messages in Gmail accounts. But the problem is that I cannot show CSS styles even though they are inline. In addition, even this simple message cannot be sent:

title = 'My title'
msg_content = '<h2>{title}: <font color="green">OK</font></h2>\n'.format(title=title)

However, if I delete two points immediately after {title}, this will work. And if I delete \ n at the end, it will not work again. What for? How can I send such a string in Python3?

title = 'My title'
msg_content = '<h2>{title}: <span style="color: green">OK</span></h2>'.format(title=title)

EDIT

import smtplib

msg_header = 'From: Sender Name <sender@server>\n' \
             'To: Receiver Name <receiver@server>\n' \
             'Cc: Receiver2 Name <receiver2@server>\n' \
             'MIME-Version: 1.0\n' \
             'Content-type: text/html\n' \
             'Subject: Any subject\n'
title = 'My title'
msg_content = '<h2>{title} > <font color="green">OK</font></h2>\n'.format(
    title=title)
msg_full = (''.join([msg_header, msg_content])).encode()

server = smtplib.SMTP('smtp.gmail.com:587')
server.starttls()
server.login('sender@server.com', 'senderpassword')
server.sendmail('sender@server.com',
                ['receiver@server.com', 'receiver@server.com'],
                msg_full)
server.quit()
+4
source share
1 answer

Change after clarification

The result msg_full of your example looks like this:

From: Sender Name <sender@server>
To: Receiver Name <receiver@server>
Cc: Receiver2 Name <receiver2@server>
MIME-Version: 1.0
Content-type: text/html
Subject: Any subject
<h2>My title > <font color="green">OK</font></h2>

E-Mail RFC 2822:

  • CRLF ('\ r\n') , LF (\n ')
  • CRLF (.. ). ''.join([msg_header, msg_body]), . , , .

:

Content-Type: text/html; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
From: Sender Name <sender@server>
To: Receiver Name <receiver@server>
Cc: Receiver2 Name <receiver2@server>
Subject: Any subject

<h2>My title > <font color="green">OK</font></h2>

Python, RFC .

import smtplib
from email.mime.text import MIMEText

title = 'My title'
msg_content = '<h2>{title} > <font color="green">OK</font></h2>\n'.format(title=title)
message = MIMEText(msg_content, 'html')

message['From'] = 'Sender Name <sender@server>'
message['To'] = 'Receiver Name <receiver@server>'
message['Cc'] = 'Receiver2 Name <receiver2@server>'
message['Subject'] = 'Any subject'

msg_full = message.as_string()

server = smtplib.SMTP('smtp.gmail.com:587')
server.starttls()
server.login('sender@server.com', 'senderpassword')
server.sendmail('sender@server.com',
                ['receiver@server.com', 'receiver@server.com'],
                msg_full)
server.quit()

, / , ( HTML- ). email.mime.text:

from email.mime.multipart import MIMEMultipart

message = MIMEMultipart('alternative')
message['From'] = 'Sender Name <sender@server>'
message['To'] = 'Receiver Name <receiver@server>'
message['Cc'] = 'Receiver2 Name <receiver2@server>'
message['Subject'] = 'Any subject'

# 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.
message.attach(part1)
message.attach(part2)

, . , msg_content SMTP.sendmail.

SMTP.sendmail, , .. RFC 5321. (. RFC 2822).

"My title: My title:" . {title}:, ..

HTML, https://docs.python.org/2/library/email-examples.html - /html- MIME- .

+10

Source: https://habr.com/ru/post/1543516/


All Articles