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

Python smtplib发邮件时input输入参数导致邮件头显示异常

问题原因
  • 所有通过input()交互获取的字符串、readlines()读取的收件人地址,默认会携带首尾空白、末尾换行符等不可见字符,这些字符被写入邮件头字段(发件人、收件人、主题)后,会破坏邮件头的标准结构,导致客户端解析字段异常
  • 端口号通过input()获取到的是字符串类型,而smtplib.SMTP的port参数要求传入整型,类型不匹配也会引发传输过程的异常,间接导致邮件字段显示错误
  • 未对输入内容做合法性校验,非法格式的邮箱地址、包含控制字符的主题,都会导致邮件头解析失败
解决方法
  1. 所有输入获取的参数都调用strip()方法清除首尾不可见字符,端口号显式转为整型:
import smtplib
import getpass
from email.message import EmailMessage

fileMail = input("\nEnter the file : ").strip()
sub = input("\nEnter email subject : ").strip()
smtpServer = input("\nEnter smtp server address : ").strip()
# 端口转整型
smtpPort = int(input("\nEnter smtp port number : ").strip())
myEmail = input("\n\nEnter your Email address : ").strip()
myEmailPasswd = getpass.getpass()

try:
    mailContent = input("\nEnter email content (Please enter the ^C to end) :")
    while 1:
        mailContent += "\n" + input(">")
except KeyboardInterrupt:
    print("\n\n")

with open(fileMail, "r") as f:
    for emailAddr in f.readlines():
        # 清除收件人地址的换行与空白,过滤空行
        emailAddr = emailAddr.strip()
        if not emailAddr:
            continue
        email = EmailMessage()
        email['from'] = myEmail
        email['to'] = emailAddr
        email['subject'] = sub
        email.set_content(mailContent)
        with smtplib.SMTP(host=smtpServer, port=smtpPort) as smtp:
            smtp.ehlo()
            smtp.starttls()
            smtp.login(myEmail, myEmailPasswd)
            smtp.send_message(email)
            print(f'\n[✔️]Email was sent => {emailAddr}')
  1. 如果主题包含中文或特殊符号,可显式指定编码避免乱码:
from email.header import Header
email['subject'] = Header(sub, 'utf-8')
  1. 可增加简单的参数校验逻辑,比如用正则判断邮箱地址格式是否合法,避免无效参数传入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 05:57:02