Получить исходное сообщение с заголовками при пересылке сообщения перед отправкой в ​​EWS

Я пытаюсь предоставить способ пересылки электронной почты, как мы это делаем в Outlook. Когда пользователь щелкает вперед, открывается форма с исходным сообщением и информацией заголовка сверху, что дает пользователю возможность изменить тело. Чтобы получить сообщение, я делаю следующее.

    var item = (EmailMessage)dataGridEmail.SelectedItem;
    ResponseMessage forward = item.CreateForward();
    textBlockForward.Text = forward.Body;

Я получаю ServiceObjectPropertyException с сообщением "Вы должны загрузить или назначить это свойство, прежде чем сможете прочитать его значение". Если я попытаюсь загрузить значение свойства body перед доступом, я получу NotSupportedException с сообщением "Указанный метод не поддерживается". Есть ли способ получить сообщение о переадресации перед его отправкой?


person stellkang    schedule 28.02.2012    source источник
comment
Вам нужно поделиться тем, как вы заполняете dataGridEmail, в частности вызов FindItems() с параметром ItemView.   -  person SliverNinja - MSFT    schedule 28.02.2012
comment
спасибо, что поделились соответствующим источником, см. ответ ниже.   -  person SliverNinja - MSFT    schedule 28.02.2012


Ответы (2)


Вместо использования forward.Body вы должны использовать item.Body для заполнения элемента управления textBlockForward. См. раздел Пересылка сообщений электронной почты с помощью EWS в MSDN для более подробной информации.

var item = (EmailMessage)dataGridEmail.SelectedItem;
ResponseMessage forward = item.CreateForward();
textBlockForward.Text = item.Body; // needs to come from original message source
forward.BodyPrefix = "new body contents"; // prepended body content
person SliverNinja - MSFT    schedule 28.02.2012
comment
В Outlook, когда вы нажимаете «Ответить» или «Переслать», отображаются поля От, Отправлено, Кому, Копия, Информация Тема вместе с исходным сообщением. Думаю, я мог бы добавить эту информацию сам, но мне было интересно, есть ли способ получить это откуда-то. Я знаю, что когда я вызываю метод forward.Send, EWS добавляет заголовок, исходное сообщение и BodyPrefix в тело, но мне было интересно, есть ли способ получить это сообщение перед его отправкой, чтобы пользователь мог просмотреть его. - person stellkang; 28.02.2012
comment
@stellkang - вам нужно будет получить эти свойства (через явное PropertySet) из исходного сообщения самостоятельно. Вы можете загрузить их в свой начальный LoadPropertiesForItems() или с помощью Item.Bind только для элементов, запрошенных для пересылки. - person SliverNinja - MSFT; 28.02.2012
comment
Я искал эквивалент RDOMail.Forward() в Redemption, который возвращает объект RDOMail с телом, заполненным информацией заголовка. Я предполагаю, что это не существует в EWS. Но спасибо за ваши комментарии! - person stellkang; 28.02.2012
comment
@stellkang - Рад помочь вам! Пожалуйста, отметьте этот ответ как правильный, если он решил вашу проблему, чтобы другие могли получить пользу. - person SliverNinja - MSFT; 28.02.2012
comment
Ну, это не решило мою проблему, но я думаю, что узнать, что такой функциональности нет, это тоже ответ, поэтому я отмечу это как правильное. Спасибо! - person stellkang; 28.02.2012

Я уверен, что если кто-нибудь может решить эту проблему. Это то, что я сделал.

    ResponseMessage responseMessage = message.createForward(); 
    // message is an EmailMessage object
    responseMessage.setBodyPrefix(body);
    responseMessage.save(WellKnownFolderName.Drafts);
    EmailMessage saved = responseMessage.save();
    saved.load(new 
    PropertySet(BasePropertySet.FirstClassProperties,ItemSchema.Body));
    MessageBody messageBody = saved.getBody();
    // do something with messageBody`enter code here`
    //System.out.println(saved.getBody().toString());
    saved.sendAndSaveCopy();
person mannrecaged    schedule 06.04.2017