Python在数据框中循环,在outlook电子邮件中插入不同的收件人、标题和电子邮件内容

2024-05-23 18:53:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧(df),每列的值如下所示:

Example of Dataframe

如何基于df['Owning']和df['Type']中的唯一值循环遍历pandas数据帧,并将其分离到具有不同所有者和抄送列表的不同Outlook电子邮件中

下面是为一种“拥有”类型发送的代码


TROGY=df[df['Owning']=='TROGY']

TROGY_21=TROGY[[TROGY['Type']=='210s']

TROGY_22=TROGY[[TROGY['Type']=='220s']

TROGY_21C2=TROGY_21[TROGY_21['CLASS']=='CLASS 2']

TROGY_21C3=TROGY_21[TROGY_21['CLASS']=='CLASS 3']

TROGY_22C2=TROGY_22[TROGY_22['CLASS']=='CLASS 2']

TROGY_22C3=TROGY_22[TROGY_22['CLASS']=='CLASS 3']



sender = 'donotreply@outlook.com'

recipient = TROGY['Owner'] ---- group by df['Owning'] and df['Type'] 

subject = 'Highlight For the Day XXX, YYYYY'



XXX referring to df['Owning']

YYYYY referring to df['Type'] 



msg = MIMEMultipart('alternative')

msg['Subject'] = subject

msg['From'] = sender

msg['To'] = ','.join(recipient)


body = ("""\

<html>

  <head></head><h2 align=center>CONVERSION</h2>

  <body>

         <div>Dear Conversion Owners, below is the highlight for the day.</div>

  Class 2

    {0}

  Class 3

    {1}

  </body>

</html>


""".format(TROGY_21C2_Block.to_html(),TROGY_21C3.to_html()))


msg.attach(MIMEText(body, 'html'))

try:
   smtpObj = smtplib.SMTP('relay.xx.com', 'xx')

   smtpObj.sendmail(sender, recipient, msg.as_string()) 
        
   print ("Successfully sent emai")

   smtpObj.quit()

except smtplib.SMTPException:

   print ("Error: unable to send email")

期望的结果将是总共发送5封电子邮件给“所有者”栏中指定的收件人,邮件标题不同

电子邮件1标题:“21世纪特洛伊之日的亮点”

收件人:Kent,lili

电子邮件2标题:“220年代特洛伊的一天亮点”

收件人:肯特

电子邮件3标题:“21世纪PHM当天的亮点”

收件人:bose

电子邮件4标题:“21世纪融合日亮点”

收件人:Nikki

电子邮件5标题:“当天亮点融合,220s”

收件人:加达姆


Tags: to亮点标题df电子邮件htmltypebody
1条回答
网友
1楼 · 发布于 2024-05-23 18:53:53

您可以使用带有["Owning", "Type"]的pandasgroupby作为参数。之后,使用to_list()over g["Owner"]创建收件人列表。对于主题文本,您可以使用groupby函数的返回,该函数是所使用的每个列的组的名称

输入sample.csv

ID,Owning,CLASS,Type,Owner,CC list
GD8235,TROGY,CLASS 2,210s,Kent,John
GD8298,TROGY,CLASS 3,210s,Lili,Ricky
GD8238,PHM,CLASS 3,210s,Bose,Ricky
GD8239,FUSION,CLASS 3,220s,Gaddam,Edmund
GD8240,TROGY,CLASS 2,220s,Kent,John
GD8243,FUSION,CLASS 2,210s,Nikki,John
import pandas as pd

df = pd.read_csv("sample.csv")
print(df)

groups = df.groupby(["Owning", "Type"])
for n, g in groups:
    recipient = ", ".join(g["Owner"].to_list())
    subject = f'Highlight For the Day {n[0]}, {n[1]}'

    print(f"Title: {subject}")
    print(f"Recipient: {recipient}")
Title: Highlight For the Day FUSION, 210s
Recipient: Nikki
Title: Highlight For the Day FUSION, 220s
Recipient: Gaddam
Title: Highlight For the Day PHM, 210s
Recipient: Bose
Title: Highlight For the Day TROGY, 210s
Recipient: Kent, Lili
Title: Highlight For the Day TROGY, 220s
Recipient: Kent

相关问题 更多 >