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

如何修改Python邮件脚本,将邮件发送至To字段而非Bcc密送

解决邮件To字段显示问题及代码优化建议

核心修改:让邮件显示在To字段

当前代码中,server.sendmail()虽指定了收件人,但邮件内容的头部未包含To字段,导致邮件客户端将其识别为密送(Bcc)。只需在构建邮件内容时添加To头部即可解决:

修改构建邮件的代码:

# 原代码
message = 'Subject: {}\n\n{}'.format(Subject, Body)
# 修改后
message = 'To: {}\nSubject: {}\n\n{}'.format(email, Subject, Body)

修改后,邮件头部会明确标注收件人邮箱,收件人打开邮件时就能在To栏看到自己的地址。

代码整体优化建议(针对Python新手)

  • 更简洁的遍历方式:避免用range(len(emails)),直接用zip同时迭代姓名、邮箱和类型,代码更易读:
for name, email, email_type in zip(names, emails, types):
    if email_type == 1:
        # 处理类型1的邮件逻辑
    else:
        # 处理类型2的邮件逻辑
  • 使用标准库构建邮件:手动拼接邮件头部容易出错,推荐用email.mime模块构建邮件,更规范且支持扩展(如HTML邮件、附件):
from email.mime.text import MIMEText

# 构建邮件对象
msg = MIMEText(Body)
msg['From'] = your_email
msg['To'] = email
msg['Subject'] = Subject
# 发送邮件
server.send_message(msg)
  • 避免硬编码敏感信息:邮箱密码直接写在代码里不安全,建议用环境变量读取:
import os
your_password = os.getenv('EMAIL_PASSWORD')

(设置环境变量:Windows用set EMAIL_PASSWORD=你的密码,Mac/Linux用export EMAIL_PASSWORD=你的密码)

  • 添加异常处理:发送邮件可能遇到网络错误、收件人无效等问题,添加异常处理能避免程序崩溃,还能记录失败情况:
try:
    server.sendmail(your_email, [email], message)
    print(f"邮件已发送给 {email}")
except Exception as e:
    print(f"发送邮件给 {email} 失败: {str(e)}")
  • 规范变量名:遵循PEP8命名规范,变量名用小写字母加下划线,比如types改成email_types(避免和内置type冲突),Subject改成subject,message_1改成message_for_type1,让代码更易维护。

  • 自动管理连接:用with语句管理SMTP连接,无需手动调用server.close(),连接会自动关闭:

with smtplib.SMTP_SSL('smtp.gmail.com', 465) as server:
    server.login(your_email, your_password)
    # 遍历发送邮件的代码放在这里

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 22:45:26