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

使用Mailkit发送Gmail邮件时遇SSL/TLS连接错误(Android端)

解决方案

原因分析

Android设备/模拟器无法连接到证书吊销列表(CRL)服务器,导致Mailkit在验证Gmail SMTP证书时无法确认吊销状态,从而抛出SSL连接错误。Windows环境下通常能正常访问CRL服务器,因此无此问题。

解决办法

1. 自定义证书验证逻辑,忽略吊销检查

在创建SmtpClient后、调用Connect之前,添加证书验证回调,跳过吊销状态相关的错误检查:

SmtpClient smtpClient = new();
// 添加证书验证回调
smtpClient.ServerCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => {
    // 仅忽略吊销状态未知或离线吊销的错误
    if (sslPolicyErrors == SslPolicyErrors.RemoteCertificateChainErrors) {
        foreach (var status in chain.ChainStatus) {
            if (status.Status != X509ChainStatusFlags.RevocationStatusUnknown && 
                status.Status != X509ChainStatusFlags.OfflineRevocation) {
                return false;
            }
        }
        return true;
    }
    // 其他类型的SSL错误保持正常验证逻辑
    return sslPolicyErrors == SslPolicyErrors.None;
};

try
{
    smtpClient.Connect("smtp.gmail.com", 465, SecureSocketOptions.SslOnConnect);
    smtpClient.Authenticate("gdtmailkit@gmail.com", "**App Password**");
    smtpClient.Send(message);

    messageText.Text = "Message Sent";
}
catch (Exception ex)
{
    messageText.Text = ex.Message;
}
finally
{
    smtpClient.Disconnect(true);
    smtpClient.Dispose();
}

2. 切换到TLS连接模式

尝试使用端口587和SecureSocketOptions.StartTls替代SSL直连,部分环境下TLS的证书验证逻辑对CRL服务器的依赖更低:

// 替换原Connect调用
smtpClient.Connect("smtp.gmail.com", 587, SecureSocketOptions.StartTls);

3. 检查Android网络配置

  • 确认模拟器/设备的网络可正常访问外网,部分模拟器默认网络受限会导致无法连接CRL服务器;
  • 确保AndroidManifest.xml中已添加INTERNET权限:
    <uses-permission android:name="android.permission.INTERNET" />
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 06:33:14