在 python 中使用 smtplib 邮寄彩色 HTML

Mailing colored HTML using smtplib in python

我有一个 HTML 文件,它本质上是一个 table。然而,table 中的一些单元格被突出显示,当我将我的 HTML 文件转换为 other Whosebug answers 中指定的文本时,单元格的颜色和其他 CSS 规范消失了在邮件中。

代码:

import smtplib
import csv
from tabulate import tabulate
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

text = open("final.html", 'r').read()
message = MIMEMultipart(
    "alternative", None, [MIMEText(text), MIMEText(text,'html')])

server = smtplib.SMTP('smtp.gmail.com', 25)
server.connect("smtp.gmail.com",25)
server.ehlo()
server.starttls()
server.ehlo()
server.login('mail', "password")

server.sendmail('from_mail', 'to_mail', message.as_string())
server.quit()

最后,消息被转换为字符串,如message.as_string()。我想当消息被转换成字符串时,CSS 格式化选项被拿走了。

HTML 输入文件:

final.html file

邮件中的当前输出:

如有任何帮助,我们将不胜感激。非常感谢!

首先,大多数电子邮件客户端不支持邮件中的外部 CSS。这可以转换为 Inline CSS with premailer.

import smtplib
import ssl
import premailer
from email.message import EmailMessage

SERVER_ADDRESS = "smtp.gmail.com"  
SERVER_PORT = 587
EMAIL_ADDRESS = 'your email'
EMAIL_PASSWORD = 'your email password'
RECIPIENT_EMAIL = 'recipient's mail'

text = open("final.html", 'r').read()
text = premailer.transform(text)

msg = EmailMessage()
msg['Subject'] = "the subject"
msg['From'] = EMAIL_ADDRESS
msg['To'] = RECIPIENT_EMAIL

msg.set_content('content')
msg.add_alternative(text, subtype='html')

# Create a SSLContext object with default settings.
context = ssl.create_default_context()

with smtplib.SMTP(SERVER_ADDRESS, SERVER_PORT) as smtp:
    smtp.ehlo()  
    smtp.starttls(context=context)  
    smtp.ehlo()
    smtp.login(EMAIL_ADDRESS, EMAIL_PASSWORD)
    smtp.send_message(msg)  

github repo 很有帮助。