【发布时间】:2020-10-12 02:20:02
【问题描述】:
我对 Python 还很陌生,试图帮助自动化工作中的一些事情。我正在尝试使用它在 Excel 电子表格中向过去三个月内与我们一起购买的客户列表发送消息。我有以下内容,但它目前以纯文本形式发送 html 消息。我之前已经设法让它正确发送 html 消息,但无法将使用 pandas 从 excel 中提取数据与发送 html 消息相结合。
非常感谢任何帮助。
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
your_name = "NAME"
your_email = "EMAIL"
your_password = "PASSWORD"
server = smtplib.SMTP('smtp.office365.com', 587)
server.starttls()
server.ehlo()
server.login(your_email, your_password)
email_list = pd.read_excel("python_test.xlsx")
all_names = email_list['Name']
all_emails = email_list['Email']
for idx in range(len(all_emails)):
name = all_names[idx]
email = all_emails[idx]
subject = ‘Subject’
message = MIMEMultipart('mixed')
BODY = html = """\
<html>
Html message goes here
</html>
"""
HTML_BODY = MIMEText(BODY, 'html')
message.attach(HTML_BODY)
full_email = ("From: {0} <{1}>\n"
"To: {2} <{3}>\n"
"Subject: {4}\n\n"
"{5}"
.format(your_name, your_email, name, email, subject, message,))
try:
server.sendmail(your_email, [email], full_email)
print('Email to {} successfully sent!\n\n'.format(email))
except Exception as e:
print('Email to {} could not be sent :( because {}\n\n'.format(email, str(e)))
server.close()
【问题讨论】:
-
您没有收到错误消息吗?你有错误的字符
”最后your_password = "PASSWORD”。甚至 Stackoverflow 也无法突出显示/着色代码,因为这个字符是错误的。 -
Python 应该有特殊的方法来附加 HTML 和纯文本。据我所知,HTML 是作为普通附件发送的,只有邮件客户端/prgrams 将其显示为 HTML。使用
format()放置它不是一个好主意 - 它必须在每个附件之前添加特殊标题,但使用format()手动创建字符串可能你没有添加它。您可以将错误的邮件和正确创建的邮件保存在 .eml 中,然后比较两个版本中的内容 - 您会看到差异。 -
顺便说一句:现在您在
subject = ‘Subject’中遇到了错误字符的问题。这是你的真实代码吗?它给出了错误,因为您再次有错误的字符。