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

树莓派+SIM800L发送邮件报错SMTPSEND:61-网络错误求助

树莓派+SIM800L发邮件失败的排查与解决

结合你提供的代码和模块在Arduino上正常的情况,问题大概率出在树莓派的串口配置、AT指令流程或Gmail权限上,以下是针对性排查步骤:

一、先获取完整的AT指令反馈

你的sendCommand函数只读取80字节返回,会截断SIM800L的错误提示,先修改函数获取全量返回,这是排查核心:

def sendCommand(command):
    smd = command + '\r\n'
    ser.write(smd.encode('ascii'))
    time.sleep(1)
    # 读取所有返回内容直到超时
    response = ''
    while ser.in_waiting > 0:
        response += ser.readline().decode('ascii').rstrip() + '\n'
    print(f"指令: {command}\n返回:\n{response}")

运行后重点看AT+SMTPSEND的返回,SIM800L会返回具体错误码(比如ERROR:535是认证失败,ERROR:100是网络未连通)。

二、补全GPRS承载激活流程

你只配置了承载类型,缺少APN设置和承载激活步骤,必须补充:

  1. 设置运营商APN(移动填CMNET,联通填UNINET,电信填CTNET):
sendCommand('AT+SAPBR=3,1,"APN","CMNET"')  # 替换为你的运营商APN
  1. 激活并检查承载状态:
sendCommand('AT+SAPBR=1,1')  # 激活承载1
sendCommand('AT+SAPBR=2,1')  # 检查状态,正常会返回OK和分配的IP地址

只有承载激活成功,才能进行后续SMTP操作。

三、修正AT指令格式错误

代码中部分指令的参数未加双引号,会导致解析失败,修改以下两行:

# 原错误格式
# sendCommand('AT+SMTPAUTH=1,"{}",{}'.format(USERNAME,PASSWORD))
# sendCommand('AT+SMTPFROM="{}",{}'.format(USERNAME,FROM))

# 修改后格式
sendCommand('AT+SMTPAUTH=1,"{}","{}"'.format(USERNAME,PASSWORD))
sendCommand('AT+SMTPFROM="{}","{}"'.format(USERNAME,FROM))

确保所有字符串类型的参数都用双引号包裹。

四、解决Gmail SMTP权限限制

Gmail默认禁止普通密码登录SMTP,需二选一操作:

  1. 开启两步验证,创建应用专用密码,用该密码替换代码中的PASSWORD;
  2. 若不开启两步验证,需在谷歌账号设置中开启不太安全的应用访问(谷歌默认关闭,需手动开启)。

五、检查树莓派串口配置

树莓派默认串口可能被蓝牙占用或未启用:

  1. 打开raspi-config,进入Interface Options -> Serial Port,关闭串口控制台,启用串口硬件;
  2. 重启后用ls -l /dev/serial*确认/dev/serial0指向硬件串口;
  3. 确保SIM800L供电充足(至少5V 2A),接线正确:树莓派TX接模块RX,RX接模块TX,GND共地。

六、补充邮件正文设置

你只设置了邮件主题,缺少正文,需在AT+SMTPSEND前添加:

sendCommand('AT+SMTPBODY="这是从树莓派发送的邮件正文"')

按以上步骤逐一排查,先通过全量返回找到具体错误,再针对性解决。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 08:47:50