【问题标题】:Get original message with headers when forwarding message before sending in EWS在 EWS 中发送之前转发消息时获取带有标头的原始消息
【发布时间】:2012-02-28 14:17:41
【问题描述】:

我正在尝试提供一种转发电子邮件的方法,就像我们在 Outlook 中所做的那样。当用户单击前进时,它会打开一个顶部带有原始消息和标题信息的表单,让用户有机会修改正文。要获取消息,我执行以下操作。

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

我收到带有消息的ServiceObjectPropertyException “您必须先加载或分配此属性,然后才能读取其值”。如果我在访问之前尝试加载 body 属性的值,我会得到 NotSupportedException 并显示消息 “不支持指定的方法”。有没有办法在实际发送之前获取转发消息?

【问题讨论】:

  • 您需要分享您是如何填充dataGridEmail 的,特别是带有ItemView 参数的FindItems() 调用。
  • var exchangeService = new ExchangeService(ExchangeVersion.Exchange2010_SP1); var itemView = new ItemView(100); listItems = exchangeService.FindItems(WellKnownFolderName.Inbox, itemView); PropertySet ps = new PropertySet(); ps.Add(EmailMessageSchema.Attachments); ... ps.Add(EmailMessageSchema.Body); exchangeService.LoadPropertiesForItems(listItems, ps); dataGridEmail.ItemsSource = listItems;
  • 感谢分享相关来源,请看下方回复。

标签: exchangewebservices email-forwarding


【解决方案1】:

您应该使用item.Body 来填充您的textBlockForward 控件,而不是使用forward.Body。详情请见Forwarding Email Messages using EWS on 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

【讨论】:

  • 在 Outlook 中,当您单击回复或转发时,它会显示 FromSentTo、抄送、主题信息以及原始邮件。我想我可以自己添加这些信息,但我想知道是否有办法从某个地方获取这些信息。我知道当我调用 forward.Send 方法时,EWS 在正文中添加标头、原始消息以及 BodyPrefix,但我想知道是否有办法在发送之前获取该消息,以便用户可以查看它。
  • @stellkang - 您需要自己从原始消息中获取这些属性(通过明确的PropertySet)。您可以将它们加载到您的初始 LoadPropertiesForItems() 中,或者仅将 Item.Bind 用于请求转发的项目。
  • 我在 Redemption 中寻找 RDOMail.Forward() 的等价物,它返回一个 RDOMail 对象,其正文填充了标头信息。我猜它在 EWS 中不存在。不过,感谢您的 cmets!
  • @stellkang - 很高兴为您提供帮助!如果它解决了您的问题,请将此答案标记为正确,以便其他人受益。
  • 嗯,它并没有解决我的问题,但我想发现没有这样的功能也是一个答案,所以我将其标记为正确。谢谢!
【解决方案2】:

我很确定是否有人可以解决这个问题。这就是我所做的。

    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();

【讨论】:

    猜你喜欢
    • 2015-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多