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

使用Python win32com发送Outlook自动邮件报对象不支持方法错误

问题描述

通过Python调用win32com接口实现Outlook自动发邮件功能,运行代码时抛出pywintypes.com_error错误,Outlook返回提示 "The object does not support this method."。

原实现代码
import win32com.client
import csv

import csv
with open('D:/Vishal Somal/Python/people.txt', 'r') as file:
    reader = csv.reader(file)
    distro = [row for row in reader]
    #print(distro)
    #for row in reader:
        #print(row)

chunks = [distro[x:+100] for x  in range (0, len(distro), 100)]
outlook = win32com.client.Dispatch('outlook.application')


for chunk in chunks:
    for email in chunk:
        message = outlook.CreateItem(0)
        message.To = email
        print(message.To)
        message.Subject= "Test mail"
        message.Body = "if you received attachment then please reply"
        attachment1 = "D:/Vishal Somal/Python/Autobo/output/ANT_Stock.xlsx"
        attachment2 = "D:/Vishal Somal/Python/Autobo/output/ANT_Transit.xlsx"
        message.Attachments.Add(attachment1)
        message.Attachments.Add(attachment2)
        message.Send()
报错信息
Traceback (most recent call last):
  File "<stdin>", line 4, in <module>
  File "C:\Users\vishals\AppData\Local\Programs\Python\Python310\lib\site-packages\win32com\client\dynamic.py", line 686, in __setattr__
    self._oleobj_.Invoke(entry.dispid, 0, invoke_type, 0, value)
pywintypes.com_error: (-2147352567, 'Exception occurred.', (4096, 'Microsoft Outlook', 'The object does not support this method.', None, 0, -2147352567), None)
问题原因
  • 核心错误:csv.reader逐行读取返回的结果是列表类型(哪怕每行只有一个邮箱地址,返回的也是[xxx@xx.com]格式的单元素列表),代码直接把列表赋值给要求字符串格式的message.To属性,Outlook无法识别参数类型,因此抛出方法不支持的错误。
  • 代码笔误:分片逻辑distro[x:+100]写法错误,正确写法应为distro[x:x+100],原写法会导致分组结果完全不符合预期。
  • 冗余代码:重复导入了两次csv模块。
修复方法
  • 读取联系人文件时,提取每行的第一个元素(即字符串格式的邮箱地址)存入列表,同时跳过空行避免无效参数。
  • 修正分片逻辑的笔误,保证每100个邮箱正确分组。
  • 清理重复导入的冗余代码,可补充附件路径校验逻辑提前排查文件不存在的问题。

修复后可正常运行的代码:

import win32com.client
import csv
import os

# 提前校验附件是否存在
attachment1 = "D:/Vishal Somal/Python/Autobo/output/ANT_Stock.xlsx"
attachment2 = "D:/Vishal Somal/Python/Autobo/output/ANT_Transit.xlsx"
for att_path in [attachment1, attachment2]:
    if not os.path.exists(att_path):
        raise FileNotFoundError(f"缺失附件:{att_path}")

# 读取邮箱地址,转为字符串格式
distro = []
with open('D:/Vishal Somal/Python/people.txt', 'r') as file:
    reader = csv.reader(file)
    for row in reader:
        if row:
            distro.append(row[0].strip())

# 修正分片笔误
chunks = [distro[x:x+100] for x in range(0, len(distro), 100)]
outlook = win32com.client.Dispatch('outlook.application')

for chunk in chunks:
    for email_addr in chunk:
        mail = outlook.CreateItem(0)
        mail.To = email_addr
        print(f"发送邮件至:{email_addr}")
        mail.Subject = "Test mail"
        mail.Body = "if you received attachment then please reply"
        mail.Attachments.Add(attachment1)
        mail.Attachments.Add(attachment2)
        mail.Send()

内容的提问来源于stack exchange,提问作者Vishal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 02:24:21