Travail avec la boîte aux lettres Exchange et les messages - Lire les e-mails depuis le serveur Exchange en Java
Obtention des informations de boîte aux lettres via EWS
Le EWSClient la classe possède des membres qui peuvent être utilisés pour obtenir les informations d’une boîte aux lettres depuis un serveur Exchange en appelant le IEWSClient.getMailboxInfo() méthode. Elle renvoie une instance du type ExchangeMailboxInfo. Obtenir les informations de la boîte aux lettres à partir de propriétés telles que MailboxUri, InboxUri et DraftsUri. Cet article montre comment accéder aux informations de boîte aux lettres en utilisant Exchange Web Services.
Si vous souhaitez vous connecter au serveur Exchange en utilisant Exchange Web Services (EWS), utilisez le EWSClient classe. Cette classe utilise EWS pour se connecter et gérer les éléments sur un serveur Exchange. L’extrait de code Java suivant montre comment obtenir les informations de boîte aux lettres en utilisant les services web 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());
Envoi de messages e‑mail
Vous pouvez envoyer des messages e‑mail en utilisant un serveur Exchange grâce aux outils de Aspose.Email.Exchange. La méthode IEWSClient.Send() accepte un MailMessage instance comme paramètre et envoie l’e‑mail. Cet article explique comment envoyer des messages e‑mail en utilisant Exchange Web Services.
Aspose.Email fournit la classe IEWSClient pour se connecter à Microsoft Exchange Server via Exchange Web Services. L’extrait de code suivant montre comment utiliser EWS pour envoyer des e‑mails via Microsoft Exchange Server. L’extrait de code Java suivant montre comment envoyer des messages e‑mail en utilisant 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);
Obtention de la classe du message
Le getMessageClass() méthode du ExchangeMessageInfo classe obtient une chaîne représentant la classe du message. L’exemple de code ci‑dessous montre comment obtenir la classe du message :
try (IEWSClient client = EWSClient.getEWSClient(uri, credentials))
{
ExchangeMessageInfoCollection messageInfoCollection = client.listMessagesFromPublicFolder(publicFolder);
for (ExchangeMessageInfo messageInfo : messageInfoCollection)
{
System.out.println("Message Class: " + messageInfo.getMessageClass());
}
}
Lecture d’e‑mails depuis la boîte aux lettres d’un autre utilisateur
Certains comptes sur les serveurs Exchange ont le droit d’accéder à plusieurs boîtes aux lettres, et certains utilisateurs possèdent plusieurs comptes e‑mail sur le même serveur Exchange. Dans les deux cas, les utilisateurs peuvent accéder aux boîtes aux lettres d’autres utilisateurs avec Aspose.Email pour Java. Cette API fournit un mécanisme pour accéder aux dossiers et aux e‑mails d’autres boîtes aux lettres en utilisant le IEWSClient classe. Cette fonctionnalité peut être obtenue en utilisant la version surchargée de getMailboxInfo() méthode en fournissant l’adresse e‑mail de l’utilisateur comme paramètre.
L’extrait de code suivant montre comment lire des e‑mails en utilisant IEWSClient classe.
// 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");
Liste des messages
Une liste des e‑mails d’une boîte aux lettres Exchange peut être obtenue en appelant le IEWSClient.listMessages méthode. Obtenez les informations de base sur les messages, comme l’objet, l’expéditeur, le destinataire et l’ID du message, en utilisant le listMessages méthode.
Liste simple de messages
Pour lister les messages dans une boîte aux lettres Exchange :
- Créez une instance de la IEWSClient classe.
- Appelez la méthode listMessages et créez une collection de messages.
- Parcourir la collection et afficher les informations du message.
L’extrait de code Java suivant montre comment se connecter à un serveur Exchange à l’aide d’EWS et lister les messages du dossier Boîte de réception.
// 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());
}
Lister les messages depuis différents dossiers
Les extraits de code ci‑dessus, liste tous les messages du dossier Boîte de réception. Il est possible d’obtenir la liste des messages d’autres dossiers également. Le IEWSClient.listMessages() la méthode accepte un URI de dossier comme paramètre. Tant que l’URI du dossier est valide, vous pouvez obtenir la liste des messages de ce dossier. Utilisez la propriété IEWSClient.getMailboxInfo().getXXXFolderUri pour obtenir l’URI des différents dossiers. Le reste du code est identique à celui pour obtenir une liste de messages. L’extrait de code suivant montre comment lister les messages de différents dossiers en utilisant 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);
Liste des messages avec prise en charge de la pagination
L’extrait de code Java suivant montre comment obtenir une liste de messages avec prise en charge de la pagination.
// 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();
}
Obtention d’informations sur le type de message à partir d’ExchangeMessageInfo
IEWSClient client = EWSClient.getEWSClient(mailboxUri, credentials);
ExchangeMessageInfoCollection list = client.listMessages(client.getMailboxInfo().getDeletedItemsUri());
System.out.println(list.get_Item(0).getMessageInfoType()); // MessageInfoType
Enregistrement des messages
Cet article montre comment récupérer les messages d’une boîte aux lettres Exchange et les enregistrer sur le disque aux formats EML et MSG :
- Enregistrer en EML sur le disque.
- Enregistrer dans un flux mémoire.
- Enregistrer en MSG.
Enregistrement des messages en EML
Pour obtenir les messages et les enregistrer au format EML :
- Créez une instance de la classe IEWSClient.
- Fournissez le mailboxUri, le nom d’utilisateur, le mot de passe et le domaine.
- Appelez la méthode IEWSClient.listMessages() pour obtenir une instance de la collection ExchangeMessagesInfoCollection.
- Parcourez la collection ExchangeMessagesInfoCollection pour obtenir l’URI unique de chaque message.
- Appelez la méthode IEWSClient.saveMessage() et passez l’URI unique comme paramètre.
- Fournissez à la méthode saveMessage() un chemin vers l’endroit où vous souhaitez enregistrer le fichier.
L’extrait de code suivant montre comment utiliser EWS pour se connecter au serveur Exchange et enregistrer les messages sous forme de fichiers 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");
}
Enregistrement des messages dans un flux mémoire
Au lieu d’enregistrer les fichiers EML sur le disque, il est possible de les enregistrer dans un flux mémoire. Ceci est utile lorsque vous souhaitez enregistrer le flux dans un emplacement de stockage tel qu’une base de données. Une fois le flux enregistré dans une base de données, vous pouvez recharger le fichier EML dans le MailMessage classe. L’extrait de code suivant montre comment enregistrer les messages d’une boîte aux lettres Exchange dans un flux mémoire à l’aide d’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);
}
Enregistrement des messages au format MSG
Le IEWSClient.saveMessage() méthode peut directement enregistrer le message au format EML. Pour enregistrer les messages au format MSG, appelez d’abord le IEWSClient.fetchMessage() méthode qui renvoie une instance de MailMessage classe. Puis appelez le MailMessage.save() méthode pour enregistrer le message au format MSG. L’extrait de code suivant montre comment récupérer les messages d’une boîte aux lettres Exchange et les enregistrer au format MSG à l’aide d’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());
}
Obtention d’ExchangeMessageInfo à partir de l’URI du message
Un message e-mail est représenté par son identifiant unique, son URI, et fait partie intégrante du ExchangeMessageInfo objet. Dans le cas où seul l’URI du message est disponible, alors ExchangeMessageInfo l’objet peut également être récupéré à l’aide de ces informations disponibles. La version surchargée de listMessages prend une liste d’ID à utiliser ExchangeMessageInfoCollection. L’extrait de code suivant montre comment obtenir ExchangeMessageInfo à partir de l’URI du message.
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());
}
Récupérer les messages d’une boîte aux lettres Exchange Server
Lister les messages sur un serveur Exchange a utilisé le listMessages() méthode pour obtenir une liste de messages d’une boîte aux lettres Exchange Server. Le listMessages() méthode récupère les informations de base sur les messages, par exemple, le sujet, l’ID du message, l’expéditeur et le destinataire. Pour obtenir les détails complets du message, Aspose.Email.Exchange fournit la méthode IEWSClient.fetchMessage(). Cette méthode accepte l’URI du message comme paramètre et retourne une instance du MailMessage classe. Le MailMessage classe fournit alors les détails du message tels que le corps, les en-têtes et les pièces jointes. En savoir plus sur le MailMessage API, ou découvrez comment gérer les e-mails avec le MailMessage classe. Pour récupérer les messages de la boîte aux lettres du serveur Exchange :
- Créez une instance du type IEWSClient.
- Spécifiez le nom du serveur, le nom d’utilisateur, le mot de passe et le domaine.
- Appelez listMessages pour obtenir le ExchangeMessageInfoCollection.
- Parcourez la collection ExchangeMessageInfoCollection pour obtenir les valeurs ExchangeMessageInfo.UniqueURI.
- Appelez IEWSClient.fetchMessage() et passez ExchangeMessageInfo.UniqueURI comme paramètre.
L’extrait de code suivant montre comment vous connecter à la boîte aux lettres du serveur Exchange et récupérer tous les messages à l’aide d’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());
}
}
Utilisation de la méthode FetchItem pour récupérer un message
Le FetchItem la méthode est préférée si vous souhaitez récupérer un MapiMessage et fonctionner avec les propriétés MAPI. Vous pouvez également utiliser cette méthode pour récupérer tout élément Outlook, tel qu’un contact, un rendez-vous, une tâche, 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();
}
Pré‑récupération de la taille du message
Microsoft Outlook InterOp fournit la fonctionnalité de récupération de la taille du message avant de le télécharger complètement depuis le serveur. Dans le cas de l’API Aspose.Email, les informations récapitulatives récupérées du serveur Exchange sont représentées par ExchangeMessageInfo classe. Elle fournit la même fonction de récupération de la taille du message à l’aide de la propriété Size. Afin de récupérer la taille du message, l’appel standard à listMessages d’IEWSClient est utilisé, ce qui récupère une collection de ExchangeMessageInfo. Le fragment de code suivant montre comment afficher la taille du message en utilisant le ExchangeMessageInfo classe.
// 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("==================================");
}
Télécharger les messages de manière récursive
Le EWSClient’s listSubFolders() la méthode peut être utilisée pour récupérer les messages des dossiers et sous‑dossiers d’une boîte aux lettres Exchange Server de façon récursive. Cela nécessite Exchange Server 2007 ou ultérieur, car elle utilise EWS. Le fragment de code suivant montre comment télécharger l’ensemble de la boîte aux lettres (dossiers et sous‑dossiers) d’un serveur Exchange. La structure de dossiers est créée localement et tous les messages sont téléchargés.
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) {
}
}
Télécharger des messages depuis les dossiers publics
Microsoft Exchange Server permet aux utilisateurs de créer des dossiers publics et d’y publier des messages. Pour le faire via votre application, utilisez les fonctionnalités d’Aspose.Email EWSClient classe pour se connecter au serveur Exchange et lire et télécharger les messages et les publications des dossiers publics. Le fragment de code suivant montre comment lire tous les dossiers publics, ainsi que les sous‑dossiers, et lister et télécharger tous les messages trouvés dans ces dossiers. Cet exemple ne fonctionne qu’avec Microsoft Exchange Server 2007 ou supérieur, car seuls ceux‑ci prennent en charge 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);
}
}
}
Déplacement de messages
Vous pouvez déplacer des e‑mails d’un dossier à un autre à l’aide du IEWSClient classe déplacer méthode. Elle prend les paramètres :
- L’URI unique du message à déplacer.
- L’URI unique du dossier de destination.
Déplacement de messages entre dossiers
Le fragment de code suivant montre comment déplacer un message dans une boîte aux lettres du dossier Boîte de réception vers un dossier appelé Traitée. Dans cet exemple, l’application :
- Lit les messages du dossier Boîte de réception.
- Traite certains messages selon certains critères (dans cet exemple, nous recherchons un mot‑clé dans l’objet du message).
- Déplace les messages qui remplissent la condition donnée vers le dossier traité.
// 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
}
}
Suppression de messages
Vous pouvez supprimer des e‑mails d’un dossier à l’aide du IEWSClient classe deleteItem méthode. Elle prend l’URI unique du message comme paramètre.
L’extrait de code suivant montre comment supprimer un message du dossier Boîte de réception. À des fins d’exemple, le code:
- Lit les messages du dossier Boîte de réception.
- Traitez les messages selon certains critères (dans cet exemple, nous recherchons un mot‑clé dans l’objet du message).
- Supprime le message.
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
}
}
Copie de messages
L’API Aspose.Email permet de copier un message d’un dossier à un autre en utilisant le copyItem méthode. La version surchargée de cette méthode renvoie l’URI unique du message copié comme indiqué dans cet article.
Copie d’un message vers un autre dossier
L’extrait de code suivant montre comment copier un message dans un autre dossier.
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());
}