首页 > 解决方案 > React/Graph - 将电子邮件移动到 Outlook Web 加载项中的新文件夹

问题描述

如标题所述,我正在尝试将电子邮件移至当前邮箱中的新文件夹。

我使用 Yeoman 创建了一个 React Outlook Web 插件项目,但由于我是新手,所以我很难找到正确的方法来做这件事。我发现要在基于 ajax 的加载项中使用 Graph,我可以获得一个回调令牌并使用以下代码调用其余 url:

Office.context.mailbox.getCallbackTokenAsync({ isRest: true }, function (result) {
if (result.status === "succeeded") {
    var accessToken = result.value;

    // Use the access token.
    getCurrentItem(accessToken);
} else {
    // Handle the error.
}
});

function getCurrentItem(accessToken) {
var itemId = getItemRestId();

var restHost = Office.context.mailbox.restUrl;
var moveMessageUrl = restHost + '/v2.0/me/messages/' + itemID + '/move';

$.ajax({
    url: moveMessageUrl,
    type: "POST",
    dataType: 'json',
    headers: { 'Authorization': 'Bearer ' + accessToken },
    data: { 'destinationId': 'notes' },
    contentType: 'application/json'
  }).done(function(item){
     console.log("Success");
  }).fail(function(error){
     console.log("Error");
});
}

我如何在反应中实现这一点?

我努力了

click = async () => {
    Office.context.mailbox.getCallbackTokenAsync({ isRest: true }, function (result) {
      if (result.status === "succeeded") {
        App.setState({accessToken: result.value});
          console.log(accessToken);
          App.getCurrentItem();
      } else {
          // Handle the error.
      }
  });

getCurrentItem = async () =>  {
    var itemId = getItemRestId();
    
    var restHost = Office.context.mailbox.restUrl;
    var moveMessageUrl = restHost + '/v2.0/me/messages/' + itemID + '/move';
    
    $.ajax({
        url: moveMessageUrl,
        type: "POST",
        dataType: 'json',
        headers: { 'Authorization': 'Bearer ' + accessToken },
        data: { 'destinationId': 'notes' },
        contentType: 'application/json'
      }).done(function(item){
         console.log("Success");
      }).fail(function(error){
         console.log("Error");
    });
}

但两者都不是setSate或不在getCurrentItem“this”或“App”中,如this.setSate. 另外,当我尝试像 js 代码一样离开它而不设置状态时,只是传递一个变量,getCurrentItem找不到函数。我也试过

getCurrentItem = (accessToken) = async () =>  {...

也许应该以完全不同的方式完成,我愿意倾听和尝试。

任何帮助都将受到欢迎!

我咨询过的参考资料:

https://docs.microsoft.com/en-us/office/dev/add-ins/outlook/authentication

https://docs.microsoft.com/en-us/previous-versions/office/office-365-api/api/version-2.0/use-outlook-rest-api

https://docs.microsoft.com/en-us/exchange/client-developer/exchange-web-services/explore-the-ews-managed-api-ews-and-web-services-in-exchange

https://docs.microsoft.com/en-us/graph/api/message-move?view=graph-rest-1.0&tabs=http

https://docs.microsoft.com/en-us/outlook/rest/#outlook-rest-api-via-microsoft-graph

https://docs.microsoft.com/en-us/office/dev/add-ins/outlook/use-rest-api

https://docs.microsoft.com/en-us/office/dev/add-ins/tutorials/outlook-tutorial

https://docs.microsoft.com/en-us/office/dev/add-ins/design/using-office-ui-fabric-react

标签: reactjsmicrosoft-graph-apioffice-addinsoutlook-web-addins

解决方案


推荐阅读