[英]Sending E-Mail to various recipients with Python
我想使用代码中的给定表格向各种收件人(如 10 人)发送 email,但邮件仅到达第一个邮件地址。 有没有办法编码它,我可以将 email 发送给各种收件人?
df = pd.DataFrame(Table)
filename = str(date.today()) + ".png"
#dir = pathlib.Path(__file__).parent.absolute()
folder = r"/results/"
#path_plot = str(dir) + folder + filename
from_mail = "abcdef@gmail.com"
from_password = cred.passwort
to_mail = 'example1@hotmail.com,example2@live.com, example2@yahoo.com, example2@yahoo.de'
smtp_server = "smtp.gmail.com"
smtp_port = 465
def send_email( smtp_server, smtp_port, from_mail, from_password, to_mail):
'''
Send results via mail
'''
msg = MIMEMultipart()
msg['Subject'] = 'Results'
msg['From'] = from_mail
COMMASPACE = ', '
msg['To'] = COMMASPACE.join([from_mail, to_mail])
msg.preamble = 'Something special'
html = """\
<html>
<head></head>
<body>
{0}
</body>
</html>
""".format(df.to_html())
part1 = MIMEText(html, 'html')
msg.attach(part1)
server = smtplib.SMTP_SSL(smtp_server, smtp_port)
server.ehlo()
server.login(from_mail, from_password)
server.sendmail(from_mail, [from_mail, to_mail], msg.as_string())
server.quit()
send_email( smtp_server, smtp_port, from_mail, from_password, to_mail)
如果要发送给多个收件人,则to_addr
参数应该是字符串列表。
您的代码中的直接问题是您正在将from_addr
与(字符串或列表) to_addr
其中,您应该在其中创建一个列表以放入收件人字段中。
顺便说一句,您的代码似乎是为 Python 3.5 或更早版本编写的。 email
库在 3.6 中进行了大修,现在更加通用和合乎逻辑。 可能扔掉你所拥有的,然后从email
文档中的示例重新开始。 这是一个基本的重构(只是快速而肮脏;结构相当奇怪 - 为什么您将一些字符串作为参数传递,而其他是 function 之外的全局变量?)。 它消除了代码中的一些问题,仅仅是因为现代 API 删除了许多旧版本所必需的样板。
import pandas as pd # I'm guessing ...?
from email.message import EmailMessage
...
df = pd.DataFrame(Table)
# Commenting out unused variables
# filename = str(date.today()) + ".png"
# folder = "/results/" # no need for an r string, no backslashes here
from_mail = "abcdef@gmail.com"
from_password = cred.passwort
to_mail = ['example1@hotmail.com', 'example2@live.com', 'example2@yahoo.com', 'example2@yahoo.de']
smtp_server = "smtp.gmail.com"
smtp_port = 465
def send_email(smtp_server, smtp_port, from_mail, from_password, to_mail):
'''
Send results via mail
'''
msg = EmailMessage()
msg['Subject'] = 'Results'
msg['From'] = from_mail
msg['To'] = ', '.join(to_mail + [from_mail])
# Don't muck with the preamble, especially if you don't understand what it is
html = """\
<html>
<head></head>
<body>
{0}
</body>
</html>
""".format(df.to_html())
message.set_contents(html, 'html')
with smtplib.SMTP_SSL(smtp_server, smtp_port) as server:
server.ehlo()
server.login(from_mail, from_password)
# Some servers require a second ehlo() here
# Use send_message instead of legacy sendmail method
server.send_message(message)
server.quit()
send_email(smtp_server, smtp_port, from_mail, from_password, to_mail)
生成的 HTML 仍然很可怕,但我们只希望没人看消息源。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.