9

Recientemente he codificado una aplicación .NET Console usando C#. Su propósito era leer los correos electrónicos dentro de una carpeta específica, analizarlos para valores específicos y guardarlos en una base de datos.No puedo acceder a las carpetas públicas root

Nuestro sistema de correo electrónico, en el momento en que originalmente codificaba esto, era Exchange 2003. Sin embargo, me hicieron consciente de que pronto nos estaríamos actualizando a Exchange 2010: ergo, construí el código para trabajar en ambos entornos.

Tras la migración a Exchange 2010, sin embargo, la aplicación se ha roto.

La aplicación utiliza la API de EWS para la funcionalidad de 2010. Cuando intenta utilizar el método FindFolders de ExchangeService para encontrar la raíz de carpetas públicas, arroja una excepción. Aquí está el código:

ExchangeService service = new ExchangeService(); 
FindFoldersResults findRootFldrs; 

service.UseDefaultCredentials = true; 
service.AutodiscoverUrl("[email protected]", delegate(string x) { 
return true; }); 

FolderView fview = new FolderView(100); 
fview.Traversal = FolderTraversal.Deep; 

findRootFldrs = service.FindFolders(WellKnownFolderName.PublicFoldersRoot, 
fview); 

La excepción: ErrorInvalidSchemaVersionForMailboxVersion, también conocido como:

El buzón que se solicita no es compatible con el RequestServerVersion especificada

que he intentado:

  • Configurando el servicio de intercambio a 2007 (arroja un excepción: "Se produjo un error interno del servidor. La operación ha fallado. ")

  • entregándome el más alto nivel de permiso para la carpeta pública (sin efecto)

  • La configuración manual de mis credenciales (sin efecto)

puedo ver el carpetas públicas en Outlook 2007; la propiedad publicfoldersroot está disponible en intellisense; el código funciona en carpetas locales (puedo analizar mi bandeja de entrada).

Mi idea actual es que se trata de una configuración reciente de Exchang e 2010: desafortunadamente ese no es realmente mi campo. La excepción me dice que está tratando de usar una versión anterior de Exchange. Establecerlo en 2007 simplemente hace que el código falle con un error interno del servidor.

Respuesta

1

cambiar esta línea:

ExchangeService service = new ExchangeService(); 

a algo como esto:

ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010); 

o

ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP1); 

Según su versión.

1

Mensaje viejo, pero esto resultó ser la respuesta para mí: http://technet.microsoft.com/en-us/library/bb629522.aspx

Esencialmente la cuenta utilizada para conectarse con sistemas de alerta temprana tenía un buzón de correo en una base de datos de buzón cuya público predeterminado servidor de carpetas seguía siendo el intercambio 2003. Todas y cada una todos los intentos de enumerar carpetas públicas a través de EWS fallaron. Cambiarlo por un servidor backend 2010 lo curó al instante.

Cuestiones relacionadas