You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 21:15:34