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

Python在数据框中循环,在outlook电子邮件中插入不同的收件人、标题和电子邮件内容,python,pandas,dataframe,email,outlook,Python,Pandas,Dataframe,Email,Outlook,我有一个数据帧(df),每列的值如下所示: 如何基于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=TROG

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

如何基于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")


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']=='class3']
发送者donotreply@outlook.com'
收件人=TROGY['Owner']——按df['Owning']和df['Type']分组
主题='XXX,yyyy当天的突出显示'
XXX指df[“拥有”]
yyyy指df['Type']
msg=MIMEMultipart('alternative')
msg['Subject']=主语
msg['From']=发件人
msg['To']=','.加入(收件人)
正文=(“”“\
转化
亲爱的转换所有者,以下是当天的亮点。
第二类
{0}
第三类
{1}
“.”格式(TROGY_21C2_Block.to_html(),TROGY_21C3.to_html())
附加(MIMEText(body,'html'))
尝试:
smtpObj=smtplib.SMTP('relay.xx.com','xx')
smtpObj.sendmail(发件人、收件人、msg.as_string())
打印(“已成功发送emai”)
smtpObj.quit()
除了smtplib.SMTPException:
打印(“错误:无法发送电子邮件”)
期望的结果将是总共发送5封电子邮件给“所有者”栏中指定的收件人,邮件标题不同

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

收件人:Kent,lili

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

收件人:肯特

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

收件人:bose

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

收件人:Nikki

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

收件人:gaddam

您可以使用pandas和
[“拥有”,“键入”]
作为参数。然后,在
g[“所有者”]
上使用
to_list()
创建收件人列表。对于主题文本,您可以使用返回
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