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

Python满足条件触发Office 365邮件无报错但未发送求助

排查Python O365邮件发送无报错但未触发的问题

嘿,我来帮你捋捋这个问题——脚本没报错但邮件没发,这种情况通常是配置细节或者库的隐性要求没满足,而非代码逻辑错误,给你几个排查方向和修正建议:

  • 收件人格式完全无效:你代码里写的'username.com'和'ausername.com.com'都不是合法的邮箱地址,必须是xxx@domain.com这种完整格式。很多邮件库遇到无效收件人时不会抛出错误,只会默默放弃发送请求,这大概率是核心问题。
  • 认证信息不完整:你的o365_auth里用户名是susername.com.com,缺少@domain.com后缀,O365的认证需要完整邮箱作为用户名,虽然没报错,但可能实际认证没通过,导致发送请求被拦截。
  • 方法参数格式不符合库要求:不同的O365邮件库对setRecipients的参数要求可能不一样,比如有些需要传入列表而非元组。你可以试试把收件人改成列表格式:['user1@domain.com', 'user2@domain.com']。
  • 添加调试和异常捕获:很多库会吞掉非致命异常,你可以在发送代码外面套个try-except,看看有没有隐藏错误:
    try:
        m.sendMessage()
        print("邮件发送请求已提交")
    except Exception as e:
        print(f"发送时出现隐藏错误: {str(e)}")
    
  • 检查垃圾邮件文件夹:如果以上都没问题,说不定邮件已经发出去了,但被收件人邮箱归类到垃圾邮件里了,去那边找找看。

给你一个修正后的代码示例,你可以参考调整:

if text > content1:
    # 用完整邮箱作为认证用户名
    o365_auth = ('your-email@your-domain.com', 'your-password')
    m = Message(auth=o365_auth)
    # 传入合法的完整邮箱地址,用列表格式
    m.setRecipients(['recipient1@domain.com', 'recipient2@domain.com'])
    m.setSubject('Data found.')
    m.setBody('New Data found.')
    # 捕获可能的隐藏异常
    try:
        send_status = m.sendMessage()
        print(f"邮件发送状态: {send_status}")
    except Exception as e:
        print(f"发送失败原因: {str(e)}")
elif text == content1:
    print("NO Data found for today.")
else:
    print("Process Complete")

内容的提问来源于stack exchange,提问作者Shashi Shankar Singh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:35:42