Python发送邮件提示Missing local name错误问题求助
错误根因
SMTP 554是SMTP服务返回的投递失败错误码,你遇到的Missing local name分支错误特指邮箱地址格式校验不通过:标准邮箱格式为[本地用户名]@[域名],你传入的发件人或收件人地址缺少@符号前的本地用户名部分。
排查步骤
- 打印你代码中
SENDER变量的值,确认没有多余空格、换行符,完整符合xxx@xx.com格式,不要出现@xx.com、xx@xx.com(前后带空格)这类非法值 - 检查
toaddrs变量的所有值,不管是单个字符串还是地址列表,每一个收件人地址都要符合上述格式要求,尤其是从CSV、接口等外部数据源读取地址时,注意过滤空值、不完整的异常地址 - 校验邮件头中
From、To字段的格式,如果你手动拼接了邮件头,确保地址没有被截断,示例正确格式为From: 发件人名称 <youraddr@example.com>,不要漏掉尖括号内的完整地址
预校验代码示例
你可以在调用server.sendmail前加入以下校验逻辑,提前定位格式错误的地址:
def is_valid_email(addr: str) -> bool: if '@' not in addr: return False local_part, domain_part = addr.split('@', maxsplit=1) return len(local_part.strip()) > 0 and len(domain_part.strip()) > 0 # 校验发件人 assert is_valid_email(SENDER), f"发件人地址格式非法: {repr(SENDER)}" # 校验收件人 if isinstance(toaddrs, (list, tuple)): for addr in toaddrs: assert is_valid_email(addr), f"收件人地址格式非法: {repr(addr)}" else: assert is_valid_email(toaddrs), f"收件人地址格式非法: {repr(toaddrs)}"
如果上述排查都没问题,确认你登录SMTP服务使用的账号和SENDER填写的地址完全一致,部分邮箱服务商禁止使用和登录账号不一致的发件人地址发送邮件。
内容的提问来源于stack exchange,提问作者poppp
相关产品推荐
相关产品推荐

