.NET Core 2.1中同SMTP邮件发送DLL在主项目失效问题求助
排查.NET Core 2.1项目中SMTP NuGet包发送邮件失败的思路
核心排查方向
- 配置冲突检查
- 检查主项目的
appsettings.json或其他配置文件中是否存在Smtp相关配置节点,比如端口、SSL开关等,是否和DLL内部硬编码的配置冲突。 - 确认主项目是否通过依赖注入替换了SMTP客户端实例,导致DLL的原生配置被覆盖。
- 检查主项目的
- 程序集版本与绑定问题
- 查看主项目
obj/project.assets.json中System.Net.Mail相关程序集的版本,对比DLL编译时依赖的版本是否一致。 - 尝试在主项目的
csproj中添加以下配置强制使用旧版SMTP客户端行为:<RuntimeHostConfigurationOption Include="System.Net.Mail.SmtpClient.UseOldSmtpClient" Value="true" />
- 查看主项目
- 主项目内部拦截逻辑
- 排查主项目是否存在全局邮件拦截机制(比如测试环境的邮件过滤规则),即使SMTP服务器返回成功,邮件也可能被内部拦截。
- 检查主项目是否有AOP切面或中间件,是否修改了邮件发送流程或阻止了发送动作。
- 运行上下文差异
- 主项目若在IIS、Docker等环境运行,确认网络策略是否允许出站连接SMTP服务器的端口(通常是25/587)。
- 对比控制台项目和主项目的运行身份权限,确认主项目运行账户是否有访问SMTP服务器的权限。
- 打包与代码一致性验证
- 把DLL中
.SendMail()的核心代码直接复制到主项目中运行,验证是否能正常发送,排除NuGet打包时遗漏依赖或编译问题。 - 增加DLL的日志粒度,记录完整的SMTP会话内容(包括邮件头、发送参数),对比控制台和主项目的日志差异。
- 把DLL中
内容的提问来源于stack exchange,提问作者Joss
相关产品推荐
相关产品推荐

