使用Python win32com可打印邮件但无法转发到指定邮箱是什么原因?
问题排查与修复方案
你的代码存在以下几处错误导致转发失败:
- 核心错误:
message=print(message)赋值逻辑错误。print()函数无返回值,执行后会把原本的邮件对象覆盖为None,后续调用message.Forward()自然无法执行。直接去掉赋值操作,只保留print(message)即可。 - 冗余代码干扰:提前执行的
message=messages.GetLast()没有实际作用,后续遍历会重新给message赋值,可直接删除。 - 发件人判断逻辑不准确:
SenderName存储的是发件人显示名称(通常是真实姓名),不是邮箱地址,判断发件人邮箱应该使用SenderEmailAddress属性,否则匹配条件永远不生效,自然不会执行转发逻辑。 - 缺少异常兼容:如果目标文件夹内存在非邮件类型的对象,遍历时直接调用属性会报错,可增加简单的类型校验。
修复后的完整代码
import win32com.client as client # 初始化Outlook对象 outlook = client.Dispatch('Outlook.Application').GetNamespace("MAPI") # 定位目标文件夹 inbox = outlook.GetDefaultFolder(6).Folders('python test') messages = inbox.Items for message in messages: # 校验对象为邮件类型、发件人匹配指定邮箱 if message.Class == 43 and message.SenderEmailAddress == 'manish.daryani@atos.net': print(message) # 执行转发操作 new_msg = message.Forward() new_msg.Body = "Test message forwarded using python" + new_msg.Body new_msg.Subject = message.Subject new_msg.To = 'Atos-IT-Telco-NOC@atos.net' new_msg.Send() print('Message forwarded')
代码里的message.Class ==43是Outlook对象模型里对邮件类型(olMail)的常量标识,用来过滤非邮件对象避免报错。
内容的提问来源于stack exchange,提问作者Tejshree Bhosale
相关产品推荐
相关产品推荐

