1

如果我將同一封電子郵件發送到兩個不同的郵箱,我希望能夠判斷這些郵箱是否是同一封電子郵件。我如何知道兩個郵箱在兩個不同的郵箱中是相同的?

問題在於兩個電子郵件的itemId是不同的。而且我無法想象從兩個相同的電子郵件中獲得唯一標識符的方法。

從JS Office對象,我只得到itemId(即改變)通過:Office.context.mailbox.item.itemIdDocumentation

所以我一直試圖找到通過別的東西從EWS託管API:

EmailMessage.Bind(service, mail.ItemId, new PropertySet(ItemSchema.Id)); 

但我找不到任何有用的財產ItemSchema。 (ItemSchema documentation

如何知道在兩個不同的郵箱中有兩封郵件是相同的?

有沒有辦法比較兩個ID?

+0

@MrPiao如果你看了我提供的代碼,我使用Office來自office365-apps上下文的對象。 – Elfayer

+0

你說得對,我的錯。 – MrPiao

回答

1

對此沒有100%的答案。它們實際上是兩個單獨的副本,所以它們之間沒有實際的聯繫。您可能能夠檢索RFC 822消息ID(嘗試InternetMessageHeaders屬性)並對其進行比較,但您會假設在檢索該值之前沒有任何修改該值。

+0

什麼可以改變'Message-ID'? – Elfayer

+0

傳輸代理,傳送鏈中的任何服務器(儘管它們可能不應該),其他訪問消息的應用程序等等。 –

0

我想添加一些代碼給@JasonJohnston答案。

C#

[HttpPost] 
public List<InternetMessageHeader> GetMailHeader(MailRequest request) { 
    ExchangeService service = new ExchangeService(); 
    service.Credentials = new OAuthCredentials(request.AuthenticationToken); 
    service.Url = new Uri(request.EwsUrl); 

    ItemId id = new ItemId(request.ItemId); 
    EmailMessage email = EmailMessage.Bind(service, id, new PropertySet(ItemSchema.InternetMessageHeaders)); 

    if (email.InternetMessageHeaders == null) 
     return null; 

    return email.InternetMessageHeaders.ToList(); 
} 

JS(使用AngularJS在這裏,但你的想法)

// Request headers from server 
getMailHeader() 
    .then(function(response) { 
    var headers = response.data; 
    var messageId = findHeader("Message-ID"); // Here you get the Message-ID 

    function findHeader(name) { 
     for (var i in headers) { 
     if (name == headers[i].Name) { 
      return headers[i].Value; 
     } 
     } 
     return null; 
    } 
    }, function(reason) { 
    console.log(reason); 
    }); 

function getMailHeader() { 
    var promise = $q(function(resolve, reject) { 
    // Office.context.mailbox.getCallbackTokenAsync(callback); 
    outlookService.getCallbackTokenAsync(function(asyncResult, userContext) { 
     if (asyncResult.status == "succeeded") { 
     $http({ 
      method: "POST", 
      url: serverUrl + "/api/exchange/getMailHeader", 
      data: JSON.stringify({ 
      authenticationToken: asyncResult.value, 
      ewsUrl: outlookService.ewsUrl, // Office.context.mailbox.ewsUrl 
      itemId: outlookService.itemId // Office.context.mailbox.item.itemId 
      }) 
     }).then(resolve, reject); 
     } else { 
     reject("ERROR"); 
     } 
    }); 
    }); 
    return promise; 
} 
相關問題