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

如何使用SmtpClient发送含不同称呼的模板邮件

实现针对每个收件人替换的批量邮件发送

核心思路

因为仅需替换<username>这一个占位符,其余内容统一,所以可以只加载一次基础模板,然后对每个收件人单独做占位符替换,再发送邮件,避免重复加载模板提升效率。

具体实现步骤

    1. 调用GetEmailBody()获取完整的基础邮件模板内容(这一步只执行一次)
    1. 遍历所有收件人列表,对每个收件人执行:
    • a. 基于基础模板,替换其中的<username>为当前收件人的用户名
    • b. 构造对应收件人的EmailOption实体,设置收件人地址、替换后的邮件内容等信息
    • c. 调用SendEmail()方法发送邮件

代码示例(基于C#)

假设你的现有类结构大致如下:

public class EmailService
{
    // 获取邮件模板内容
    public string GetEmailBody()
    {
        // 现有逻辑:从文件/数据库读取模板,返回带<username>占位符的内容
        return "您好<username>,这是一封测试邮件...";
    }

    // 替换占位符
    public string UpdatePlaceHolders(string template, Dictionary<string, string> placeholders)
    {
        // 现有逻辑:遍历占位符字典替换模板中的对应内容
        foreach (var placeholder in placeholders)
        {
            template = template.Replace($"<{placeholder.Key}>", placeholder.Value);
        }
        return template;
    }

    // 发送邮件
    public void SendEmail(EmailOption option)
    {
        // 现有逻辑:使用SmtpClient发送邮件
        using (var client = new SmtpClient())
        {
            // 设置SMTP参数、构造MailMessage并发送
        }
    }
}

public class EmailOption
{
    public string ToEmail { get; set; }
    public string EmailBody { get; set; }
    public string Subject { get; set; }
    // 其他邮件属性:发件人、附件等
}

那么批量发送的方法可以这样扩展:

public void SendBulkPersonalizedEmail(List<(string ToEmail, string UserName)> recipients, string subject)
{
    // 1. 只加载一次基础模板
    string baseTemplate = GetEmailBody();

    // 2. 遍历每个收件人处理
    foreach (var recipient in recipients)
    {
        // 仅替换<username>占位符
        var placeholders = new Dictionary<string, string>
        {
            { "username", recipient.UserName }
        };
        string personalizedBody = UpdatePlaceHolders(baseTemplate, placeholders);

        // 构造当前收件人的邮件选项
        var emailOption = new EmailOption
        {
            ToEmail = recipient.ToEmail,
            EmailBody = personalizedBody,
            Subject = subject
            // 其他通用属性(如发件人)可以在这里统一设置
        };

        // 发送邮件
        SendEmail(emailOption);
    }
}

关键说明

  • 模板复用:基础模板只加载一次,避免重复IO操作(比如重复读取文件/数据库),提升批量发送的效率
  • 针对性替换:每个收件人只替换<username>,其余内容保持和基础模板一致,完全匹配需求
  • 扩展性:如果后续需要增加其他个性化占位符,只需要在placeholders字典中添加对应的键值对即可,不需要修改核心逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 05:13:13