Trabajando con buzón y mensajes de Exchange - Leer correo electrónico del servidor Exchange en Java
Obteniendo información del buzón usando EWS
El EWSClient la clase tiene miembros que pueden usarse para obtener información del buzón de un servidor Exchange llamando al IEWSClient.getMailboxInfo() método. Devuelve una instancia del tipo ExchangeMailboxInfo. Obtener información del buzón a partir de propiedades como MailboxUri, InboxUri y DraftsUri. Este artículo muestra cómo acceder a la información del buzón usando Exchange Web Services.
Si deseas conectarte al servidor Exchange usando Exchange Web Services (EWS), usa el EWSClient clase. Esta clase usa EWS para conectarse y gestionar elementos en un servidor Exchange. El siguiente fragmento de código Java muestra cómo obtener información del buzón usando los servicios web de Exchange.
// Create instance of EWSClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");
// Get mailbox size, exchange mailbox info, Mailbox and Inbox folder URI
System.out.println("Mailbox size: " + client.getMailboxSize() + " bytes");
ExchangeMailboxInfo mailboxInfo = client.getMailboxInfo();
System.out.println("Mailbox URI: " + mailboxInfo.getMailboxUri());
System.out.println("Inbox folder URI: " + mailboxInfo.getInboxUri());
System.out.println("Sent Items URI: " + mailboxInfo.getSentItemsUri());
System.out.println("Drafts folder URI: " + mailboxInfo.getDraftsUri());
Enviando mensajes de correo
Puedes enviar mensajes de correo usando un servidor Exchange con la ayuda de las herramientas en Aspose.Email.Exchange. El método IEWSClient.Send() acepta un MailMessage instancia como parámetro y envía el correo. Este artículo explica cómo enviar mensajes de correo usando Exchange Web Services.
Aspose.Email proporciona la clase IEWSClient para conectarse a Microsoft Exchange Server usando Exchange Web Services. El siguiente fragmento de código muestra cómo usar EWS para enviar correos electrónicos usando Microsoft Exchange Server. El siguiente fragmento de código Java muestra cómo enviar mensajes de correo usando EWS.
// Create instance of IEWSClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");
// Create instance of type MailMessage
MailMessage msg = new MailMessage();
msg.setFrom(MailAddress.to_MailAddress("sender@domain.com"));
msg.setTo(MailAddressCollection.to_MailAddressCollection("recipient@ domain.com "));
msg.setSubject("Sending message from exchange server");
msg.setHtmlBody("<h3>sending message from exchange server</h3>");
// Send the message
client.send(msg);
Obteniendo la clase del mensaje
El getMessageClass() método del ExchangeMessageInfo clase obtiene una cadena que representa la clase del mensaje. El siguiente ejemplo de código muestra cómo obtener la clase del mensaje:
try (IEWSClient client = EWSClient.getEWSClient(uri, credentials))
{
ExchangeMessageInfoCollection messageInfoCollection = client.listMessagesFromPublicFolder(publicFolder);
for (ExchangeMessageInfo messageInfo : messageInfoCollection)
{
System.out.println("Message Class: " + messageInfo.getMessageClass());
}
}
Leyendo correos electrónicos del buzón de otro usuario
Algunas cuentas en servidores Exchange tienen derecho a acceder a múltiples buzones, y algunos usuarios tienen varias cuentas de correo en el mismo servidor Exchange. En ambos casos, los usuarios pueden acceder a los buzones de otros usuarios usando Aspose.Email for Java. Esta API proporciona un mecanismo para acceder a carpetas y correos de otros buzones usando el IEWSClient clase. Esta funcionalidad puede lograrse usando la sobrecarga de getMailboxInfo() método y proporcionando la dirección de correo del usuario como parámetro.
El siguiente fragmento de código muestra cómo leer correos electrónicos usando IEWSClient clase.
// Create instance of EWSClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");
// Get Exchange mailbox info of other email account
ExchangeMailboxInfo mailboxInfo = client.getMailboxInfo("otherUser@domain.com");
Listando mensajes
Se puede obtener una lista de los mensajes de correo electrónico en un buzón Exchange llamando al IEWSClient.listMessages método. Obtenga la información básica sobre los mensajes, como asunto, de, a y ID del mensaje, usando el listMessages método.
Listado simple de mensajes
Para listar los mensajes en un buzón Exchange:
- Cree una instancia de la IEWSClient clase.
- Llama al método listMessages y crea una colección de mensajes.
- Recorrer la colección y mostrar la información del mensaje.
El siguiente fragmento de código Java muestra cómo conectarse a un servidor Exchange usando EWS y listar mensajes de la carpeta de bandeja de entrada.
// Create instance of ExchangeWebServiceClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "UserName", "Password");
// Call ListMessages method to list messages info from Inbox
ExchangeMessageInfoCollection msgCollection = client.listMessages(client.getMailboxInfo().getInboxUri());
// Loop through the collection to display the basic information
for (ExchangeMessageInfo msgInfo : (Iterable<ExchangeMessageInfo>) msgCollection) {
System.out.println("Subject: " + msgInfo.getSubject());
System.out.println("From: " + msgInfo.getFrom().toString());
System.out.println("To: " + msgInfo.getTo().toString());
System.out.println("Message ID: " + msgInfo.getMessageId());
System.out.println("Unique URI: " + msgInfo.getUniqueUri());
}
Listando mensajes de diferentes carpetas
Los fragmentos de código anteriores, lista todos los mensajes en la carpeta Bandeja de entrada. También es posible obtener la lista de mensajes de otras carpetas. El IEWSClient.listMessages() el método acepta un URI de carpeta como parámetro. Mientras el URI de la carpeta sea válido, puedes obtener la lista de mensajes de esa carpeta. Usa la propiedad IEWSClient.getMailboxInfo().getXXXFolderUri para obtener el URI de diferentes carpetas. El resto del código es el mismo que para obtener una lista de mensajes. El siguiente fragmento de código muestra cómo listar mensajes de diferentes carpetas usando EWS.
// Create instance of EWSClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");
// Get folder URI
String strFolderURI = "";
strFolderURI = client.getMailboxInfo().getInboxUri();
strFolderURI = client.getMailboxInfo().getDeletedItemsUri();
strFolderURI = client.getMailboxInfo().getDraftsUri();
strFolderURI = client.getMailboxInfo().getSentItemsUri();
// Get list of messages from the specified folder
ExchangeMessageInfoCollection msgCollection = client.listMessages(strFolderURI);
Listando mensajes con soporte de paginación
El siguiente fragmento de código Java muestra cómo obtener una lista de mensajes con soporte de paginación.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
final IEWSClient client = EWSClient.getEWSClient("exchange.domain.com", "username", "password");
try {
try {
// Create some test messages to be added to server for retrieval later
int messagesNum = 12;
int itemsPerPage = 5;
MailMessage message = null;
for (int i = 0; i < messagesNum; i++) {
message = new MailMessage("from@domain.com", "to@domain.com", "EMAILNET-35157_1 - " + UUID.randomUUID().toString(),
"EMAILNET-35157 Move paging parameters to separate class");
client.appendMessage(client.getMailboxInfo().getInboxUri(), message);
}
// Verfiy that the messages have been added to the server
ExchangeMessageInfoCollection totalMessageInfoCol = client.listMessages(client.getMailboxInfo().getInboxUri());
System.out.println(totalMessageInfoCol.size());
////////////////// RETREIVING THE MESSAGES USING PAGING SUPPORT ////////////////////////////////////
List<ExchangeMessagePageInfo> pages = new ArrayList<ExchangeMessagePageInfo>();
ExchangeMessagePageInfo pageInfo = client.listMessagesByPage(client.getMailboxInfo().getInboxUri(), itemsPerPage);
// Total Pages Count
System.out.println(pageInfo.getTotalCount());
pages.add(pageInfo);
while (!pageInfo.getLastPage()) {
pageInfo = client.listMessagesByPage(client.getMailboxInfo().getInboxUri(), itemsPerPage, pageInfo.getPageOffset() + 1);
pages.add(pageInfo);
}
int retrievedItems = 0;
// foreach to while statements conversion
for (ExchangeMessagePageInfo pageCol : pages) {
retrievedItems += pageCol.getItems().size();
}
// Verify total message count using paging
System.out.println(retrievedItems);
} finally {
}
} finally {
client.dispose();
}
Obteniendo información de tipo de mensaje de ExchangeMessageInfo
IEWSClient client = EWSClient.getEWSClient(mailboxUri, credentials);
ExchangeMessageInfoCollection list = client.listMessages(client.getMailboxInfo().getDeletedItemsUri());
System.out.println(list.get_Item(0).getMessageInfoType()); // MessageInfoType
Guardando mensajes
Este artículo muestra cómo obtener mensajes de un buzón del servidor Exchange y guardarlos en disco en formatos EML y MSG:
- Guardar como EML en disco.
- Guardar en flujo de memoria.
- Guardar como MSG.
Guardando mensajes en EML
Para obtener mensajes y guardarlos en formato EML:
- Crea una instancia de la clase IEWSClient.
- Proporciona el mailboxUri, nombre de usuario, contraseña y dominio.
- Llama al método IEWSClient.listMessages() para obtener una instancia de la colección ExchangeMessagesInfoCollection.
- Itera sobre la colección ExchangeMessagesInfoCollection para obtener el URI único de cada mensaje.
- Llama al método IEWSClient.saveMessage() y pasa el URI único como parámetro.
- Proporciona al método saveMessage() una ruta donde deseas guardar el archivo.
El siguiente fragmento de código muestra cómo usar EWS para conectarse al servidor Exchange y guardar mensajes como archivos EML.
// Create instance of IEWSClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");
// Call ListMessages method to list messages info from Inbox
ExchangeMessageInfoCollection msgCollection = client.listMessages(client.getMailboxInfo().getInboxUri());
// Loop through the collection to get Message URI
for (ExchangeMessageInfo msgInfo : (Iterable<ExchangeMessageInfo>) msgCollection) {
String strMessageURI = msgInfo.getUniqueUri();
// Now save the message in disk
client.saveMessage(strMessageURI, dataDir + msgInfo.getMessageId() + "out.eml");
}
Guardando mensajes en un flujo de memoria
En lugar de guardar archivos EML en disco, es posible guardarlos en un flujo de memoria. Esto es útil cuando deseas guardar el flujo en alguna ubicación de almacenamiento como una base de datos. Una vez que el flujo se ha guardado en una base de datos, puedes recargar el archivo EML en el MailMessage clase. El siguiente fragmento de código muestra cómo guardar mensajes de un buzón del servidor Exchange en un flujo de memoria usando EWS.
// Create instance of EWSClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");
// Call ListMessages method to list messages info from Inbox
ExchangeMessageInfoCollection msgCollection = client.listMessages(client.getMailboxInfo().getInboxUri());
// Loop through the collection to get Message URI
for (ExchangeMessageInfo msgInfo : (Iterable<ExchangeMessageInfo>) msgCollection) {
String strMessageURI = msgInfo.getUniqueUri();
// Now save the message in memory stream
ByteArrayOutputStream stream = new ByteArrayOutputStream();
client.saveMessage(strMessageURI, stream);
}
Guardando mensajes en formato MSG
El IEWSClient.saveMessage() el método puede guardar directamente el mensaje en formato EML. Para guardar los mensajes en formato MSG, primero llama al IEWSClient.fetchMessage() método que devuelve una instancia de MailMessage clase. Luego llame al MailMessage.save() método para guardar el mensaje en MSG. El siguiente fragmento de código muestra cómo obtener mensajes de un buzón del servidor Exchange y guardarlos en formato MSG usando EWS.
// Create instance of EWSClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");
// Call ListMessages method to list messages info from Inbox
ExchangeMessageInfoCollection msgCollection = client.listMessages(client.getMailboxInfo().getInboxUri());
int count = 0;
// Loop through the collection to get Message URI
for (ExchangeMessageInfo msgInfo : (Iterable<ExchangeMessageInfo>) msgCollection) {
String strMessageURI = msgInfo.getUniqueUri();
// Now get the message details using FetchMessage() and Save message as Msg
MailMessage message = client.fetchMessage(strMessageURI);
message.save(dataDir + (count++) + "_out.msg", SaveOptions.getDefaultMsgUnicode());
}
Obteniendo ExchangeMessageInfo del URI del mensaje
Un mensaje de correo electrónico está representado por su identificador único, URI, y es parte integral del ExchangeMessageInfo objeto. En caso de que solo esté disponible el URI del mensaje, entonces ExchangeMessageInfo el objeto también puede ser recuperado usando esta información disponible. La versión sobrecargada de listMessages toma una lista de Ids para usar ExchangeMessageInfoCollection. El siguiente fragmento de código muestra cómo obtener ExchangeMessageInfo del URI del mensaje.
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "user@domain.com", "pwd", "domain");
List<String> ids = new ArrayList<String>();
List<MailMessage> messages = new ArrayList<MailMessage>();
for (int i = 0; i < 5; i++) {
MailMessage message = new MailMessage("user@domain.com", "receiver@domain.com", "EMAILNET-35033 - " + UUID.randomUUID().toString(),
"EMAILNET-35033 Messages saved from Sent Items folder doesn't contain 'To' field");
messages.add(message);
String uri = client.appendMessage(message);
ids.add(uri);
}
ExchangeMessageInfoCollection messageInfoCol = client.listMessages(ids);
for (ExchangeMessageInfo messageInfo : (Iterable<ExchangeMessageInfo>) messageInfoCol) {
// Do something ...
System.out.println(messageInfo.getUniqueUri());
}
Obtener mensajes de un buzón de Exchange Server
Listar mensajes en un servidor Exchange usó el listMessages() método para obtener una lista de mensajes de un buzón de Exchange Server. El listMessages() el método obtiene información básica sobre los mensajes, por ejemplo, el asunto, el ID del mensaje, de y para. Para obtener los detalles completos del mensaje, Aspose.Email.Exchange proporciona el método IEWSClient.fetchMessage(). Este método acepta el URI del mensaje como parámetro y devuelve una instancia del MailMessage clase. El MailMessage clase luego proporciona detalles del mensaje como cuerpo, encabezados y adjuntos. Descubre más sobre el MailMessage API, o descubre cómo gestionar correos electrónicos con el MailMessage clase. Para obtener mensajes del buzón del servidor Exchange:
- Crea una instancia del tipo IEWSClient.
- Especifica el nombre del servidor, nombre de usuario, contraseña y dominio.
- Llama a listMessages para obtener el ExchangeMessageInfoCollection.
- Itera sobre la colección ExchangeMessageInfoCollection para obtener los valores de ExchangeMessageInfo.UniqueURI.
- Llama a IEWSClient.fetchMessage() y pasa ExchangeMessageInfo.UniqueURI como parámetro.
El siguiente fragmento de código muestra cómo conectarse al buzón del servidor Exchange y obtener todos los mensajes usando EWS.
// Create instance of ExchangeWebServiceClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");
// Call ListMessages method to list messages info from Inbox
ExchangeMessageInfoCollection msgCollection = client.listMessages(client.getMailboxInfo().getInboxUri());
// Loop through the collection to get Message URI
for (ExchangeMessageInfo msgInfo : (Iterable<ExchangeMessageInfo>) msgCollection) {
String strMessageURI = msgInfo.getUniqueUri();
// Now get the message details using FetchMessage()
MailMessage msg = client.fetchMessage(strMessageURI);
for (Attachment att : (Iterable<Attachment>) msg.getAttachments()) {
System.out.println("Attachment Name: " + att.getName());
}
}
Usando el método FetchItem para obtener un mensaje
El FetchItem se prefiere el método si desea obtener un MapiMessage y operar con propiedades MAPI. También puede usar este método para obtener cualquier elemento de Outlook, como un contacto, una cita, una tarea, etc.
// Create instance of ExchangeWebServiceClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");
// Call ListMessages method to list messages info from Inbox
ExchangeMessageInfoCollection msgCollection = client.listMessages(client.getMailboxInfo().getInboxUri());
// Loop through the collection to get Message URI
for (ExchangeMessageInfo msgInfo : msgCollection)
{
// Now get the message using FetchItem()
MapiMessage msg = client.fetchItem(msgInfo.getUniqueUri());
// If necessary, you can cast the MapiMessage to the proper item type to simplify working with its properties.
MapiContact contact = (MapiContact) msg.toMapiMessageItem();
}
Obtener tamaño del mensaje antes de descargar
Microsoft Outlook InterOp proporciona la funcionalidad de obtener el tamaño del mensaje antes de descargar el mensaje completo del servidor. En el caso de la API Aspose.Email, la información resumida obtenida del servidor Exchange está representada por ExchangeMessageInfo clase. Proporciona la misma funcionalidad de obtener el tamaño del mensaje usando la propiedad Size. Para obtener el tamaño del mensaje, se usa la llamada estándar a listMessages de IEWSClient que recupera una colección de ExchangeMessageInfo. El siguiente fragmento de código muestra cómo mostrar el tamaño del mensaje usando el ExchangeMessageInfo clase.
// Create instance of ExchangeWebServiceClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");
// Call ListMessages method to list messages info from Inbox
ExchangeMessageInfoCollection msgCollection = client.listMessages(client.getMailboxInfo().getInboxUri());
// Loop through the collection to display the basic information
for (ExchangeMessageInfo msgInfo : (Iterable<ExchangeMessageInfo>) msgCollection) {
System.out.println("Subject: " + msgInfo.getSubject());
System.out.println("From: " + msgInfo.getFrom().toString());
System.out.println("To: " + msgInfo.getTo().toString());
System.out.println("Message Size: " + msgInfo.getSize());
System.out.println("==================================");
}
Descargar mensajes recursivamente
El EWSClient’s listSubFolders() el método puede usarse para obtener mensajes de carpetas y subcarpetas de un buzón de Exchange Server recursivamente. Esto requiere Exchange Server 2007 o superior, porque usa EWS. El siguiente fragmento de código muestra cómo descargar todo el buzón (carpetas y subcarpetas) de un Exchange Server. La estructura de carpetas se crea localmente y se descargan todos los mensajes.
public static void run() {
try {
downloadAllMessages();
} catch (java.lang.RuntimeException ex) {
System.out.println(ex.getMessage());
}
}
private static void downloadAllMessages() {
try {
String rootFolder = domain + "-" + username;
new File(rootFolder).mkdirs();
String inboxFolder = rootFolder + "\\Inbox";
new File(inboxFolder).mkdirs();
System.out.println("Downloading all messages from Inbox....");
// Create instance of IEWSClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", username, password, domain);
ExchangeMailboxInfo mailboxInfo = client.getMailboxInfo();
System.out.println("Mailbox URI: " + mailboxInfo.getMailboxUri());
String rootUri = client.getMailboxInfo().getRootUri();
// List all the folders from Exchange server
ExchangeFolderInfoCollection folderInfoCollection = client.listSubFolders(rootUri);
for (ExchangeFolderInfo folderInfo : (Iterable<ExchangeFolderInfo>) folderInfoCollection) {
// Call the recursive method to read messages and get sub-folders
listMessagesInFolder(client, folderInfo, rootFolder);
}
System.out.println("All messages downloaded.");
} catch (java.lang.RuntimeException ex) {
System.out.println(ex.getMessage());
}
}
// Recursive method to get messages from folders and sub-folders
private static void listMessagesInFolder(IEWSClient client, ExchangeFolderInfo folderInfo, String rootFolder) {
// Create the folder in disk (same name as on IMAP server)
String currentFolder = rootFolder + "\\" + folderInfo.getDisplayName();
new File(currentFolder).mkdirs();
// List messages
ExchangeMessageInfoCollection msgInfoColl = client.listMessages(folderInfo.getUri());
System.out.println("Listing messages....");
int i = 0;
for (ExchangeMessageInfo msgInfo : (Iterable<ExchangeMessageInfo>) msgInfoColl) {
// Get subject and other properties of the message
System.out.println("Subject: " + msgInfo.getSubject());
// Get rid of characters like ? and :, which should not be included in a file name
String fileName = msgInfo.getSubject().replace("?", " ").replace(":", " ");
MailMessage msg = client.fetchMessage(msgInfo.getUniqueUri());
msg.save(dataDir + "\\" + fileName + "-" + i + ".msg");
i++;
}
System.out.println("============================\n");
try {
// If this folder has sub-folders, call this method recursively to get messages
ExchangeFolderInfoCollection folderInfoCollection = client.listSubFolders(folderInfo.getUri());
for (ExchangeFolderInfo subfolderInfo : (Iterable<ExchangeFolderInfo>) folderInfoCollection) {
listMessagesInFolder(client, subfolderInfo, currentFolder);
}
} catch (java.lang.RuntimeException e) {
}
}
Descargar mensajes de carpetas públicas
Microsoft Exchange Server permite a los usuarios crear carpetas públicas y publicar mensajes en ellas. Para hacer esto a través de su aplicación, use Aspose.Email’s EWSClient clase para conectarse al servidor Exchange y leer y descargar mensajes y publicaciones de carpetas públicas. El siguiente fragmento de código muestra cómo leer todas las carpetas públicas y subcarpetas, y enumerar y descargar cualquier mensaje encontrado en estas carpetas. Este ejemplo solo funciona con Microsoft Exchange Server 2007 o superior, ya que solo estos soportan EWS.
public static void run() {
try {
readPublicFolders();
} catch (java.lang.RuntimeException ex) {
System.out.println(ex.getMessage());
}
}
private static void readPublicFolders() {
NetworkCredential credential = new NetworkCredential(username, password, domain);
IEWSClient client = EWSClient.getEWSClient(mailboxUri, credential);
ExchangeFolderInfoCollection folders = client.listPublicFolders();
for (ExchangeFolderInfo publicFolder : (Iterable<ExchangeFolderInfo>) folders) {
System.out.println("Name: " + publicFolder.getDisplayName());
System.out.println("Subfolders count: " + publicFolder.getChildFolderCount());
listMessagesFromSubFolder(publicFolder, client);
}
}
private static void listMessagesFromSubFolder(ExchangeFolderInfo publicFolder, IEWSClient client) {
System.out.println("Folder Name: " + publicFolder.getDisplayName());
ExchangeMessageInfoCollection msgInfoCollection = client.listMessagesFromPublicFolder(publicFolder);
for (ExchangeMessageInfo messageInfo : (Iterable<ExchangeMessageInfo>) msgInfoCollection) {
MailMessage msg = client.fetchMessage(messageInfo.getUniqueUri());
System.out.println(msg.getSubject());
msg.save(dataDir + msg.getSubject() + ".msg", SaveOptions.getDefaultMsgUnicode());
}
// Call this method recursively for any subfolders
if (publicFolder.getChildFolderCount() > 0) {
ExchangeFolderInfoCollection subfolders = client.listSubFolders(publicFolder);
for (ExchangeFolderInfo subfolder : (Iterable<ExchangeFolderInfo>) subfolders) {
listMessagesFromSubFolder(subfolder, client);
}
}
}
Moviendo mensajes
Puede mover mensajes de correo electrónico de una carpeta a otra con la ayuda del IEWSClient clase mover método. Recibe los parámetros:
- La URI única del mensaje que se va a mover.
- La URI única de la carpeta de destino.
Mover mensajes entre carpetas
El siguiente fragmento de código muestra cómo mover un mensaje en un buzón de la carpeta Bandeja de entrada a una carpeta llamada Procesado. En este ejemplo, la aplicación:
- Lee mensajes de la carpeta Bandeja de entrada.
- Procesa algunos de los mensajes según ciertos criterios (en este ejemplo, buscamos una palabra clave en el asunto del mensaje).
- Mueve los mensajes que cumplen la condición dada a la carpeta procesada.
// Create instance of IEWSClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");
ExchangeMailboxInfo mailboxInfo = client.getMailboxInfo();
// List all messages from Inbox folder
System.out.println("Listing all messages from Inbox....");
ExchangeMessageInfoCollection msgInfoColl = client.listMessages(mailboxInfo.getInboxUri());
for (ExchangeMessageInfo msgInfo : (Iterable<ExchangeMessageInfo>) msgInfoColl) {
// Move message to "Processed" folder, after processing certain messages based on some criteria
if (msgInfo.getSubject() != null && msgInfo.getSubject().toLowerCase().contains("process this message")) {
client.moveItem(mailboxInfo.getDeletedItemsUri(), msgInfo.getUniqueUri()); // EWS
System.out.println("Message moved...." + msgInfo.getSubject());
} else {
// Do something else
}
}
Eliminando mensajes
Puede eliminar correos electrónicos de una carpeta con la ayuda del IEWSClient clase deleteItem método. Toma el URI único del mensaje como parámetro.
El siguiente fragmento de código muestra cómo eliminar un mensaje de la carpeta Bandeja de entrada. Para el propósito de este ejemplo, el código:
- Lee mensajes de la carpeta Bandeja de entrada.
- Procesar mensajes basados en algunos criterios (en este ejemplo, buscamos una palabra clave en el asunto del mensaje).
- Elimina el mensaje.
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");
ExchangeMailboxInfo mailboxInfo = client.getMailboxInfo();
// List all messages from Inbox folder
System.out.println("Listing all messages from Inbox....");
ExchangeMessageInfoCollection msgInfoColl = client.listMessages(mailboxInfo.getInboxUri());
for (ExchangeMessageInfo msgInfo : (Iterable<ExchangeMessageInfo>) msgInfoColl) {
// Delete message based on some criteria
if (msgInfo.getSubject() != null && msgInfo.getSubject().toLowerCase().contains("delete") == true) {
client.deleteItem(msgInfo.getUniqueUri(), DeletionOptions.getDeletePermanently()); // EWS
System.out.println("Message deleted...." + msgInfo.getSubject());
} else {
// Do something else
}
}
Copiando mensajes
La API Aspose.Email permite copiar un mensaje de una carpeta a otra usando el copyItem método. La versión sobrecargada de este método devuelve el URI único del mensaje copiado como se muestra en este artículo.
Copiando un mensaje a otra carpeta
El siguiente fragmento de código muestra cómo copiar un mensaje a otra carpeta.
try {
// Create instance of EWSClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");
MailMessage message = new MailMessage("from@domain.com", "to@domain.com", "EMAILNET-34997 - " + UUID.randomUUID().toString(),
"EMAILNET-34997 Exchange: Copy a message and get reference to the new Copy item");
String messageUri = client.appendMessage(message);
String newMessageUri = client.copyItem(messageUri, client.getMailboxInfo().getDeletedItemsUri());
} catch (java.lang.RuntimeException ex) {
System.out.println(ex.getMessage());
}