c# - 电子邮件发送期间读取值错误之前的 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;
}
}
我想寻求一些建议。谢谢你。
解决方案
在这些行中,您已将一个非常受限的属性集加载到 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);
推荐阅读
- reactjs - 向 Antd 表添加新行时,使其第一行可见?
- reactjs - 反应:反应表不呈现数据多个不同的状态变量
- html - Visual Studio Code:“使用 Live Server 打开”和“使用默认浏览器打开”显示不同的网页
- java - 使用 mybatis 调用传递整数数组的 Postgresql 函数
- javascript - React 如何在弹出窗口中显示单个数据
- python - 为什么'exec'在函数内部表现不同?
- file-permissions - Google Docs 时间驱动的文件权限更改
- java - 如何在使用 JSP/JSTL 的同时配置我的表达式语言以在 eclipse 中工作?只是JSP?
- c++ - 从原始指针返回智能指针
- android - 如何连接BLE设备并发送MTU请求并通过Service UUID逐步获取服务的特征UUID