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

部署在IONOS的ASP.NET Core 6站点用MailKit发邮件遇SMTP断开错误求助

问题:IONOS部署ASP.NET Core 6后MailKit发送SMTP邮件报错(本地正常)

本地环境下使用MailKit 3.4.3通过IONOS邮箱发送用户验证邮件一切正常,但部署到IONOS服务器后,出现SMTP连接意外断开的错误:

Error : The SMTP server has unexpectedly disconnected. 
Stack :  at MailKit.Net.Smtp.SmtpStream.ReadAheadAsync(CancellationToken cancellationToken)
   at MailKit.Net.Smtp.SmtpStream.ReadResponseAsync(CancellationToken cancellationToken)
   at MailKit.Net.Smtp.SmtpClient.ConnectAsync(String host, Int32 port, SecureSocketOptions options, CancellationToken cancellationToken)

已联系IONOS技术支持,确认主机地址、端口配置正确,且无侧限制。当前代码如下(已修正原代码的引号语法错误):

using SmtpClient smtp = new(new ProtocolLogger("smtp.log"));
smtp.ServerCertificateValidationCallback = (s, c, h, e) => true;
await smtp.ConnectAsync("mrelay.schlund.de", 587, SecureSocketOptions.StartTls);
await smtp.AuthenticateAsync("test@test.fr", "greatpwd");
smtp.Send(email);
smtp.Disconnect(true);

排查方向与解决方案:

  • 更换IONOS官方SMTP中继地址:尝试使用smtp.ionos.de替代mrelay.schlund.de,端口保持587。部分IONOS共享主机仅允许内部中继地址出站,第三方中继可能被隐性拦截。
  • 调整加密模式:
    • 将SecureSocketOptions.StartTls改为SecureSocketOptions.Auto,让MailKit自动协商加密方式;
    • 或切换到端口465,使用SecureSocketOptions.SslOnConnect直接建立SSL连接,测试是否能稳定连接。
  • 添加连接超时配置:IONOS服务器网络延迟可能导致连接超时,在ConnectAsync前设置超时:
    smtp.Timeout = 30000; // 设置30秒超时
    
  • 临时禁用ProtocolLogger:部分共享主机的文件系统权限限制可能导致日志写入失败,间接引发连接异常。先移除日志初始化测试:
    using SmtpClient smtp = new();
    
  • 验证邮箱账号权限:
    • 确认使用的邮箱是IONOS托管的账号(非第三方邮箱),部分中继服务器拒绝非自有账号的认证请求;
    • 登录IONOS后台检查该邮箱是否开启了SMTP访问权限,部分默认关闭此功能。
  • 捕获详细交互日志:将SMTP日志写入应用可访问的目录(而非本地临时路径),通过日志排查断开前的交互细节:
    try
    {
        var logPath = Path.Combine(AppContext.BaseDirectory, "smtp_interaction.log");
        using SmtpClient smtp = new(new ProtocolLogger(logPath));
        smtp.ServerCertificateValidationCallback = (s, c, h, e) => true;
        smtp.Timeout = 30000;
        await smtp.ConnectAsync("smtp.ionos.de", 587, SecureSocketOptions.Auto);
        await smtp.AuthenticateAsync("your-ionos-email@domain.de", "your-password");
        await smtp.SendAsync(email);
        await smtp.DisconnectAsync(true);
    }
    catch (Exception ex)
    {
        // 将异常和日志路径记录到应用日志系统(如Serilog)
        // Log.Error(ex, "SMTP发送失败,日志路径:{LogPath}", logPath);
        throw;
    }
    
  • 确认.NET运行时版本:检查IONOS主机的.NET 6运行时是否与本地开发环境一致,避免因运行时差异导致的网络交互兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 00:05:18