Office 365 客户端 API SendMailAsync returns 未经授权
Office 365 client API SendMailAsync returns Unauthorized
我正在尝试通过我的 ASP MVC Web 应用程序在 C# 中设置 Office 365 集成,为此我使用的是 Outlook Mail REST API(客户端版本)。我一直在这里使用 API 参考:https://msdn.microsoft.com/office/office365/APi/mail-rest-operations
我可以正常登录 Office 365,获取令牌,然后读取邮件文件夹(即已发送邮件/收件箱),但是当我尝试发送电子邮件时出现以下错误:
未经授权
问题描述:当前网络请求执行过程中出现未处理的异常。请查看堆栈跟踪以获取有关错误及其在代码中的来源的详细信息。
异常详细信息:Microsoft.OData.Client.DataServiceClientException:未经授权
我已将权限添加到 read/write 并发送电子邮件,因此当我登录 Office 365 时它显示:
Office Integration Test App needs permission to:
Access your data anytime
Sign in as you
Send mail as you
Read and write access to your mail
所以我认为 'Send mail as you' 是我需要的。但是我仍然收到未经授权的错误消息。
这是我要运行发送电子邮件的代码:
string AccessToken = (string)Session["Office365Token"];
OutlookServicesClient client = new OutlookServicesClient(new Uri("https://outlook.office.com/api/v2.0"),
async () =>
{
return AccessToken;
});
ItemBody EmailBody = new ItemBody
{
Content = "Test email from the project",
ContentType = BodyType.HTML
};
List<Recipient> toRecipients = new List<Recipient>();
toRecipients.Add(new Recipient() { EmailAddress = new EmailAddress() { Address = "testemail@test.com" } });
Message newMessage = new Message
{
Subject = "Test Subject For Email",
Body = EmailBody,
ToRecipients = toRecipients
};
await client.Me.SendMailAsync(newMessage, true);
当我调用 SendMailAsync 时,错误发生在最后一行。我不太确定还有什么可以尝试的,也找不到有关导致这种情况的原因的任何信息。
非常感谢任何帮助!
检查您的令牌值。如果您复制该字符串并转到 http://jwt.calebb.net/,您可以将其粘贴并解析出来。检查 scp
声明并确保 Mail.Send
存在。
我也一直在尝试使用 OutlookServicesClient 的 SendMailAsync 方法并收到了未经授权的响应。
Fiddler 显示令牌未包含在 SendMailAsync 创建的请求中,但是我可以看到当 OutlookServicesClient 生成 Get 请求时包含令牌阅读消息。 this GitHub issue 为我证实了这一点,它还声明它曾经在库的 1.0.22 版本中工作,但从 1.0.34 版本开始就不行了。
再四处查看后,我发现其他人已经尝试过 首先创建草稿,然后发送。这是它的样子:
OutlookServicesClient outlookClient = new OutlookServicesClient(new Uri("https://outlook.office.com/api/v2.0"),
async () =>
{
// already retrieved my AccessToken using AuthenticationContext
return AccessToken;
});
// Save to Drafts folder
await outlookClient.Me.Messages.AddMessageAsync(newMessage);
// Now send
await newMessage.SendAsync();
我的结论是 SendMailAsync 方法完全被破坏了。我们可以先将新邮件保存为草稿。
我正在尝试通过我的 ASP MVC Web 应用程序在 C# 中设置 Office 365 集成,为此我使用的是 Outlook Mail REST API(客户端版本)。我一直在这里使用 API 参考:https://msdn.microsoft.com/office/office365/APi/mail-rest-operations
我可以正常登录 Office 365,获取令牌,然后读取邮件文件夹(即已发送邮件/收件箱),但是当我尝试发送电子邮件时出现以下错误:
未经授权
问题描述:当前网络请求执行过程中出现未处理的异常。请查看堆栈跟踪以获取有关错误及其在代码中的来源的详细信息。
异常详细信息:Microsoft.OData.Client.DataServiceClientException:未经授权
我已将权限添加到 read/write 并发送电子邮件,因此当我登录 Office 365 时它显示:
Office Integration Test App needs permission to:
Access your data anytime
Sign in as you
Send mail as you
Read and write access to your mail
所以我认为 'Send mail as you' 是我需要的。但是我仍然收到未经授权的错误消息。
这是我要运行发送电子邮件的代码:
string AccessToken = (string)Session["Office365Token"];
OutlookServicesClient client = new OutlookServicesClient(new Uri("https://outlook.office.com/api/v2.0"),
async () =>
{
return AccessToken;
});
ItemBody EmailBody = new ItemBody
{
Content = "Test email from the project",
ContentType = BodyType.HTML
};
List<Recipient> toRecipients = new List<Recipient>();
toRecipients.Add(new Recipient() { EmailAddress = new EmailAddress() { Address = "testemail@test.com" } });
Message newMessage = new Message
{
Subject = "Test Subject For Email",
Body = EmailBody,
ToRecipients = toRecipients
};
await client.Me.SendMailAsync(newMessage, true);
当我调用 SendMailAsync 时,错误发生在最后一行。我不太确定还有什么可以尝试的,也找不到有关导致这种情况的原因的任何信息。
非常感谢任何帮助!
检查您的令牌值。如果您复制该字符串并转到 http://jwt.calebb.net/,您可以将其粘贴并解析出来。检查 scp
声明并确保 Mail.Send
存在。
我也一直在尝试使用 OutlookServicesClient 的 SendMailAsync 方法并收到了未经授权的响应。
Fiddler 显示令牌未包含在 SendMailAsync 创建的请求中,但是我可以看到当 OutlookServicesClient 生成 Get 请求时包含令牌阅读消息。 this GitHub issue 为我证实了这一点,它还声明它曾经在库的 1.0.22 版本中工作,但从 1.0.34 版本开始就不行了。
再四处查看后,我发现其他人已经尝试过
OutlookServicesClient outlookClient = new OutlookServicesClient(new Uri("https://outlook.office.com/api/v2.0"),
async () =>
{
// already retrieved my AccessToken using AuthenticationContext
return AccessToken;
});
// Save to Drafts folder
await outlookClient.Me.Messages.AddMessageAsync(newMessage);
// Now send
await newMessage.SendAsync();
我的结论是 SendMailAsync 方法完全被破坏了。我们可以先将新邮件保存为草稿。