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

使用C#调用Office 365 Outlook邮件服务时遭遇连接失败问题

Outlook 365 SMTP连接失败问题排查与解决

问题分析

从异常信息看,核心是Socket连接超时(52.101.145.0:587无响应),说明程序无法和目标SMTP服务器建立网络连接,或连接过程中被阻断。结合提供的代码,以下是针对性的排查和解决步骤:

排查与解决步骤

1. 网络连通性检查

  • 测试端口连通性:用PowerShell或命令行测试是否能访问SMTP服务器的587端口:
    # PowerShell命令
    Test-NetConnection smtp.office365.com -Port 587
    
    或命令行telnet:
    telnet smtp.office365.com 587
    
    如果测试失败,说明本地防火墙、公司网络防火墙或代理服务器拦截了587端口的出站请求,需联系网络管理员开放权限,或切换到不受限制的网络(如手机热点)重试。
  • IP段访问限制:52.101.145.0属于Office 365的IP范围,若你的公网IP被微软反垃圾系统屏蔽,或所在地区网络无法访问该IP段,也会导致超时。可尝试更换网络环境测试。

2. 修正SMTP服务器配置

Outlook 365发送邮件的正确SMTP服务器是smtp.office365.com,你代码中使用的MX记录服务器(domainname-com.mail.protection.outlook.com)是用于接收邮件的,不适合发送邮件,这是核心配置错误之一。

3. 凭据与认证修正

  • MFA账号处理:如果邮箱开启了多因素认证(MFA),不能直接使用登录密码,必须在微软账户安全设置中生成应用密码,替换代码中的普通密码。
  • 确认账号权限:确保发送邮箱账号拥有正常的邮件发送权限,无封禁或限制。

4. 代码优化

  • 调整超时设置:默认超时时间可能过短,增加超时配置避免因网络延迟导致失败:
    sClient.Timeout = 30000; // 设置30秒超时
    
  • 使用异步发送:同步Send()方法在网络波动时更容易触发超时,建议改用异步方法:
    await sClient.SendMailAsync(message);
    

修正后的示例代码

using System.Net;
using System.Net.Mail;

var sClient = new SmtpClient("smtp.office365.com");
var message = new MailMessage();

sClient.Port = 587;
sClient.EnableSsl = true;
// 若开启MFA,此处替换为应用密码
sClient.Credentials = new NetworkCredential("your-email@domain.com", "your-password-or-app-password");
sClient.UseDefaultCredentials = false;
sClient.Timeout = 30000; // 设置30秒超时

message.Body = "Test";
message.From = new MailAddress("your-email@domain.com");
message.Subject = "Test";
message.To.Add(new MailAddress("receiver-email@domain.com"));

try
{
    sClient.Send(message);
    // 异步方式:await sClient.SendMailAsync(message);
    Console.WriteLine("邮件发送成功");
}
catch (Exception ex)
{
    Console.WriteLine($"发送失败:{ex.ToString()}");
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 20:40:17