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

使用MailKit发送邮件时出现535认证失败问题求助

解决MailKit连接Zeptomail SMTP时535认证失败问题

问题场景

确认SMTP凭证无误,但调用client.Authenticate()时触发MailKit.Security.AuthenticationException,错误提示535: Authentication Failed,相关代码如下:

var message = new MimeMessage();
message.From.Add(new MailboxAddress("noreply", "noreply@xyz@gmail.com"));
message.To.Add(new MailboxAddress("xyz", "xyz@gmail.com"));
message.Subject = "Test Email";
message.Body = new TextPart("html")
{
    Text = "Test email sent successfully."
};

var client = new MailKit.Net.Smtp.SmtpClient();
try
{
    ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;
    client.SslProtocols = System.Security.Authentication.SslProtocols.Tls12;
    client.Connect("smtp.zeptomail.in", 587, false);
    client.Authenticate("emailapikey", password);
    client.Send(message);
    client.Disconnect(true);
}
catch (Exception e)
{
    Console.Write(e.Message);
}

排查及修复步骤

  • 修正认证用户名:Zeptomail SMTP的认证用户名固定为apikey,而非emailapikey,修改认证代码:
    client.Authenticate("apikey", password);
    
  • 启用STARTTLS加密:端口587为非SSL端口,需在连接后手动启用STARTTLS,否则未加密的连接会导致认证失败,在client.Connect()后添加:
    client.StartTls();
    
  • 替换证书验证回调:MailKit不依赖ServicePointManager的证书验证机制,改用自身的回调方法:
    client.ServerCertificateValidationCallback = (sender, cert, chain, sslPolicyErrors) => true;
    
  • 验证发件人地址权限:确保发件人邮箱地址已在Zeptomail平台完成域名验证或地址授权,未验证的地址可能触发后续发送失败。

修正后的完整代码

var message = new MimeMessage();
message.From.Add(new MailboxAddress("noreply", "noreply@xyz@gmail.com"));
message.To.Add(new MailboxAddress("xyz", "xyz@gmail.com"));
message.Subject = "Test Email";
message.Body = new TextPart("html")
{
    Text = "Test email sent successfully."
};

var client = new MailKit.Net.Smtp.SmtpClient();
try
{
    client.ServerCertificateValidationCallback = (sender, cert, chain, sslPolicyErrors) => true;
    client.SslProtocols = System.Security.Authentication.SslProtocols.Tls12;
    client.Connect("smtp.zeptomail.in", 587, false);
    client.StartTls();
    client.Authenticate("apikey", password);
    client.Send(message);
    client.Disconnect(true);
}
catch (Exception e)
{
    Console.Write(e.Message);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 03:05:17