Python批量生成.msg文件时循环迭代异常问题求助
问题解决思路
你的问题根源在于只创建了一个Outlook邮件对象,循环中反复修改这个对象的内容并保存,最终所有.msg文件都会是最后一次循环的内容,而非每个客户对应独立的邮件。
修正方案
把创建邮件对象的代码mail = outlook.CreateItem(0)移到循环内部,确保每次循环都生成全新的邮件实例,再设置对应内容并保存。
修正后的完整代码
import win32com.client as win32 import datetime # 客户名称列表 customer_names = ['Name1','Name2','Name3'] # 初始化Outlook应用 outlook = win32.Dispatch('outlook.application') # 固定邮件配置(提取到循环外避免重复设置) email_subject = "Request for Customer Information" email_to = "user@emailprovider.net" message_template = "Dear User,\n\nThe information we require from [Customer] is as follows:\n\n- Email Address: [Email Address] \n\nWe kindly request that you send the requested information to us within [number of days] days. \n\n Kind regards." num_days = 7 # 遍历客户生成对应邮件 for customer in customer_names: # 每次循环创建新的邮件对象 mail = outlook.CreateItem(0) # 设置邮件属性 mail.Subject = email_subject mail.To = email_to mail.Importance = 1 # 0=低优先级, 1=普通, 2=高优先级 mail.Sensitivity = 0 # 0=普通, 1=个人, 2=私人, 3=机密 mail.ReadReceiptRequested = True mail.FlagRequest = "Follow up" mail.FlagDueBy = (datetime.date.today() + datetime.timedelta(days=3)).strftime('%m/%d/%Y') # 替换模板占位符 message_content = message_template.replace("[Customer]", customer) message_content = message_content.replace("[number of days]", str(num_days)) mail.Body = message_content # 保存邮件到指定路径 file_name = f"Request_{customer}.msg" file_path = f"C:/Users/user/Desktop/Email/{file_name}" mail.SaveAs(file_path)
额外优化细节
- 直接遍历
customer_names列表,无需通过索引取值,代码更简洁易读 - 将固定配置(如主题、收件人、模板)提取到循环外,减少重复操作
- 使用f-string格式化文件名和路径,语法更直观清晰
内容的提问来源于stack exchange,提问作者Jan
相关产品推荐
相关产品推荐

