ASP.NET MVC(.NET6)使用FluentEmail发邮件遇SocketException问题求助
解决FluentEmail发送邮件时出现SocketException(目标机器主动拒绝连接)的问题
问题场景
我在.NET 6上开发ASP.NET MVC Web应用,使用Visual Studio本地IIS服务器,搭配FluentEmail.Core和FluentEmail.Server包发送邮件时,触发错误:
SocketException: No connection could be made because the target machine actively refused it
项目最初存在U盘中,在5台不同电脑及个人笔记本上操作时均出现该错误,即使将项目下载到本地磁盘后问题依然存在。期望控制器能正常将邮件发送至指定邮箱,请求解决思路。
核心排查与解决步骤
这个错误本质是应用无法连接到配置的SMTP邮件服务器,和项目存储位置、换电脑无关,重点检查以下几点:
1. 核对SMTP服务器参数是否完全正确
- 不同邮箱的SMTP地址、端口、加密协议不一样,比如:
- QQ邮箱:SMTP地址
smtp.qq.com,端口465(SSL)/587(TLS) - 163邮箱:SMTP地址
smtp.163.com,端口465(SSL)/25(非加密,多数环境被封禁)
- QQ邮箱:SMTP地址
- 检查代码中配置的地址、端口是否写错,比如把
smtp.qq.com写成smtp.q.com,或者用了已被封禁的端口。
2. 确认邮箱已开启SMTP服务并使用授权码
- 国内主流邮箱(QQ、163等)都需要手动开启POP3/SMTP服务,并生成授权码代替登录密码使用,直接用邮箱登录密码会导致连接失败。
- 以QQ邮箱为例:进入「设置-账户」,找到POP3/SMTP服务选项开启,按提示生成授权码。
3. 检查FluentEmail配置代码是否正确
确保在Program.cs中正确配置SMTP发送器,示例代码:
using FluentEmail.Core; using FluentEmail.Smtp; var builder = WebApplication.CreateBuilder(args); // 配置FluentEmail builder.Services.AddFluentEmail("你的发件邮箱@qq.com") .AddSmtpSender("smtp.qq.com", 465) .SetUsername("你的发件邮箱@qq.com") .SetPassword("你的邮箱授权码") .UseSsl(); // 使用SSL加密时必须添加 // 其他MVC配置...
如果用TLS协议(端口587),把UseSsl()替换为UseTls()。
4. 测试SMTP服务器的可连接性
- 用telnet命令验证:打开CMD,输入
telnet smtp.qq.com 465,能连接会进入空白界面;如果提示连接失败,说明网络或服务器本身有问题。 - 用第三方邮件客户端(比如Foxmail、Outlook)配置相同的SMTP参数,若客户端也无法发邮件,说明是邮箱/服务器的问题,和代码无关。
5. 排查本地环境的网络限制
- 确认本地防火墙没有拦截应用的出站连接,尤其是SMTP常用端口(465、587)。
- 本地IIS应用池的身份默认是
ApplicationPoolIdentity,一般有网络权限;如果是企业环境,可尝试将应用池身份改为有网络访问权限的本地账户。
6. 移除不必要的FluentEmail.Server包
FluentEmail.Server是用来搭建自己的邮件服务器的,如果你只是要发送邮件,只需要FluentEmail.Core + FluentEmail.Smtp即可。误装FluentEmail.Server可能干扰配置,建议卸载该包。
内容的提问来源于stack exchange,提问作者AzSumToshko
相关产品推荐
相关产品推荐

