使用MailKit向MailTrap.io发送SMTP邮件时遇连接拒绝及SSL问题
解决MailKit连接Mailtrap.io SMTP的问题
我来帮你排查并解决这个问题,从你的代码和报错信息来看,主要是SMTP端口选择错误以及SSL/TLS配置不匹配导致的,咱们一步步来修正:
1. 先明确Mailtrap.io的正确SMTP参数
Mailtrap.io的免费测试SMTP服务,官方提供的有效端口和对应配置是:
- SMTP服务器:
smtp.mailtrap.io - 可选端口:
- 465:强制SSL加密连接
- 587:通过STARTTLS升级加密(推荐使用)
- 2525:兼容无加密/STARTTLS模式
你之前用的584、25都是错误端口,这是连接被拒绝的核心原因。
2. 修正后的完整可运行代码
下面是调整后的正确代码,我标注了关键修改点:
public async Task SendEmailAsync(string email, string subject, string message) { try { var emailMessage = new MimeMessage(); // 提示:From地址建议用Mailtrap控制台分配的测试发件邮箱,避免被系统拦截 emailMessage.From.Add(new MailboxAddress("David", "davidnoreply@yourdomain.com")); emailMessage.To.Add(new MailboxAddress("", email)); emailMessage.Subject = subject; emailMessage.Body = new TextPart("HTML") { Text = message }; using (var client = new SmtpClient()) { // 关键修改1:使用推荐的587端口 // 关键修改2:第三个参数设为false,587端口先建立普通连接再升级TLS,不是直接SSL连接 await client.ConnectAsync("smtp.mailtrap.io", 587, false); // 移除XOAUTH2认证机制,避免不必要的兼容问题 client.AuthenticationMechanisms.Remove("XOAUTH2"); // 注意异步方法要加await,之前的代码漏了 await client.AuthenticateAsync("16729fdfa173b4", "0e6de61c67b069"); await client.SendAsync(emailMessage); await client.DisconnectAsync(true); } } catch (Exception ex) { // 把原始异常也传递进去,方便后续排查 throw new InvalidOperationException($"发送邮件失败:{ex.Message}", ex); } }
3. 关键修正点解释
- 端口错误:替换成Mailtrap官方支持的端口,直接解决"目标机器主动拒绝"的问题
- SSL/TLS配置匹配:不同端口对应不同的加密模式,587端口不能直接用
true开启SSL,要通过STARTTLS自动升级 - 异步方法规范:
AuthenticateAsync和SendAsync必须加await,否则会导致客户端提前释放,操作未完成就中断 - 移除冗余配置:不需要手动设置
LocalDomain,MailKit会自动处理,避免额外问题
4. 额外排查建议
如果还是报错,可以试试:
- 核对Mailtrap控制台里的用户名和密码是否和代码里一致
- 检查本地防火墙/代理是否拦截了SMTP流量
- 换成2525端口,第三个参数设为
false,测试无加密连接是否能成功
内容的提问来源于stack exchange,提问作者dotnetdevcsharp
相关产品推荐
相关产品推荐

