C# 如何使用EWS获取电子邮件正文?
我收到Outlook收件箱中的电子邮件,并根据过滤器(发件人、主题、邮件)显示在电子邮件搜索屏幕上 除了电子邮件的正文外,我可以获取所有内容: OutlookRepository.cs:C# 如何使用EWS获取电子邮件正文?,c#,outlook,exchangewebservices,C#,Outlook,Exchangewebservices,我收到Outlook收件箱中的电子邮件,并根据过滤器(发件人、主题、邮件)显示在电子邮件搜索屏幕上 除了电子邮件的正文外,我可以获取所有内容: OutlookRepository.cs: public FindItemsResults<Item> GetEmails(string loginUsuario, string de, string assunto, string conteudo, WellKnownFolderName pasta = WellKnownFolderNa
public FindItemsResults<Item> GetEmails(string loginUsuario, string de, string assunto, string conteudo, WellKnownFolderName pasta = WellKnownFolderName.Inbox)
{
ExchangeService service = GetExchangeService(loginUsuario);
var inbox = Folder.Bind(service, WellKnownFolderName.Inbox);
SearchFilter sf = null;
// Search by Sender
if (!string.IsNullOrWhiteSpace(de))
sf = new SearchFilter.SearchFilterCollection(LogicalOperator.And, new SearchFilter.ContainsSubstring(EmailMessageSchema.From, de));
// Search by Subject
if (!string.IsNullOrWhiteSpace(assunto))
sf = new SearchFilter.SearchFilterCollection(LogicalOperator.Or, new SearchFilter.ContainsSubstring(EmailMessageSchema.Subject, assunto));
// Search by Body
if (!string.IsNullOrWhiteSpace(conteudo))
sf = new SearchFilter.SearchFilterCollection(LogicalOperator.Or, new SearchFilter.ContainsSubstring(EmailMessageSchema.Body, conteudo));
var view = new ItemView(100);
var emails = service.FindItems(pasta, sf, view);
return emails;
}
public JsonResult PesquisarEmails(string de, string assunto, string conteudo)
{
FindItemsResults<Item> emails = ServiceFactory.GetService<IComunicacaoService>(true).RecuperarEmails(UsuarioAutenticado.Funcionario.Login, de, assunto, conteudo);
var lista = new List<EmailFormatado>();
foreach (Item email in emails)
{
lista.Add(new EmailFormatado()
{
DataEmail = email.DateTimeReceived.FormatarDataCompleta(),
Remetente = (email as EmailMessage).From.Address,
AssuntoEmail = email.Subject,
Descricao = email.TextBody
});
}
return Json(lista, JsonRequestBehavior.AllowGet);
}
public FindItemsResults GetEmails(字符串loginUsuario、字符串de、字符串assunto、字符串conteudo、WellKnownFolderName=WellKnownFolderName.Inbox)
{
ExchangeService服务=GetExchangeService(loginUsuario);
var inbox=Folder.Bind(服务,WellKnownFolderName.inbox);
SearchFilter sf=null;
//按发件人搜索
如果(!string.IsNullOrWhiteSpace(de))
sf=新的SearchFilter.SearchFilterCollection(LogicalOperator.And,新的SearchFilter.ContainsSubstring(EmailMessageSchema.From,de));
//按主题搜索
如果(!string.IsNullOrWhiteSpace(assunto))
sf=新的SearchFilter.SearchFilterCollection(LogicalOperator.Or,新的SearchFilter.ContainsSubstring(EmailMessageSchema.Subject,Assto));
//尸体搜查
如果(!string.IsNullOrWhiteSpace(conteudo))
sf=新的SearchFilter.SearchFilterCollection(LogicalOperator.Or,新的SearchFilter.ContainsSubstring(EmailMessageSchema.Body,conteudo));
var视图=新项目视图(100);
var emails=service.FindItems(意大利面、sf、视图);
回复邮件;
}
返回“emails”时,Body抛出异常:Body=”(new System.Linq.SystemCore\u EnumerableDebugView(emails.Items[0])。Body'抛出类型为“Microsoft.Exchange.WebServices.Data.ServiceObjectPropertyException”的异常。
EmailController.cs:
public FindItemsResults<Item> GetEmails(string loginUsuario, string de, string assunto, string conteudo, WellKnownFolderName pasta = WellKnownFolderName.Inbox)
{
ExchangeService service = GetExchangeService(loginUsuario);
var inbox = Folder.Bind(service, WellKnownFolderName.Inbox);
SearchFilter sf = null;
// Search by Sender
if (!string.IsNullOrWhiteSpace(de))
sf = new SearchFilter.SearchFilterCollection(LogicalOperator.And, new SearchFilter.ContainsSubstring(EmailMessageSchema.From, de));
// Search by Subject
if (!string.IsNullOrWhiteSpace(assunto))
sf = new SearchFilter.SearchFilterCollection(LogicalOperator.Or, new SearchFilter.ContainsSubstring(EmailMessageSchema.Subject, assunto));
// Search by Body
if (!string.IsNullOrWhiteSpace(conteudo))
sf = new SearchFilter.SearchFilterCollection(LogicalOperator.Or, new SearchFilter.ContainsSubstring(EmailMessageSchema.Body, conteudo));
var view = new ItemView(100);
var emails = service.FindItems(pasta, sf, view);
return emails;
}
public JsonResult PesquisarEmails(string de, string assunto, string conteudo)
{
FindItemsResults<Item> emails = ServiceFactory.GetService<IComunicacaoService>(true).RecuperarEmails(UsuarioAutenticado.Funcionario.Login, de, assunto, conteudo);
var lista = new List<EmailFormatado>();
foreach (Item email in emails)
{
lista.Add(new EmailFormatado()
{
DataEmail = email.DateTimeReceived.FormatarDataCompleta(),
Remetente = (email as EmailMessage).From.Address,
AssuntoEmail = email.Subject,
Descricao = email.TextBody
});
}
return Json(lista, JsonRequestBehavior.AllowGet);
}
public JsonResult PesquisarEmails(字符串de、字符串assunto、字符串conteudo)
{
FindItemsResults emails=ServiceFactory.GetService(true).RecuroperaRemails(通常为autenticado.functionario.Login、de、assto、conteudo);
var lista=新列表();
foreach(邮件中的邮件)
{
添加(新的EmailFormatado()
{
DataEmail=email.DateTimeReceived.FormataDataCompleta(),
提醒=(以EmailMessage的形式发送电子邮件)。From.Address,
AssuntoEmail=email.Subject,
descripcao=email.TextBody
});
}
返回Json(lista,JsonRequestBehavior.AllowGet);
}
尝试使用“email.TextBody”和“email.Body”,但引发了一个异常:
email.TextBody='email.TextBody'引发了类型为'Microsoft.Exchange.WebServices.Data.ServiceObjectPropertyException'的异常。
有什么帮助吗?findItem操作只返回项目属性的一个子集,而不会返回正文(from.address也不会返回)。因此,您需要在代码中加载每个项目(从性能角度来看,这是个坏主意)或LoadPropertiesFromItems,例如
service.LoadPropertiesForItems(emails, PropertySet.FirstClassProperties);
findItem操作只返回项属性的子集,而不会返回正文(from.address也不会返回)。因此,您需要在代码中加载每个项(从性能角度来看这是个坏主意)或加载来自项的属性,例如
service.LoadPropertiesForItems(emails, PropertySet.FirstClassProperties);