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

.NET 8中使用Office 365 SMTP时MailMessage发送卡住问题求助

Office 365 SMTP邮件发送卡住问题的修复方案

核心问题分析

代码卡住是因为缺少Office 365 SMTP必需的配置项,同时代码存在几处关键错误:

  • 认证信息未正确赋值:仅创建了NetworkCredential实例,但未绑定到SmtpClient.Credentials,导致认证失败,连接被阻塞
  • 未设置Office 365强制要求的端口与SSL:Office 365 SMTP必须使用端口587并启用SSL/TLS,否则无法建立有效连接
  • 事件绑定时机错误:SendCompleted是异步方法SendAsync的回调事件,绑定在同步Send方法之后完全无效
  • 异常处理无效:catch块中直接丢弃异常,无法获取错误详情用于排查

Office 365 SMTP必填配置

使用Office 365 SMTP发送邮件必须满足以下配置:

  • 服务器地址:smtp.office365.com
  • 端口:587(推荐,使用TLS加密)
  • 启用SSL:EnableSsl = true
  • 认证信息:使用邮箱完整地址作为用户名,对应密码(若启用多因素认证MFA,需使用应用密码而非登录密码;商业租户需确保已开启SMTP AUTH)

修正后的代码

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

string server = "smtp.office365.com";
var user = "你的完整邮箱@domain.com"; // 必须是完整邮箱地址
var password = "你的密码或应用密码";
var from = "你的完整邮箱@domain.com";
var to = "收件人邮箱@example.com";
var subject = "CSharp sent message";
var body = "Sent from code that is being made by Mail Message";

var message = new MailMessage(from, to, subject, body);

using (var client = new SmtpClient(server))
{
    client.Port = 587;
    client.EnableSsl = true;
    client.Credentials = new NetworkCredential(user, password);

    try
    {
        client.Send(message);
        Console.WriteLine("邮件发送成功");
    }
    catch (Exception ex)
    {
        Console.WriteLine($"发送失败:{ex.Message}");
        // 如需深入排查,可打印堆栈信息
        // Console.WriteLine(ex.StackTrace);
    }
}

额外注意事项

  • 若使用M365商业版/教育版:
    1. 需确保邮箱账户已开启SMTP AUTH(可通过Exchange管理中心或PowerShell启用)
    2. 若账户启用了多因素认证(MFA),必须使用应用密码替代普通登录密码
  • 建议使用using语句包裹SmtpClient,确保资源正确释放
  • 若使用异步方法SendMailAsync,需正确使用await,避免主线程阻塞导致死锁

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 01:23:11