Android Xamarin C#实现TLS 1.2接收Office365 Outlook POP邮件问题
解决Office365 POP3认证失败(需启用TLS 1.2)的问题
微软停用无TLS 1.2的SMTP/POP3认证后,你的代码需要明确强制使用TLS 1.2协议才能通过认证,以下是具体修改方案:
1. 强制.NET环境使用TLS 1.2
在应用初始化或当前方法开头添加代码,确保底层网络请求使用TLS 1.2:
// 适用于.NET Framework 4.5+;.NET Core/.NET 5+默认支持,但显式设置更稳妥 System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;
如果是.NET Framework 4.0(无Tls12枚举),用数值替代:
System.Net.ServicePointManager.SecurityProtocol = (System.Net.SecurityProtocolType)3072;
2. 配置Pop3Client指定TLS 1.2连接
修改Pop3Client的协议配置,确保连接时仅使用TLS 1.2:
public void CheckForEmailsFromSupportPOP2(object sender, EventArgs e) { int numCountEmailsDownloaded = 0; string strAllIncidentNumbers = ""; try { // 先强制启用TLS 1.2 System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12; string pathLog = System.Environment.GetFolderPath(System.Environment.SpecialFolder.LocalApplicationData); string fileNameLog = Path.Combine(pathLog, "pop3.txt"); using (var client = new Pop3Client(new ProtocolLogger(fileNameLog))) { // 显式限定仅使用TLS 1.2协议 client.SslProtocols = System.Security.Authentication.SslProtocols.Tls12; // Office365 POP3 995端口保持SSL连接,协议已强制为TLS1.2 client.Connect("outlook.office365.com", 995, SecureSocketOptions.SslOnConnect); client.Authenticate("mobile1@zxcv.co.uk", "password"); for (int i = 0; i < client.Count; i++) { var message = client.GetMessage(i); // 后续业务代码... } } } catch (Exception ex) { // 异常处理逻辑 } }
关键说明
- 你的
Pop3Client应为MailKit库的实现(.NET主流邮件客户端库),SslProtocols属性用于限定连接协议版本,直接指定Tls12即可匹配微软的认证要求。 - 若仍报错,可检查是否启用了双重认证(MFA),若启用需改用应用密码进行认证。
内容的提问来源于stack exchange,提问作者Jonathan T
相关产品推荐
相关产品推荐

