Exchange Web Service引发异常:您必须加载或分配此属性才能读取其值;发送电子邮件时



目前我正在使用Exchange Web服务和c#实现发送回复电子邮件的代码。在调试时,我遇到了这个异常。

#异常

Microsoft.Exchange.WebServices.Data.ServiceObjectPropertyException
HResult=0x80131500
Message=You must load or assign this property before you can read its value.
Source=Microsoft.Exchange.WebServices
StackTrace:
at Microsoft.Exchange.WebServices.Data.PropertyBag.get_Item(PropertyDefinition propertyDefinition)
at Microsoft.Exchange.WebServices.Data.Item.get_Body()
at DataLoadLibrary.DataLoad.Email.TestPortRequestOauthBased.startDataload() in C:UsersaadityaradhakrishnanDevelopmentIPACTROBipact-robDataLoadLibraryDataLoadEmailTestPortRequestOauthBased.cs:line 113
at TestPortEmailReader.Program.<Main>d__8.MoveNext() in C:PathTestPortEmailReaderProgram.cs:line 87
This exception was originally thrown at this call stack:
[External Code]
DataLoadLibrary.DataLoad.Email.TestPortRequestOauthBased.startDataload() in TestPortRequestOauthBased.cs
TestPortEmailReader.Program.Main(string[]) in Program.cs

#实现
public bool genericEmail(
string recepient,
string subject,
string bodyMessage,
Dictionary<string, string> replacementStrings = null,
string cc = "",
string bcc = "",
string headerMessage = "",
string footerMessage = "",
FileInfo[] attachments = null,
string[] filenames = null,
EmailMessage originalEmail = null,
ExchangeService exchangeClient = null)
{
EmailMessage email = new EmailMessage(exchangeClient);
email.Sender.Address= config.exchangeUsername + "@domain.com";
email.Sender.Name = "ABC";
if (recepient.Length == 0) {
email.ToRecipients.Add(ABCTeamEmail);
}
else
{
email.ToRecipients.Add(recepient.TrimEnd(';'));
}
if (cc.Length != 0)
email.CcRecipients.Add(cc.TrimEnd(';'));
if (config.environment != "PR")
{
email.Sender.Address = config.exchangeUsername + "@domain.com";
email.CcRecipients.Add(null); 
}
if (attachments != null)
{
int i = 0;
foreach (FileInfo fi in attachments)
{
FileStream theStream = new FileStream(fi.FullName, FileMode.OpenOrCreate);
if (filenames == null)
email.Attachments.AddFileAttachment(fi.Name, theStream);
else
email.Attachments.AddFileAttachment(filenames[i], theStream);
i++;
}
}
if (originalEmail != null)
{
string originalEmailFilename = config.extractFolder + "\Emails" + originalEmail.Subject.Trim().Replace('\', '_').Replace('/', '_').Replace(":", "_").Replace(""", "_").Replace("*", "_").Replace("?", "_").Replace("<", "_").Replace(">", "_").Replace("|", "_") + "_" + originalEmail.DateTimeReceived.ToString("yyyyMMdd_HHmmss") + ".msg";
originalEmail.Save(originalEmailFilename);
email.Attachments.AddFileAttachment(originalEmailFilename);

}
if (config.environment == "PR")
email.Subject = subject.Trim();
else
email.Subject = "[" + config.environment + "] " + subject.Trim();
if (replacementStrings != null)
{
foreach (KeyValuePair<string, string> kv in replacementStrings)
{
bodyMessage = bodyMessage.Replace(kv.Key, kv.Value);
}
}
bodyMessage = bodyMessage.Replace("{headerMessage}", headerMessage);
bodyMessage = bodyMessage.Replace("{footerMessage}", footerMessage);
email.Body = new MessageBody(bodyMessage);
email.Send();
return true;
}
}
ews_oauth_adapter.genericEmail(respondTo, "RE: " + msgDetail.Subject.ToString() + " Incorrect Physical Name", physcalNameErrorMessage + BottomOfEmail + "<br><br><hr><br>" + msgDetail.Body, null, cc, "", "", "", null, null, null, exchclient);

**在调用genericEmail函数时获得异常**

无法准确识别我的实现中的错误。经历了一些类似的问题,比如发送电子邮件时出错:你必须加载或分配这个属性才能读取它的值-EWS。但是在我的实现中没有发现同样的问题。

#更新
try
{
inbox_mails = tokenProvider.ReadEmailFromFolder(-5, 50, Inbox_ID.Id);
foreach (Item mailItem in inbox_mails)
{
EmailMessage mes = (EmailMessage)mailItem;
Console.WriteLine("nRunning message: " + mailItem.Subject.ToString() + " From: " + mes.From.ToString());
logger.log("nRunning message: " + mailItem.Subject.ToString() + " From: " + mes.From.ToString());
Console.WriteLine(mes.Body); // Showing the exception when trying to print the Mail Body.

//TestPortRequestOauthBased dataloader = new TestPortRequestOauthBased(config, logger, dbCommands, exchClient, mailItem);

}
Thread.Sleep(sleepInterval);
}
catch(Exception e)
{
Console.WriteLine("The operation timed out!! ");
Console.WriteLine(e.Message);
Console.WriteLine(e.StackTrace);
//ews_oauth_adapter.genericEmail(cc, "FATAL ERROR: Integration TestPort System", "System has crashed and needs to be restarted <br><br>" + e.Message + "<br>" + e.StackTrace, null, "", null, "", "", null, null, null);
throw e;
}
public FindItemsResults<Item> ReadEmailFromFolder(int mailSince, int mailLimt,  FolderId folder_id)
{
TimeSpan ts = new TimeSpan(mailSince, 0, 0, 0);
DateTime date = DateTime.Now.Add(ts);
SearchFilter.IsGreaterThanOrEqualTo filter = new SearchFilter.IsGreaterThanOrEqualTo(ItemSchema.DateTimeReceived, date);
var findResults = exchangeService.FindItems(folder_id, filter, new ItemView(mailLimt));
return findResults;
}

该错误告诉您试图加载您从未从EWS请求过的属性。当你调用这个函数时,你有

msgDetail。身体

你从哪里得到msgDetail的代码很可能你从来没有请求过在这段代码中返回消息的主体并且它在FindItems中默认没有返回所以msgDetail应该在某个点有一个加载

最新更新