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
相关产品推荐
相关产品推荐

