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

使用smtplib发送邮件时收件人被归入BCC列表,无法接收邮件求助

使用smtplib发送Outlook邮件时收件人异常的问题排查

嘿,我帮你找到了问题的核心——你没有在邮件内容里明确指定To(收件人)头信息,这才导致Outlook把收件人识别成BCC,而且收件人收不到邮件。咱们来详细拆解下:

问题根源

你当前的代码里,sendmail方法虽然指定了收件人,但邮件本身的内容里只有Subject和正文,缺少了To这个核心头字段。SMTP协议中,sendmail的参数是告诉服务器要投递的地址,但邮件内容里必须包含对应的头信息,否则邮件客户端(比如Outlook)会无法正确解析收件人,甚至服务器可能会判定这封邮件不规范,直接拦截或者放到垃圾邮件池里。

另外你代码里的Subject: Mail test .多了个多余的空格,虽然不是主要问题,但顺手修正下会更规范。

修复后的代码示例

我给你调整了代码,主要就是补上了To头,同时优化了代码的可读性:

import smtplib

# 先把配置信息单独提取,方便后续修改
sender_email = "user1@outlook.com"
receiver_email = "user2@outlook.com"
password = "pass"

# 构建符合标准格式的邮件内容:头信息+空行+正文
mail_content = f"""To: {receiver_email}
Subject: Mail test

Email's BODY text

Your :: Signature/Initials
"""

try:
    # 连接SMTP服务器并完成发送流程
    server = smtplib.SMTP('smtp-mail.outlook.com', 587)
    server.ehlo()
    server.starttls()
    server.login(sender_email, password)
    server.sendmail(sender_email, receiver_email, mail_content)
    print("邮件发送成功啦!")
except Exception as e:
    print(f"发送失败:{str(e)}")
finally:
    server.quit()

额外注意事项

  • 如果你的Outlook账号开启了两步验证,直接用原密码登录会失败,需要去微软账户后台生成应用专用密码来替代登录密码
  • 邮件头信息的格式要严格遵守:每个头字段(To、Subject)单独占一行,头信息和正文之间必须空一行,这是邮件的标准格式要求
  • 如果需要添加多个收件人、抄送或密送,To头里可以用逗号分隔多个邮箱,同时sendmail的第二个参数传入邮箱列表即可,比如[receiver_email, cc_email]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:19:40