如何用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
相关产品推荐
相关产品推荐

