ASP.NET C# Web Forms切换至Outlook 365后邮件发送失败求助
问题背景
切换至Outlook 365前,本地使用以下代码发送邮件:
SmtpClient smtpClient = new SmtpClient(ConfigurationManager.AppSettings["EMailServer"]); smtpClient.Send(message);
切换后使用新代码发送邮件时,持续报错“Failed to send email”“General failure”,新代码如下:
SmtpClient client = new SmtpClient(); client.UseDefaultCredentials = false; client.Credentials = new System.Net.NetworkCredentmailial("email address", "network password"); client.Port = 25; // You can use Port 25 if 587 is blocked (mine is!) client.Host = "smtp.office365.com"; //client.DeliveryMethod = SmtpDeliveryMethod.Network; client.EnableSsl = true; client.TargetName = "STARTTLS/smtp.office365.com"; client.Send(message);
修复步骤
修正拼写错误
代码中NetworkCredentmailial是明显的拼写错误,正确类名为NetworkCredential,该错误会直接导致凭证初始化失败。调整端口与SSL配置
Outlook 365 SMTP官方推荐使用587端口,25端口通常会被ISP或企业防火墙拦截,且Office 365对25端口的发送限制较多。同时可以移除TargetName属性,.NET的SmtpClient连接smtp.office365.com时会自动处理该配置。确保凭证设置顺序正确
必须先设置UseDefaultCredentials = false,再赋值Credentials,否则系统默认凭证会覆盖自定义的账号密码。启用DeliveryMethod
取消注释client.DeliveryMethod = SmtpDeliveryMethod.Network;,明确指定通过网络发送邮件,避免潜在的配置冲突。验证账号权限
如果账号开启了MFA(多因素认证),需使用应用密码而非普通登录密码;同时确认该Office 365账号被允许通过SMTP发送邮件(部分企业租户会限制SMTP权限)。
修正后的代码示例
// 针对旧.NET Framework版本,强制启用TLS 1.2(Office 365不再支持低版本TLS) System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12; SmtpClient client = new SmtpClient(); client.UseDefaultCredentials = false; // 替换为实际Office 365邮箱和密码/应用密码 client.Credentials = new System.Net.NetworkCredential("your-office365-email@domain.com", "valid-password"); client.Port = 587; client.Host = "smtp.office365.com"; client.DeliveryMethod = SmtpDeliveryMethod.Network; client.EnableSsl = true; client.Send(message);
额外排查点
检查服务器或本地防火墙是否允许出站连接到smtp.office365.com的587端口;如果使用.NET Framework 4.5及以下版本,需要手动启用TLS 1.2(代码示例已包含)。
内容的提问来源于stack exchange,提问作者user3570063

