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

ASP.NET Boilerplate配置MailKit发邮件时遇配置读取异常

解决ASP.NET Boilerplate中MailKit配置后仍提示Abp.Net.Mail.DefaultFromAddress为空的问题

看起来你已经配置了邮件发送的基础项,但ABP框架还是没读取到Abp.Net.Mail.DefaultFromAddress的值,导致抛出了这个异常。我来帮你梳理下可能的问题和解决办法:

核心问题分析

异常信息明确指向Abp.Net.Mail.DefaultFromAddress的值为空,这说明ABP的配置系统没有从你的app.config中正确读取到这个设置项。常见的原因是配置文件的位置不对、加载优先级问题,或者配置项本身有拼写错误。

分步解决办法

1. 确认配置文件的正确位置

如果你的邮件发送代码是在Web项目中运行,那么配置项应该放在web.config里,而不是类库项目的app.config——类库的app.config不会被主应用程序读取,所有配置都应该集中在主项目的配置文件中。

如果是控制台/桌面应用,确保你的app.config是主项目的配置文件,并且在文件属性里设置了「复制到输出目录」为「如果较新则复制」,这样编译后配置文件会出现在输出目录中,程序才能读取到。

2. 检查配置项的拼写和格式

你的app.config配置看起来格式没问题,但要仔细核对:

  • 键名Abp.Net.Mail.DefaultFromAddress和Abp.Net.Mail.DefaultFromDisplayName是大小写敏感的,确保没有拼写错误
  • 配置值的前后不要有多余的空格,比如value="lkaddoura@dopravo.com"不要写成value=" lkaddoura@dopravo.com "

3. 手动验证配置是否能被读取

可以在发送邮件的代码前添加一段调试代码,确认.NET的配置系统是否能读取到这些值:

using System.Configuration;
using System.Diagnostics;

// 在Send方法前添加
var fromAddress = ConfigurationManager.AppSettings["Abp.Net.Mail.DefaultFromAddress"];
Debug.WriteLine($"读取到的发件人地址: {fromAddress}");

如果输出为空,说明配置文件根本没被加载,这时要检查主项目的配置文件是否包含这些<add>项。

4. 显式在ABP模块中配置邮件设置

你可以在模块的PreInitialize方法中显式读取配置并设置,确保ABP能正确获取到值:

public override void PreInitialize()
{
    // 从配置文件读取并设置邮件默认发件人
    Configuration.DefaultMailSenderAddress = ConfigurationManager.AppSettings["Abp.Net.Mail.DefaultFromAddress"];
    Configuration.DefaultMailSenderDisplayName = ConfigurationManager.AppSettings["Abp.Net.Mail.DefaultFromDisplayName"];
    
    // 其他模块初始化代码...
}

这种方式会直接把配置值注入到ABP的配置系统中,避免自动读取时的问题。

附你提供的相关代码和信息

邮件发送代码

_emailSender.Send( 
    to: "*****@gmail.com", 
    subject: "You have a new task!", 
    body: $"A new task is assigned for you: <b>Create doFramework</b>", 
    isBodyHtml: true 
);

收到的异常信息

{Abp.AbpException: Setting value for 'Abp.Net.Mail.DefaultFromAddress' is null or empty! at Abp.Net.Mail.EmailSenderConfiguration.GetNotEmptySettingValue(String name) in D:\Github\aspnetboilerplate\src\Abp\Net\Mail\EmailSenderConfiguration.cs:line 44 at Abp.Net.Mail.EmailSenderBase.NormalizeMail(MailMessage mail) in D:\Github\aspnetboilerplate\src\Abp\Net\Mail\EmailSenderBase.cs:line 96 at Abp.Net.Mail.EmailSenderBase.Send(MailMessage mail, Boolean normalize) in D:\Github\aspnetboilerplate\src\Abp\Net\Mail\EmailSenderBase.cs:line 73 at TaskManagmentApp.Tasks.TaskAppService.GetAll(GetAllTasksInput input) in C:\Users\Dopravo\source\repos\doFramework\SampleProjects\TaskManagmentApp\src\TaskManagmentApp.Application\Services\TaskAppService.cs:line 36 at Castle.Proxies.Invocations.ITaskAppService_GetAll.InvokeMethodOnTarget() at Castle.DynamicProxy.AbstractInvocation.Proceed() at Abp.Domain.Uow.UnitOfWorkInterceptor.PerformSyncUow(IInvocation invocation, UnitOfWorkOptions options) in D:\Github\aspnetboilerplate\src\Abp\Domain\Uow\UnitOfWorkInterceptor.cs:line 68 at Castle.DynamicProxy.AbstractInvocation.Proceed() at Abp.Auditing.AuditingInterceptor.PerformSyncAuditing(IInvocation invocation, AuditInfo auditInfo) in D:\Github\aspnetboilerplate\src\Abp\Auditing\AuditingInterceptor.cs:line 51}

app.config文件内容

<configuration> 
  <runtime> 
    <gcServer enabled="true"/> 
  </runtime> 
  <appSettings> 
    <add key="Abp.Net.Mail.DefaultFromAddress" value="lkaddoura@dopravo.com"/> 
    <add key="Abp.Net.Mail.DefaultFromDisplayName" value="Lutfi Kaddoura"/> 
  </appSettings> 
</configuration>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:58:22