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

如何用MailKit发送Office 365邮件?发送时遇403错误求助

解决方案

1. 补充EWS相关权限

从权限截图来看,当前仅配置了Microsoft Graph的权限,缺少EWS的必要权限:

  • 若为委派权限:需添加EWS.AccessAsUser.All,并完成用户同意
  • 若为应用权限:需添加EWS.AccessAsApp,需全局管理员完成同意操作

这是导致403错误的核心原因之一。

2. 统一使用MailKit发送邮件(推荐)

既然已通过MailKit完成收件箱读取,建议直接用MailKit发送邮件,无需切换到EWS,避免权限适配问题。示例代码:

var message = new MimeMessage();
message.From.Add(new MailboxAddress("发件人名称", <authemail>));
message.To.Add(new MailboxAddress("Mrs. Chanandler Bong", "test@gmail.com"));
message.Subject = "My first test";

message.Body = new TextPart("html") {
    Text = "Hey"
};

// 使用已认证的MailKit客户端直接发送
await client.SendAsync(message);

注意:需确保OAuth2令牌包含Microsoft Graph的Mail.Send权限(已在截图中配置)。

3. 修复EWS代码的OAuth2适配

若必须使用EWS发送,需将Credentials替换为OAuth2令牌,同时避免Autodiscover可能的问题,修改后代码:

var ews = new ExchangeService();
// 使用OAuth2令牌作为凭据
ews.Credentials = new OAuthCredentials(accessTokenModel.access_token);
// 直接指定EWS端点,跳过Autodiscover
ews.Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx");

// 若无需身份模拟,可删除以下行
ews.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, <authemail>);

var email = new EmailMessage(ews);
email.Subject = "My first test";
email.From = new EmailAddress(<authemail>);
email.ToRecipients.Add(new EmailAddress("Mrs. Chanandler Bong", "test@gmail.com"));
email.Body = new MessageBody(BodyType.HTML, "Hey");
email.Send();

同时需确保令牌包含对应EWS权限(委派EWS.AccessAsUser.All或应用EWS.AccessAsApp)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 17:17:52