You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

已有批量发邮件代码,如何为每个收件人个性化设置显示名称?

给批量邮件的每个收件人添加个性化显示名称的解决方案

嘿,这个需求很好实现!核心是要遵循邮件地址的标准格式,把显示名称+邮箱地址组合起来,再针对每个收件人单独处理邮件的收件人字段——这样既能保证个性化显示,还能避免所有收件人看到彼此的信息。

关键原理

邮件客户端识别的带显示名称的地址格式是:

"显示名称" <邮箱地址>

比如 "John Doe" <john.doe@example.com>,这样收件人在邮箱里看到的收件人信息就会是友好的名称,而不是冷冰冰的邮箱字符串。

修改后的完整代码

我们把收件人列表改成包含名称和邮箱的结构,然后循环给每个收件人发送定制化的邮件:

import smtplib
from email.mime.text import MIMEText

# 初始化SMTP连接
s = smtplib.SMTP('smtp.uk.xensource.com')
s.set_debuglevel(1)

# 定义带个性化名称的收件人列表
recipients = [
    ("John Doe", "john.doe@example.com"),
    ("John Smith", "john.smith@example.co.uk")
]

sender = 'me@example.com'
email_subject = "你的专属邮件主题"

# 遍历每个收件人发送邮件
for recipient_name, recipient_email in recipients:
    # 构造个性化邮件内容(可选:把名称插入正文)
    email_body = f"Hi {recipient_name},\n\n这是为你定制的邮件内容,希望对你有帮助!"
    msg = MIMEText(email_body)
    
    # 设置邮件头部信息
    msg['Subject'] = email_subject
    msg['From'] = sender
    # 重点:设置带显示名称的收件人字段
    msg['To'] = f'"{recipient_name}" <{recipient_email}>'
    
    # 发送邮件,注意sendmail的第二个参数是纯邮箱地址列表
    s.sendmail(sender, [recipient_email], msg.as_string())

# 关闭SMTP连接
s.quit()

几个重要细节

  • 逐个发送的好处:如果直接把所有带名称的地址用逗号拼起来放到msg['To']里,所有收件人都会在收件人列表里看到彼此的信息。逐个发送能保证每个人的邮箱里只显示自己的名称,更隐私也更友好。
  • 正文个性化扩展:你可以像示例里那样,把recipient_name插入到邮件正文中,让邮件的个性化程度更高。
  • 格式注意:显示名称外面的双引号是可选的,但如果名称里包含空格或者特殊字符,加上双引号能避免解析错误。

内容的提问来源于stack exchange,提问作者Pedro Gabriel Carvalho

火山引擎 最新活动