繁体   English   中英

使用 Python 向不同的收件人发送电子邮件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM