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

Python用smtplib.sendmail向T-Mobile手机号发短信末尾出现冗余字符

问题解决方案

问题根源

冗余字符出现的核心原因是手动拼接的SMTP邮件格式不符合规范,T-Mobile的短信网关解析异常:

  • 标准SMTP消息要求头部字段和正文内容之间必须用两个连续的\r\n分隔,当前代码没有这个分隔符,网关解析头部时会把内容边界识别错误,生成冗余字符
  • 你把短信内容直接写在了Subject头部字段中,没有设置单独的正文部分,短信网关对这种不标准的结构会做额外转义处理
  • sendmail的from_addr参数填写了手机号而非合法的发件邮箱地址,也会增加网关解析异常概率

修复方案

最小修改现有代码的版本

仅调整消息拼接逻辑、补充头部分隔符、把内容放在正文位置、修正发件人参数即可:

import smtplib

server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
# 注意Gmail现在需要使用应用密码登录,不能直接用账号原始密码
server.login(my_username, my_password)
# 头部结束后加两个\r\n分隔正文,Subject可以留空
message = ("From: my_email@gmail.com\r\n" +
           "To: 123456789@tmomail.net\r\n" +
           "Subject: \r\n\r\n" +
           "this is the body")
# from_addr填实际发件邮箱,和头部From保持一致
server.sendmail(from_addr='my_email@gmail.com',
                to_addrs='123456789@tmomail.net',
                msg=message)
server.quit()

更稳妥的标准实现(推荐)

使用Python内置的email模块生成标准格式邮件,避免手动拼接字符串的格式错误:

import smtplib
from email.message import EmailMessage

msg = EmailMessage()
msg['From'] = 'my_email@gmail.com'
msg['To'] = '123456789@tmomail.net'
# 短信不需要主题,可以留空
msg['Subject'] = ''
# 正文直接填短信内容
msg.set_content('this is the body')

server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login(my_username, my_password)
server.send_message(msg)
server.quit()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 17:27:00