首页 > 解决方案 > 电子邮件发送期间读取值错误之前的 EWS 加载属性

问题描述

我正在尝试将原始电子邮件作为附件附加到将发送出去的新电子邮件。

我遇到了以下错误:

消息:您必须先加载或分配此属性,然后才能读取其值。内部异常:堆栈跟踪:在 Microsoft.Exchange.WebServices.Data.PropertyBag.get_Item(PropertyDefinition propertyDefinition) 在 Microsoft.Exchange.WebServices.Data.EmailMessage.get_Sender() 在 Service1.Email.SendUpdateEmail(EmailMessage email, String caseNumber, String autoDiscoverUrl) 在 C:\trunk\SRC\Email.cs:line 160

下面是我的代码:

public static void SendUpdateMail(EmailMessage email, string caseNumber, string autoDiscoverUrl)
{
    ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
    service.UseDefaultCredentials = true;
    service.Credentials = CredentialCache.DefaultNetworkCredentials;

    try
    {
        service.AutodiscoverUrl(autoDiscoverUrl);
        EmailMessage mail = new EmailMessage(service);
        EmailMessage OriginalEmail = email;
        PropertySet psPropset = new PropertySet(BasePropertySet.IdOnly);
        psPropset.Add(ItemSchema.MimeContent);
        psPropset.Add(ItemSchema.Subject);
        OriginalEmail.Load(psPropset);
        ItemAttachment Attachment = mail.Attachments.AddItemAttachment<EmailMessage>();
        Attachment.Item.MimeContent = OriginalEmail.MimeContent;
        ExtendedPropertyDefinition PR_Flags = new ExtendedPropertyDefinition(3591, MapiPropertyType.Integer);
        Attachment.Item.SetExtendedProperty(PR_Flags, "1");
        Attachment.Name = OriginalEmail.Subject;
        mail.Subject = "Case Created";
        mail.ToRecipients.Add(OriginalEmail.Sender);
        mail.SendAndSaveCopy();
    }
    catch (Exception ex)
    {
        LogFile.AppendError(ex);
        throw ex;
    }
}

我想寻求一些建议。谢谢你。

标签: c#.netexchangewebservices

解决方案


在这些行中,您已将一个非常受限的属性集加载到 OriginalEmail

    PropertySet psPropset = new PropertySet(BasePropertySet.IdOnly);
    psPropset.Add(ItemSchema.MimeContent);
    psPropset.Add(ItemSchema.Subject);
    OriginalEmail.Load(psPropset);

然后您尝试访问发件人地址(这是错误告诉您它有问题的属性)

       mail.ToRecipients.Add(OriginalEmail.Sender);

因为您没有将 Sender 包含在 PropertySet 中,所以您会收到该错误,所以您需要做的就是将 EmailMessageSchema.Sender 添加到其中,例如

    PropertySet psPropset = new PropertySet(BasePropertySet.IdOnly);
    psPropset.Add(ItemSchema.MimeContent);
    psPropset.Add(ItemSchema.Subject);
    psPropset.Add(EmailMessageSchema.Sender);
    OriginalEmail.Load(psPropset);

推荐阅读