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

Python3.7.3带附件发邮件脚本提示发送成功但未实际发信问题求助

Python3 邮件发送失败排查方案
  • 补全缺失导入与语法错误
    你的代码缺少必要模块导入,且MIMEText初始化行存在语法错误(缺少字符串闭合标记和右括号),先在代码开头补充导入逻辑:
    import smtplib
    import os
    from email.mime.multipart import MIMEMultipart
    from email.mime.text import MIMEText
    from email.mime.base import MIMEBase
    from email import encoders
    from smtplib import SMTPException
    
    同时修正正文定义行的语法:
    body = MIMEText("""Please find the updated data in attached csv""")
    
  • 修正SMTP交互逻辑
    这是Python2迁移到Python3后发信失败的核心原因,修改发信段代码如下:
    try:
        server = smtplib.SMTP('localhost',11)
        # 开启调试模式可打印与SMTP服务器的完整交互日志,后续定位问题可打开
        # server.set_debuglevel(1)
        # 手动触发EHLO握手,部分SMTP服务器会拒绝未握手的发信请求
        server.ehlo()
        # 如果你的SMTP服务要求TLS加密,取消下一行注释
        # server.starttls()
        # 收信人参数必须传列表格式:Python3中若传入纯字符串,smtplib会将每个字符识别为独立收件人,导致投递地址完全无效
        server.sendmail(sender, [receivers], msg.as_string())
        # 用quit()替代close(),符合SMTP协议正常退出流程,避免邮件被服务器判定为异常请求丢弃
        server.quit()
        print('Email Sent')
    # 扩大异常捕获范围,打印具体错误,避免非SMTP类异常被忽略
    except Exception as e:
        print(f'Something went wrong: {str(e)}')
    
  • 端口与服务规则校验
    11端口默认属于systat服务,虽然你telnet返回了SMTP响应,请确认Exim服务确实配置为监听11端口,且未限制本地发信IP、发件人地址白名单,开启调试模式后可通过服务器返回的状态码确认拦截原因。
  • 编码兼容校验
    你当前附件用rb模式读取的逻辑符合Python3的二进制数据处理要求,不需要额外调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 13:06:03