Как правильно ответить на электронное письмо с помощью Outlook REST API

Я использую API REST Outlook. При ответе я создаю reply или replyall сообщение после эти инструкции.

В моем клиентском приложении обновляются некоторые свойства, например Body, и сообщение можно отправить. Я хочу, чтобы мои конечные пользователи имели доступ к предыдущему сообщению при ответе (как и многие почтовые клиенты). Следовательно, я добавил тег <hr tabindex="-1" style="display:inline-block; width: 98 %">, а затем вставил предыдущую почту Body.Content.

Моя проблема заключается в том, что свойство UniqueBody недоступно для записи. Outlook не может распознать предыдущую часть электронной почты в этом вновь созданном элементе. Другими словами, UniqueBody и Body содержат одно и то же: ответ и исходное сообщение. Как правильно установить эти свойства?


person Benoit Patra    schedule 30.01.2017    source источник
comment
Можете ли вы привести пример? Я попробовал простой сценарий, и если я ИСПРАВЛЯЮ ответ после его создания и устанавливаю для основного текста значение «Новый контент» + «Старый контент», UniqueBody показывает мне только новый контент. Однако я могу упустить какой-то конкретный шаг из вашего сценария.   -  person Jason Johnston    schedule 09.02.2017
comment
Спасибо за Ваш ответ. Ничего, если я отправлю вам запросы скрипача? Вы пробовали с телом HTML или телом текста?   -  person Benoit Patra    schedule 09.02.2017
comment
Конечно, отправьте их мне. Сообщение, которое я пробовал, было текстовым телом.   -  person Jason Johnston    schedule 09.02.2017


Ответы (1)


Когда вы используете /createreply, /createreplyall или /createforward в сообщении, API создает черновик сообщения в папке Drafts и копирует ряд свойств исходного сообщения в этот черновик. Например, он может скопировать тему и добавить к ней «RE:» и тому подобное.

Для тела он генерирует горизонтальную линию и сводку информации («От», «Отправлено», «Кому» и т. д., с которыми мы все знакомы). Затем он добавляет тело исходного сообщения внизу.

Сразу после создания свойство Body черновика ответа/пересылки будет содержать все эти элементы. Сообщение, которое вы хотите добавить (содержимое фактического ответа), ДОЛЖНО идти непосредственно перед всем этим содержимым. Если вы следуете этому правилу, сервер обычно может определить, какая часть тела является «уникальной», и соответственно установить UniqueBody.

Ключевым моментом здесь является то, что НЕ ДОЛЖЕН брать текст исходного сообщения и добавлять его к новому тексту. Вместо этого возьмите тело из черновика сообщения. Таким образом, у вас есть горизонтальное правило и информационная сводка в точном формате, ожидаемом сервером.

Обычный текст

Если тело черновика ответа/пересылки представляет собой обычный текст (например, { "Body": {"ContentType": "Text", "Content": "..." }}), то это довольно просто. Сгенерируйте тело как:

var newBody = 'This is my response to your message.' + draftReply.Body.Content;

var patchPayload = {
  'Body': { 
    'ContentType': 'Text',
    'Content': newBody
  }
};

HTML

Если тело черновика ответа/пересылки — HTML, это немного сложнее. Хотя вы можете загрузить HTML-код и, по сути, добавить новый контент сразу после тега <body>, вы можете немного упростить ситуацию, создав свой ответ в виде отдельного HTML-документа.

var newBody = `<html><body><div>This is my response to your message.</div></body></html>` + draftReply.Body.Content;

var patchPayload = {
  'Body': { 
    'ContentType': 'HTML',
    'Content': newBody
  }
};
person Jason Johnston    schedule 10.02.2017