Получение вложений из Exchange Managed API с использованием ASP.NET Core
Я нахожусь в процессе создания надстройки Outlook, которая выполняет аутентификацию для внешнего API, который также находится в моем распоряжении. Для одной из моих функций я отправляю список идентификаторов вложений из надстройки в API. Затем я могу использовать эти идентификаторы, чтобы получить соответствующие вложения от Microsoft Managed API. Проблема в том, что из-за того, что я использую.NET Core, рекомендуемым библиотекам не хватает необходимой функциональности, необходимой для доступа к вложениям.
Вот код, который я пытаюсь использовать для доступа к вложениям из основного Microsoft.Exchange.WebServices
библиотека:
ServiceResponseCollection<GetAttachmentResponse> getAttachmentsResponse = service.GetAttachments(attachmentInfo.attachmentIds.ToArray(), null, new PropertySet(BasePropertySet.FirstClassProperties, ItemSchema.MimeContent));
if (getAttachmentsResponse.OverallResult == ServiceResult.Success)
{
foreach (var attachmentResponse in getAttachmentsResponse)
{
// removed logic for simplicity
}
}
Проблема в том, что первая строка кода выдает ошибку, если я не добавляю .Result
в конце этого. Это какой-то недостаток в.NET Core версии библиотеки. Когда я иду с ним, задача никогда не покидает статус Awaiting Action
или что-то подобное.
Другая библиотека, которая предположительно настроена для.NET Core, Microsoft.Exchange.WebServices.NETStandard
,
Вот код, который я нашел, который должен работать:
var getAttachmentsResponse = service.GetAttachments(attachmentInfo.attachmentIds.ToArray(), null, new PropertySet(BasePropertySet.FirstClassProperties, ItemSchema.MimeContent));
foreach (var attachmentResponse in getAttachmentsResponse)
{
// removed logic for simplicity
}
В этом примере объектные модели отличаются, и даже нет Overall Result
на ответ. Не говоря уже о том, что вызов немедленно завершается с ошибкой о наличии дублирующего ключа. Я помню, что где-то читал, что этот метод принимает только учетные данные имени пользователя и пароля.
У кого-нибудь есть какие-либо другие решения, которые могли бы помочь мне получать вложения из электронных писем Outlook от моего API? Я что-то упускаю до боли?
1 ответ
Вы также можете использовать Outlook REST Endpoint для сообщений и календаря для извлечения вложений, которые будут возвращать все вложения в виде элементов массива с данными в формате JSON.
var currentAttachments ;
function getAttachments()
{
var options ={
isRest: true,
asyncContext: { message: 'Hello World!' }
};
Office.context.mailbox.getCallbackTokenAsync(options, getAttachment);
function getAttachment(asyncResult)
{
var token = asyncResult.value;
var getAttachmentsUrl = Office.context.mailbox.restUrl +
'/v2.0/me/messages/' + Office.context.mailbox.convertToRestId(Office.context.mailbox.item.itemId, Office.MailboxEnums.RestVersion.v2_0) + '/attachments';
$.ajax({
url: getAttachmentsUrl,
contentType: 'application/json',
type: 'get',
headers: { 'Authorization': 'Bearer ' + token }
}).done(function (item) {
currentAttachments = item;
}).fail(function (error) {
console.log(error);
});
}
}
// Then we can use Foreach Loop to iterate through these attachments
var outputStringFromRest = "";
for (i = 0; i < currentAttachments.value.length; i++) {
var _att = currentAttachments.value[i];
outputStringFromRest += "<BR>" + i + ". Name: ";
outputStringFromRest += _att.Name;
outputStringFromRest += "<BR>ID: " + _att.Id;
outputStringFromRest += "<BR>contentType: " + _att.ContentType;
outputStringFromRest += "<BR>size: " + _att.Size;
outputStringFromRest += "<BR>attachmentType: " + "file";
outputStringFromRest += "<BR>isInline: " + _att.IsInline;
}