如何循环打开一个文本文件并在发送电子邮件时保持打开状态?
How to loop through an open text file and stay open while emails are being sent?
我正在使用 win32com.client 连接到我的 outlook 以定期发送批量电子邮件。
我有一个包含电子邮件正文的文本文档,但当我遍历它时,在第一封电子邮件之后,所有后续电子邮件都是空白的,而不是文本文档:
outlook = win32.Dispatch('outlook.application')
with open(email_txt_doc, 'r') as f:
for company, contacts in contacts_dict.items():
mail = outlook.CreateItem(0)
mail.To = contacts
mail.Subject = 'Recurring Email'
mail.Body = f.read() + '\n\n' + strategies_dict[company]
mail.Attachments.Add(filepath/file.xlsx)
mail.Send()
但是,文本文档 'f' 在第一个循环后停止读入,所有其他电子邮件都是空白的,或者只有我的 strategies_dict
.
的值
示例:
电子邮件 1:
请在 7 月 31 日之前完成 return 下面列出的 strategy/ies 第二季度 RFI。为方便起见,我们附上了我们的三个模板——股票、国际和固定收益。
完成后,请将 RFI 转发给我。如果您有任何问题,请随时与我联系。
提前感谢您的帮助。
Strategy_A1
Strategy_A2
...
Strategy_An
邮箱2:
Strategy_B1
Strategy_B2
...
Strategy_Bn
我该如何解决这个问题?
当您在一个文件上使用 read()
时,它只能使用一次。要解决此问题,请将读取值分配给变量。
with open('yourfile.txt', 'r') as f:
temp = f.read()
Temp 现在等于读取值,可以替换。
我想你可以像这样稍微转动一下线条。您可以阅读邮件正文,然后根据需要在 "with" 语句外的 for 循环中添加公司的个人 strategies_dict。
outlook = win32.Dispatch('outlook.application')
with open(email_txt_doc, 'r') as f:
main_mail_body_from_file = f.read() + '\n\n'
for company, contacts in contacts_dict.items()
mail = outlook.CreateItem(0)
mail.To = contacts
mail.Subject = 'Recurring Email'
mail.Body = main_mail_body_from_file + strategies_dict[company]
mail.Attachments.Add(filepath/file.xlsx)
mail.Send()
我可能会添加一个检查以确保公司在 strategies_dict 和 contacts_dict 中,即使它们都是 defaultdicts,否则承诺的附件可能不会出现。
我正在使用 win32com.client 连接到我的 outlook 以定期发送批量电子邮件。
我有一个包含电子邮件正文的文本文档,但当我遍历它时,在第一封电子邮件之后,所有后续电子邮件都是空白的,而不是文本文档:
outlook = win32.Dispatch('outlook.application')
with open(email_txt_doc, 'r') as f:
for company, contacts in contacts_dict.items():
mail = outlook.CreateItem(0)
mail.To = contacts
mail.Subject = 'Recurring Email'
mail.Body = f.read() + '\n\n' + strategies_dict[company]
mail.Attachments.Add(filepath/file.xlsx)
mail.Send()
但是,文本文档 'f' 在第一个循环后停止读入,所有其他电子邮件都是空白的,或者只有我的 strategies_dict
.
示例:
电子邮件 1:
请在 7 月 31 日之前完成 return 下面列出的 strategy/ies 第二季度 RFI。为方便起见,我们附上了我们的三个模板——股票、国际和固定收益。
完成后,请将 RFI 转发给我。如果您有任何问题,请随时与我联系。
提前感谢您的帮助。
Strategy_A1
Strategy_A2
...
Strategy_An
邮箱2:
Strategy_B1
Strategy_B2
...
Strategy_Bn
我该如何解决这个问题?
当您在一个文件上使用 read()
时,它只能使用一次。要解决此问题,请将读取值分配给变量。
with open('yourfile.txt', 'r') as f:
temp = f.read()
Temp 现在等于读取值,可以替换。
我想你可以像这样稍微转动一下线条。您可以阅读邮件正文,然后根据需要在 "with" 语句外的 for 循环中添加公司的个人 strategies_dict。
outlook = win32.Dispatch('outlook.application')
with open(email_txt_doc, 'r') as f:
main_mail_body_from_file = f.read() + '\n\n'
for company, contacts in contacts_dict.items()
mail = outlook.CreateItem(0)
mail.To = contacts
mail.Subject = 'Recurring Email'
mail.Body = main_mail_body_from_file + strategies_dict[company]
mail.Attachments.Add(filepath/file.xlsx)
mail.Send()
我可能会添加一个检查以确保公司在 strategies_dict 和 contacts_dict 中,即使它们都是 defaultdicts,否则承诺的附件可能不会出现。