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

使用FluentEmail发送邮件时后续邮件To收件人不断累加如何解决

问题原因

核心原因是FluentEmail默认注入的IFluentEmail实例生命周期为单例,你在FluentEmailService中注入的是全局唯一的IFluentEmail对象,每次调用To()方法都是往该实例的收件人集合中追加数据,不会自动清空上一次的收件人记录,多次调用后自然会出现收件人重复累加的情况。

修复方案

推荐使用IFluentEmailFactory每次创建全新的邮件实例,避免复用同一对象导致的属性残留,修改步骤如下:

  1. 调整FluentEmailService的依赖注入项,将注入IFluentEmail改为注入IFluentEmailFactory
  2. 每次执行发送逻辑前,先通过工厂创建新的IFluentEmail实例再进行后续操作

修改后的邮件服务代码示例:

public class FluentEmailService : IFluentEmailService
{
    private readonly IFluentEmailFactory _emailFactory;
    private readonly ILogger<FluentEmailService> _logger;
    public FluentEmailService(ILogger<FluentEmailService> logger, IFluentEmailFactory emailFactory)
    {
        _logger = logger;
        _emailFactory = emailFactory;
    }

    public async Task<SendResponse> SendEmailAsync<TModel>(string subject, string razorTemplatePath, TModel model, string semicolonSeparatedEmailRecipients)
    {
        // 每次创建新的邮件实例,无历史属性残留
        var fluentEmail = _emailFactory.Create();
        var sendResponse = await fluentEmail
                        .To(semicolonSeparatedEmailRecipients)
                        .Subject(subject)
                        .UsingTemplateFromFile(razorTemplatePath, model)
                        .SendAsync();
        return sendResponse;
    }
}

补充说明

原有ConfigureServices中的注册代码不需要修改,FluentEmail在调用AddFluentEmail方法时已经默认注册了IFluentEmailFactory的实现,直接注入使用即可。
如果不想使用工厂模式,也可以在每次发送完成后手动清空IFluentEmail实例的收件人集合,但这种方式容易遗漏清理逻辑,稳定性远不如每次创建新实例的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 22:09:04