2012-02-10 13 views
13

Estoy intentando recuperar elementos de la bandeja de entrada de un buzón específico (en el que tengo permisos) utilizando la API administrada de los servicios web de Exchange. He probado el código primero usando mi propia dirección de correo electrónico a través de AutodiscoverUrl, y funciona bien. Sin embargo, cuando traté de usar la otra dirección de correo electrónico, EWS aún recupera mis propios elementos de la bandeja de entrada. ¿Esto se debe a un caché o algo?Elementos incorrectos del buzón que se recuperan mediante la API administrada de servicios web de Exchange en C#

Mi código es el siguiente:

ExchangeService ex = new ExchangeService(ExchangeVersion.Exchange2010_SP1); 
    ex.AutodiscoverUrl("[email protected]"); 

    FindItemsResults<Item> findResults = ex.FindItems(WellKnownFolderName.Inbox, new ItemView(10)); 

    foreach (Item item in findResults.Items) 
     Console.WriteLine(item.Subject); 

Respuesta

29

El e-mail que AutodiscoverUrl no tiene nada que ver con el buzón que realizar la vinculación.

Hay (al menos) dos formas de obtener los elementos de la bandeja de entrada desde el buzón de otro usuario: delegar el acceso y la suplantación.

Si usted tiene acceso delegado al buzón de correo de otros usuarios, puede especificar el buzón como un parámetro en la llamada a FindItems:

FindItemsResults<Item> findResults = ex.FindItems(
    new FolderId(WellKnownFolderName.Inbox, new Mailbox("[email protected]")), 
    new ItemView(10)); 

Si usted tiene la permissions to impersonate otro usuario, puede hacerse pasar por otro usuario cuando se conecta a dicho sistema y en la siguiente llamada a FindItem trabajará en la bandeja de entrada del usuario suplantado:

ExchangeService ex = new ExchangeService(ExchangeVersion.Exchange2010_SP1); 
ex.AutodiscoverUrl("[email protected]"); 
ex.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, "someothermailbox[email protected]"); 
ItemsResults<Item> findResults = ex.FindItems(WellKnownFolderName.Inbox, new ItemView(10)); 

de responsabilidad: he escrito el código anterior sin tener que probarlo en una servidor real de Exchange.

+1

Gracias, dado que tengo acceso de delegado (y no suplantar los permisos) hice su primer acercamiento y funcionó! – communista

+1

¡Un protector! ¡Gracias! –

+0

Me tomó demasiado tiempo resolverlo: 1) determinar el filtro que incluye los buzones de destino: 'Import-Module ActiveDirectory; get-aduser -filter * | donde {$ _. samaccountname -like "bob"} ', 2) crear un ámbito de gestión que incluya los buzones de destino' new-ManagementScope -Name bob_targetuser -RecipientRestrictionFilter {samaccountname -like "bob"} '; 3) asignar el alcance al objeto ACL: 'New-ManagementRoleAssignment -Name appimpersonationrole -Role ApplicationImpersonation -User usernameThatisallowedImpersonzationrights -CustomRecipientWriteScope bob_targetuser' – mbrownnyc

11

si desea enviar un correo electrónico usando solo delegados permiso, guarde el correo electrónico primero antes de enviarlo. establecerá la dirección smtp que se requiere para enviar el mensaje.

 ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1); 
     service.Credentials = new WebCredentials("user1", "1234", "domain.com"); 
     service.AutodiscoverUrl("[email protected]"); 

     EmailMessage email = new EmailMessage(service); 
     email.ToRecipients.Add("[email protected]"); 
     email.Subject = "HelloWorld"; 
     email.Body = new MessageBody("Sent by using the EWS Managed API"); 

     //save it first! 
     email.Save(new FolderId(WellKnownFolderName.Drafts, "[email protected]")); 

     email.Send(); 

lo usé para evitar este error: "Al hacer una petición como una cuenta que no tiene un buzón de correo, debe especificar la dirección SMTP principal del buzón para cualquier carpeta distinguida documentos de identidad."

+1

Estaba tratando de enviar un correo electrónico desde una cuenta compartida usando suplantación, no estaba trabajando con el siguiente error: "La cuenta no tiene permiso para suplantar al usuario solicitado". Sin embargo, el sitio web de Exchange Online me permite enviar correos electrónicos como usuario compartido. Esto me estaba molestando hasta que encontré esta respuesta, algo bastante similar a esto funcionó para lo que estaba tratando de hacer. Guardar primero es la clave. Gracias. PD. Estoy usando Guardar y luego SendAndSaveCopy. –

Cuestiones relacionadas