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

使用Python发送带Excel附件的Outlook邮件报错,求解决方案

问题排查与修复

错误原因分析

TypeError: an integer is required (got type str) 出现在open(excel_file)行,核心原因及附带问题如下:

  • 内置open函数被其他同名函数覆盖(比如从第三方库导入了要求第一个参数为整数的open函数);
  • SMTP连接配置错误:smtplib.SMTP_SSL对应端口应为465,587是SMTP配合starttls()使用的端口;
  • 附件文件名传了全路径,收件人会看到冗长的路径名,体验不佳。

修复后的完整代码

import smtplib
from email.message import EmailMessage
import os
import builtins

# 配置邮箱信息
SENDER_EMAIL = "your_outlook_email@outlook.com"
APP_PASSWORD = "your_app_password"
recipient_email = "recipient@example.com"
subject = "测试邮件"
content = "这是带有Excel附件的测试邮件"
excel_file = r'D:\vvvv\bbbb\aaaa\xxxx\abc.xlsx'

def send_mail_with_excel(recipient_email, subject, content, excel_file):
    msg = EmailMessage()
    msg['Subject'] = subject
    msg['From'] = SENDER_EMAIL
    msg['To'] = recipient_email
    msg.set_content(content)

    # 强制使用Python内置open函数,避免被覆盖
    with builtins.open(excel_file, 'rb') as f:
        file_data = f.read()
    
    # 提取纯文件名作为附件显示名
    filename = os.path.basename(excel_file)
    # 使用标准xlsx MIME类型
    msg.add_attachment(file_data, 
                       maintype="application", 
                       subtype="vnd.openxmlformats-officedocument.spreadsheetml.sheet", 
                       filename=filename)

    # 修正SMTP连接:587端口配合starttls加密
    with smtplib.SMTP('smtp-mail.outlook.com', 587) as smtp:
        smtp.starttls()
        smtp.login(SENDER_EMAIL, APP_PASSWORD)
        smtp.send_message(msg)

send_mail_with_excel(recipient_email, subject, content, excel_file)

关键修复点说明

  1. 锁定内置open函数:
    显式调用builtins.open,彻底避免第三方库同名函数的干扰,确保文件读取正常。

  2. 修正SMTP连接方式:

    • 若偏好SMTP_SSL,可改用465端口:
      with smtplib.SMTP_SSL('smtp-mail.outlook.com', 465) as smtp:
          smtp.login(SENDER_EMAIL, APP_PASSWORD)
          smtp.send_message(msg)
      
    • 587端口配合starttls()是更通用的加密连接方式,兼容性更好。
  3. 优化附件显示:
    用os.path.basename提取纯文件名,收件人看到的附件名会是abc.xlsx而非完整路径。

  4. 标准MIME类型:
    使用vnd.openxmlformats-officedocument.spreadsheetml.sheet作为xlsx文件的MIME子类型,确保邮件客户端正确识别附件格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 12:32:01