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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 02:09:01