我试图通过 EWS 托管 API 从 Exchange Server 获取电子邮件,设法连接到服务器,但是当我尝试获取电子邮件列表时,我总是收到“未将对象引用设置为对象的实例”。错误。任何人都可以帮助我做错了什么?
这是我为获取电子邮件而创建的程序:
public void MssPeekInboxEmails(string ssusername, string sspassword, out RLEmailDigestRecordList ssemails, out bool ssloginValid) {
// TODO: Write implementation for action
ssemails = new RLEmailDigestRecordList();
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
ExchangeService service = new ExchangeService();
service.Credentials = new NetworkCredential(ssusername, sspassword);
service.AutodiscoverUrl(ssusername, RedirectionCallback);
//service.Url = serviceUrl;
//ArrayList arrMessages = new ArrayList();
GenericExtendedActions.LogMessage(AppInfo.GetAppInfo().OsContext, "1", "EWS");
FindItemsResults<Item> findResults = null;
try
{
findResults = service.FindItems(WellKnownFolderName.Inbox, new ItemView(100));
}
catch
{
ssemails = new RLEmailDigestRecordList();
ssloginValid = false;
return;
}
service.LoadPropertiesForItems(findResults, PropertySet.FirstClassProperties);
GenericExtendedActions.LogMessage(AppInfo.GetAppInfo().OsContext, "2", "EWS");
foreach (EmailMessage item in findResults)
{
GenericExtendedActions.LogMessage(AppInfo.GetAppInfo().OsContext, "3", "EWS");
RCEmailDigestRecord element = new RCEmailDigestRecord();
element.ssSTEmailDigest.ssId = item.Id.UniqueId;
element.ssSTEmailDigest.ssFrom.ssSTEmailAddress.ssAddress = item.From.Address;
foreach (EmailAddress toElement in item.ToRecipients)
{
RCEmailAddressRecord record = new RCEmailAddressRecord();
record.ssSTEmailAddress.ssAddress = toElement.Address;
element.ssSTEmailDigest.ssTo = new RLEmailAddressRecordList();
element.ssSTEmailDigest.ssTo.Add(record);
}
element.ssSTEmailDigest.ssPriority = (int)item.Importance;
if (item.Subject.Length > EmailDigestSubjectLenght)
{
element.ssSTEmailDigest.ssSubject = item.Subject.Substring(0, EmailDigestSubjectLenght - 3);
element.ssSTEmailDigest.ssSubject += "...";
}
else
{
element.ssSTEmailDigest.ssSubject = item.Subject;
}
if (item.Body.Text.Length > EmailDigestBodyLenght)
{
element.ssSTEmailDigest.ssBody = item.Body.Text.Substring(0, EmailDigestBodyLenght - 3);
element.ssSTEmailDigest.ssBody += "...";
}
else
{
element.ssSTEmailDigest.ssBody = item.Body.Text;
}
element.ssSTEmailDigest.ssHasAttachment = (item.Attachments.Count > 0);
ssemails.Add(element);
ssloginValid = true;
}
GenericExtendedActions.LogMessage(AppInfo.GetAppInfo().OsContext, "4", "EWS");
ssloginValid = true;
} // MssPeekInboxEmailsenter code here
所以在检查我的代码后,我自己发现了问题。它在这条特定线上
RCEmailDigestRecord element = new RCEmailDigestRecord();
我改成
RCEmailDigestRecord element = new RCEmailDigestRecord(null);
现在可以正常工作了。
很抱歉没有提到错误是哪一行,因为我匆忙创建了这个程序并且它正在另一个平台(外系统)上使用,这使得无法直接从 Visual Studio 调试它。