1

我正在使用 REST API 从 Office 365 帐户收集电子邮件的内容,然后使用它通过 iframe 在基于 Web 的单独平台中显示电子邮件(以避免 css 冲突)。

但是,嵌入的图像和表情符号都显示为损坏的图像,因为它们是 CID 嵌入的。

这是我从 API 返回的内容......

<img size="96043" contenttype="image/png" id="img295971" tabindex="0" style="max-width: 99.9%; -webkit-user-select: none;" src="cid:1af2f0cb-83b4-46b7-aad6-8ea69256282c">

如果我在 Office 365 中查看相同的电子邮件,这就是它的外观...

<img originalsrc="cid:1af2f0cb-83b4-46b7-aad6-8ea69256282c" data-custom="EAMkADc2ZjU0ZjU5LTVmOTAtNDZiZC05ZTMyLWFmYTBmNTBkMTc2NQBGAAAAAACbfH93Aq8QSYpfwBCQxPfnBwDmFINdPPDZS5lgCNopiLnYAAAAAAEMAADmFINdPPHZS5lgCNopiLnYAABYntBTAAABEgAQAOVziLpVtbxHtEZu7MUJkA0%3D" src="service.svc/s/GetFileAttachment?id=EAMkADc2ZjU0ZjU5LTVmOTAtNDZiZC05ZTMyLWFmYTBmNTBkMTc2NQBGAAAAAACbfH93Aq8QSYpfwBCQxPfnBwDmFINdPPDZS5lgCNopiLnYAAAAAAEMAADmFINdPPHZS5lgCNopiLnYAABYntBTAAABEgAQAOVziLpVtbxHtEZu7MUJkA0%3D&amp;X-OWA-CANARY=Dg0nza5wGEudJBx_zc2m9bCVF8Ea6dIYZGUuP-qzYHeYA49c7Ddf2wAF8k5zVa6hpRn6AhTjnaE." id="img295971" style="display: inline; max-width: 100%;">

关于我需要做什么来显示这些图像的任何想法?

4

2 回答 2

0

这可能不是一个完整的答案,但这是我们处理它的方式。@hom nom 是正确的,每个图像都附有 CID 信息。但是,这本身并不能为您提供显示它的直接方式。但是,REST 数据确实包含 AttachmentContent 和 ContentId (CID)。所以我们将内容保存到我们可以引用的地方,然后将 CID 图像 URL 替换为我们的本地图像 URL。很想听听是否有人找到了更好的解决方案。

具体来说:获取消息的附件:

private List<Attachment> GetMessageAttachments(string messageId, string recipientId)
    {
        IMessageAttachmentsCollectionPage newAttachments = null;
        List<Attachment> returnAttachments = new List<Attachment>();
        var nextRequest = graphClient.Users[recipientId].Messages[messageId].Attachments.Request();
        while (nextRequest != null)
        {
            newAttachments = nextRequest.GetAsync().Result;
            returnAttachments.AddRange(newAttachments);
            nextRequest = newAttachments.NextPageRequest;
        }
        return returnAttachments;
    }

获取附件内容:

public byte[] GetAttachmentBody(string userId, string messageId, string attachmentId)
    {
        string url = $"Users/{userId}/messages/{messageId}/attachments/{attachmentId}/$value";

        RestRequest request = new RestRequest(url, Method.GET);
        IRestResponse response = restClient.Execute(request);
        if (response.StatusCode != System.Net.HttpStatusCode.OK) throw new HttpRequestValidationException($"Invalid response: {response.Content}");
        return Encoding.ASCII.GetBytes(response.Content);
    }

MS Graph 文档中的更多详细信息:

于 2021-08-09T13:36:44.577 回答
-1

您可以尝试使用消息 ID 获取附件列表。(不要担心 HasAttachments => false)。您将获得所有 CID 嵌入式图像文件。

于 2016-03-14T06:04:32.353 回答