当前位置: 首页 > 知识库问答 >
问题:

Office 365客户端API SendMailAsync返回未经授权

龙晟睿
2023-03-14

我正在尝试从我的 ASP MVC Web 应用程序在 C# 中设置 Office 365 集成,为此我使用的是 Outlook Mail REST API(客户端版本)。我一直在这里使用 API 参考:https://msdn.microsoft.com/office/office365/APi/mail-rest-operations

我可以登录Office 365,并获取令牌,然后读取邮件文件夹(即已发送邮件/收件箱),但当我尝试发送电子邮件时,我会收到以下错误:

未经授权

说明:在执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其在代码中起源的更多信息。

异常详细信息:Microsoft。OData . client . dataserviceclientexception:未授权

我添加了读/写和发送电子邮件的权限,因此当我登录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 

所以我认为“按你的方式发送邮件”是我需要的。然而,我仍然得到未经授权的错误信息。

这是我运行以发送电子邮件的代码:

    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时,错误发生在最后一行。我真的不确定还有什么可以尝试,也找不到任何关于什么会导致这种情况的信息。

任何帮助都非常感谢!

共有2个答案

双元魁
2023-03-14

检查您的令牌值。如果复制字符串并转到http://jwt.calebb.net/,您可以将其粘贴并进行解析。检查<code>scp</code>声明并确保<code>邮件。发送在那里。

冯卓
2023-03-14

我还尝试使用OutlookServicesClient的SendMailAsync方法,并收到了未经授权的响应。

Fiddler透露,令牌不包含在SendMailAsync创建的请求中,但是我可以看到当OutlookServicesClient生成Get请求以读取消息时,该令牌包含在内。这个 GitHub 问题为我证实了这一点,该问题还指出它曾经在库的 1.0.22 版中工作,但自 1.0.34 版以来就不能了。

在环顾四周后,我发现其他人已经尝试了另一种发送邮件的html" target="_blank">方法,首先创建一个草稿,然后发送它。这是看起来像这样:

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方法被破坏了。通过首先将新消息保存为草稿,我们可以解决它。

 类似资料:
  • 我的授权码请求: 我正在用这个得到授权码。但是每当我使用此代码发送access_token请求时,我都会得到一个错误。(代码400)

  • 我努力做到这一点,但完成了一半的工作。 实际上,如果我尝试使用Gmail,我只能从Gmail API读取消息。修改范围我收到错误: HttpAccessTokenRefreshError:unauthorized\u客户端:请求中的未授权客户端或作用域。 这是我的代码: 在我的服务号: 我已将所有可能的资源设置到我的服务帐户“…iam.gserviceaccount.com” 我激活了DWD:DW

  • 问题内容: 我正在通过ElasticSearch NEST C#客户端运行一个简单的查询。通过http运行相同的查询时收到结果,但是从客户端返回的文档数量为零。 这就是我填充数据集的方式: 此POST请求返回JSON结果: 这是我没有返回任何代码的代码。 我想念什么?提前致谢 .. 问题答案: NEST尝试猜测类型和索引名称,在您的情况下,它将使用/ blog / blogentries 因为您告

  • 所以,我试图用Tweepy喜欢一个推文,但是这个错误正在发生: 有什么想法吗?

  • 我正在使用postman,并尝试通过http://localhost:8180/auth/admin/realms/demo/users/{userID}更新用户的配置文件,但收到响应。 通过http://localhost:8180/auth/admin/realms/demo/users/{userID}发送带有Json内容类型和用户信息的Put请求。 不幸的是,我已经连续收到了401个回复。

  • 我正在尝试使用Python脚本和Tweepy API阻止Twitter用户。我能够毫无问题地提取用户、ID、追随者和推文。当我尝试调用