如何在Python中使用win32com在邮件正文中添加2个变量?

1 投票
2 回答
2779 浏览
提问于 2025-04-18 14:58

我有一个邮件模板:

def email_tamplate(*args):
Format = { 'UNSPECIFIED' : 0, 'PLAIN' : 1, 'HTML' : 2, 'RTF'  : 3}
profile = "Outlook"
#session = win32com.client.Dispatch("Mapi.Session")
outlook = win32com.client.Dispatch("Outlook.Application")
#session.Logon(profile)
mainMsg = outlook.CreateItem(0)
mainMsg.To = "myemail@amazon.com"  
mainMsg.Subject = "Automated Crap Daily Update"
mainMsg.BodyFormat = Format['RTF']
mainMsg.HTMLBody = body2


mainMsg.Send()  #this line actually sends the email

我想发送一封邮件,邮件内容里有两个表格。所以我有两个内容部分:

这是其中一个:

 eod = []
body2 = ['<html><body><table border="1" style="width:300px"><tr><td>Title Level</td></tr><tr><td>Source</td><td>Count</td></tr>']
header = [['Title Level']]

for row in cur:
    eod.append(row)


count=0
count2=0
for item in eod:
    body2[0]=body2[0]+"<tr><td>"+str(eod[count2][count])+"</td><td>"+str(eod[count2][count+1])+"</td></tr>"
    count2=count2+1

body2[0]=body2[0]+"</table></body></html>"
body2=body2[0]
globals().update(locals())

这是另一个:

eod = []
body = ['<html><body><table border="1" style="width:300px"><tr><td>Previous Day</td></tr><tr><td>Decision_Status</td><td>Count</td></tr>']
header = [['Prev Day']]

for row in cur:
    eod.append(row)



count=0
count2=0
for item in eod:
    body[0]=body[0]+"<tr><td>"+str(eod[count2][count])+"</td><td>"+str(eod[count2][count+1])+"</td></tr>"
    count2=count2+1

body[0]=body[0]+"</table></body></html>"
body=body[0]
globals().update(locals())

这两个内容都是通过不同的数据查询生成的。

所以我想在邮件的内容中发送变量 body 和 body2。

有没有什么好主意可以实现这个?

谢谢!

2 个回答

0

其实不需要两个部分,你可以用 .format() 这个方法,把无限数量的变量放进一个部分里。

举个例子:

text ='some text'
table= pd.DataFrame([1,2,3])

msg.HTMLBody = '''<br>Hello, see this text: 
    <br>{text}<br>and this table:<br>{table}'''.format(text=text, table=table)
2

我刚刚解决了这个问题。其实我只需要把 body 和 body2 连接在一起就行了。

就是这么简单。谢谢你!

撰写回答