Arbeiten mit Exchange-Postfach und Nachrichten – E-Mails vom Exchange-Server in Java lesen
Abrufen von Postfachinformationen mit EWS
Die EWSClient Klasse hat Mitglieder, die verwendet werden können, um Postfachinformationen von einem Exchange‑Server abzurufen, indem die IEWSClient.getMailboxInfo() Methode. Sie gibt eine Instanz des Typs zurück ExchangeMailboxInfo. Holen Sie Postfachinformationen aus Eigenschaften wie MailboxUri, InboxUri und DraftsUri. Dieser Artikel zeigt, wie man mithilfe von Exchange Web Services auf Postfachinformationen zugreift.
Wenn Sie sich über Exchange Web Services (EWS) mit dem Exchange‑Server verbinden wollen, benutzen Sie die EWSClient Klasse. Diese Klasse nutzt EWS, um sich zu verbinden und Elemente auf einem Exchange‑Server zu verwalten. Das folgende Java‑Code‑Snippet zeigt, wie man Postfachinformationen mittels Exchange Web Services abruft.
// 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());
E‑Mail‑Nachrichten senden
Sie können E‑Mail‑Nachrichten mit einem Exchange‑Server mithilfe der Werkzeuge in Aspose.Email.Exchange. Die Methode IEWSClient.Send() akzeptiert ein MailMessage Instanz als Parameter und sendet die E‑Mail. Dieser Artikel erklärt, wie man E‑Mail‑Nachrichten mit Exchange Web Services sendet.
Aspose.Email stellt die IEWSClient‑Klasse bereit, um sich über Exchange Web Services mit Microsoft Exchange Server zu verbinden. Das folgende Code‑Snippet zeigt, wie man EWS zum Senden von E‑Mails mit Microsoft Exchange Server verwendet. Das folgende Java‑Code‑Snippet zeigt, wie man E‑Mail‑Nachrichten mit EWS sendet.
// 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);
Abrufen der Nachrichtenklasse
Die getMessageClass() Methode des ExchangeMessageInfo Klasse erhält einen String, der die Klasse der Nachricht repräsentiert. Das untenstehende Beispiel zeigt, wie man die Nachrichtenklasse erhält:
try (IEWSClient client = EWSClient.getEWSClient(uri, credentials))
{
ExchangeMessageInfoCollection messageInfoCollection = client.listMessagesFromPublicFolder(publicFolder);
for (ExchangeMessageInfo messageInfo : messageInfoCollection)
{
System.out.println("Message Class: " + messageInfo.getMessageClass());
}
}
E‑Mails aus dem Postfach anderer Benutzer lesen
Einige Konten auf Exchange‑Servern haben das Recht, auf mehrere Postfächer zuzugreifen, und einige Benutzer haben mehrere E‑Mail‑Konten auf demselben Exchange‑Server. In beiden Fällen können Benutzer mithilfe von Aspose.Email für Java auf die Postfächer anderer Benutzer zugreifen. Diese API bietet einen Mechanismus zum Zugriff auf Ordner und E‑Mails aus anderen Postfächern über das IEWSClient Klasse. Diese Funktionalität kann mit der überladenen getMailboxInfo() Methode und Angabe der Benutzer‑E‑Mail‑Adresse als Parameter.
Das folgende Code‑Snippet zeigt, wie man E‑Mails liest mit IEWSClient Klasse.
// 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");
Nachrichten auflisten
Eine Liste der E‑Mail‑Nachrichten in einem Exchange‑Postfach kann durch Aufrufen der IEWSClient.listMessages Methode. Holt grundlegende Informationen über Nachrichten, wie Betreff, Absender, Empfänger und Nachrichten‑ID, mittels der listMessages Methode.
Einfaches Auflisten von Nachrichten
Um die Nachrichten in einem Exchange‑Postfach aufzulisten:
- Erstellen Sie eine Instanz von dem IEWSClient Klasse.
- Rufen Sie die Methode listMessages auf und erstellen Sie eine Nachrichtensammlung.
- Durchlaufen Sie die Sammlung und zeigen Sie die Nachrichteninformationen an.
Das folgende Java‑Code‑Snippet zeigt, wie man sich mit EWS mit einem Exchange‑Server verbindet und Nachrichten aus dem Posteingangs‑Ordner auflistet.
// 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());
}
Auflisten von Nachrichten aus verschiedenen Ordnern
Die obigen Code‑Snippets, listet alle Nachrichten im Posteingangs‑Ordner auf. Es ist auch möglich, die Nachrichtenliste aus anderen Ordnern zu erhalten. Die IEWSClient.listMessages() Methode akzeptiert eine Ordner‑URI als Parameter. Solange die Ordner‑URI gültig ist, können Sie die Nachrichtenliste dieses Ordners abrufen. Verwenden Sie die Eigenschaft IEWSClient.getMailboxInfo().getXXXFolderUri, um die URI verschiedener Ordner zu erhalten. Der Rest des Codes ist derselbe wie beim Abrufen einer Nachrichtenliste. Das folgende Code‑Snippet zeigt, wie man Nachrichten aus verschiedenen Ordnern mit EWS auflistet.
// 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);
Auflisten von Nachrichten mit Paging‑Unterstützung
Das folgende Java‑Code‑Snippet zeigt, wie man eine Nachrichtenliste mit Paging‑Unterstützung erhält.
// 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();
}
Abrufen von Nachrichtentypinformationen aus ExchangeMessageInfo
IEWSClient client = EWSClient.getEWSClient(mailboxUri, credentials);
ExchangeMessageInfoCollection list = client.listMessages(client.getMailboxInfo().getDeletedItemsUri());
System.out.println(list.get_Item(0).getMessageInfoType()); // MessageInfoType
Nachrichten speichern
Dieser Artikel zeigt, wie man Nachrichten aus einem Exchange‑Server‑Postfach abruft und sie auf der Festplatte im EML‑ und MSG‑Format speichert:
- Als EML auf Festplatte speichern.
- In Memory‑Stream speichern.
- Als MSG speichern.
Nachrichten im EML-Format speichern
Um Nachrichten zu erhalten und im EML-Format zu speichern:
- Erstellen Sie eine Instanz der IEWSClient‑Klasse.
- Geben Sie mailboxUri, Benutzernamen, Passwort und Domäne an.
- Rufen Sie die Methode IEWSClient.listMessages() auf, um eine Instanz der ExchangeMessagesInfoCollection‑Sammlung zu erhalten.
- Durchlaufen Sie die ExchangeMessagesInfoCollection‑Sammlung, um die eindeutige URI für jede Nachricht zu erhalten.
- Rufen Sie die Methode IEWSClient.saveMessage() auf und übergeben Sie die eindeutige URI als Parameter.
- Geben Sie der saveMessage()-Methode einen Pfad an, wohin die Datei gespeichert werden soll.
Das folgende Code‑Snippet zeigt, wie Sie EWS verwenden, um eine Verbindung zum Exchange‑Server herzustellen und Nachrichten als EML‑Dateien zu speichern.
// 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");
}
Nachrichten in einen Memory‑Stream speichern
Anstatt EML‑Dateien auf die Festplatte zu speichern, ist es möglich, sie in einen Memory‑Stream zu schreiben. Das ist nützlich, wenn Sie den Stream in einem Speicherort wie einer Datenbank ablegen wollen. Sobald der Stream in einer Datenbank gespeichert ist, können Sie die EML‑Datei wieder in den MailMessage Klasse. Das folgende Code‑Snippet zeigt, wie Sie Nachrichten aus einem Exchange‑Server‑Postfach mit EWS in einen Memory‑Stream speichern.
// 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);
}
Nachrichten im MSG-Format speichern
Die IEWSClient.saveMessage() Methode kann die Nachricht direkt im EML-Format speichern. Um die Nachrichten im MSG‑Format zu speichern, rufen Sie zuerst die IEWSClient.fetchMessage() Methode, die eine Instanz von zurückgibt MailMessage Klasse. Rufen Sie dann die MailMessage.save() Methode zum Speichern der Nachricht im MSG-Format. Das folgende Code‑Snippet zeigt, wie Sie Nachrichten aus einem Exchange‑Server‑Postfach abrufen und im MSG‑Format mit EWS speichern.
// 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());
}
Abrufen von ExchangeMessageInfo aus Nachrichten‑URI
Eine E‑Mail‑Nachricht wird durch ihren eindeutigen Bezeichner, die URI, repräsentiert und ist integraler Bestandteil von ExchangeMessageInfo Objekt. Falls nur die Nachrichten‑URI verfügbar ist, dann ExchangeMessageInfo Objekt kann ebenfalls mit diesen verfügbaren Informationen abgerufen werden. Die überladene Version von listMessages nimmt eine Liste von IDs zur Verwendung ExchangeMessageInfoCollection. Das folgende Code‑Snippet zeigt, wie Sie erhalten ExchangeMessageInfo aus der Nachrichten‑URI.
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());
}
Nachrichten aus einem Exchange-Server-Postfach abrufen
Nachrichtenauflistung auf einem Exchange Server nutzte die listMessages() Methode, um eine Liste von Nachrichten aus einem Exchange-Server-Postfach zu erhalten. Die listMessages() Methode erhält grundlegende Informationen über Nachrichten, z. B. Betreff, Nachrichten‑ID, Von und An. Um die vollständigen Nachrichtendetails zu erhalten, stellt Aspose.Email.Exchange die Methode IEWSClient.fetchMessage() bereit. Diese Methode akzeptiert die Nachrichten‑URI als Parameter und gibt eine Instanz von MailMessage Klasse. Die MailMessage Klasse liefert dann Nachrichtendetails wie Inhalt, Header und Anhänge. Erfahren Sie mehr über das MailMessage API, oder erfahren Sie, wie Sie E-Mails mit dem MailMessage Klasse. Um Nachrichten aus dem Exchange‑Server‑Postfach abzurufen:
- Erstellen Sie eine Instanz vom Typ IEWSClient.
- Geben Sie den Servernamen, Benutzernamen, das Passwort und die Domäne an.
- Rufen Sie listMessages auf, um die ExchangeMessageInfoCollection zu erhalten.
- Durchlaufen Sie die ExchangeMessageInfoCollection‑Sammlung, um die Werte von ExchangeMessageInfo.UniqueURI zu erhalten.
- Rufen Sie IEWSClient.fetchMessage() auf und übergeben Sie ExchangeMessageInfo.UniqueURI als Parameter.
Das folgende Code‑Snippet zeigt, wie Sie eine Verbindung zum Exchange‑Server‑Postfach herstellen und alle Nachrichten mit EWS abrufen.
// 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());
}
}
Verwenden der FetchItem-Methode zum Abrufen einer Nachricht
Die FetchItem Methode ist vorzuziehen, wenn Sie ein MapiMessage und mit MAPI‑Eigenschaften zu arbeiten. Sie können diese Methode auch zum Abrufen beliebiger Outlook‑Elemente verwenden, wie z. B. Kontakte, Termine, Aufgaben usw.
// 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();
}
Nachrichtengröße vorab abrufen
Microsoft Outlook InterOp bietet die Möglichkeit, die Nachrichtengröße abzurufen, bevor die vollständige Nachricht vom Server heruntergeladen wird. Im Fall der Aspose.Email‑API wird die zusammengefasste Information, die vom Exchange‑Server abgerufen wird, dargestellt durch ExchangeMessageInfo Klasse. Sie bietet dieselbe Funktion zum Abrufen der Nachrichtengröße über die Size‑Eigenschaft. Um die Nachrichtengröße zu erhalten, wird der Standardaufruf von IEWSClient’s listMessages verwendet, der eine Sammlung von ExchangeMessageInfo. Das folgende Code‑Snippet zeigt, wie man die Nachrichtengröße mit dem ExchangeMessageInfo Klasse.
// 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("==================================");
}
Nachrichten rekursiv herunterladen
Die EWSClient’s listSubFolders() Methode, die verwendet werden kann, um Nachrichten rekursiv aus Ordnern und Unterordnern eines Exchange‑Server‑Postfachs abzurufen. Dies erfordert Exchange Server 2007 oder neuer, da EWS verwendet wird. Das folgende Code‑Snippet zeigt, wie das gesamte Postfach (Ordner und Unterordner) eines Exchange‑Servers heruntergeladen wird. Die Ordnerstruktur wird lokal erstellt und alle Nachrichten werden heruntergeladen.
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) {
}
}
Nachrichten aus öffentlichen Ordnern herunterladen
Microsoft Exchange Server ermöglicht Benutzern das Erstellen öffentlicher Ordner und das Veröffentlichen von Nachrichten darin. Um dies über Ihre Anwendung zu tun, verwenden Sie Aspose.Email’s EWSClient Klasse, um eine Verbindung zum Exchange‑Server herzustellen und Nachrichten sowie Beiträge aus öffentlichen Ordnern zu lesen und herunterzuladen. Das folgende Code‑Snippet zeigt, wie alle öffentlichen Ordner und Unterordner gelesen sowie alle darin gefundenen Nachrichten aufgelistet und heruntergeladen werden. Dieses Beispiel funktioniert nur mit Microsoft Exchange Server 2007 oder höher, da nur diese EWS unterstützen.
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);
}
}
}
Nachrichten verschieben
Sie können E‑Mail‑Nachrichten von einem Ordner in einen anderen verschieben mit Hilfe der IEWSClient Klasse verschieben Methode. Sie nimmt die Parameter:
- Die eindeutige URI der zu verschiebenden Nachricht.
- Die eindeutige URI des Zielordners.
Nachrichten zwischen Ordnern verschieben
Das folgende Code‑Snippet zeigt, wie man eine Nachricht in einem Postfach vom Posteingangs‑Ordner in einen Ordner namens „Processed“ verschiebt. In diesem Beispiel:
- Liest Nachrichten aus dem Posteingangs‑Ordner.
- Verarbeitet einige Nachrichten basierend auf bestimmten Kriterien (in diesem Beispiel wird ein Schlüsselwort im Nachrichtentitel gefunden).
- Verschiebt Nachrichten, die die gegebene Bedingung erfüllen, in den Verarbeitungsordner.
// 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
}
}
Nachrichten löschen
Sie können E-Mails aus einem Ordner mit Hilfe der IEWSClient Klasse deleteItem Methode. Sie nimmt die eindeutige URI der Nachricht als Parameter.
Das folgende Code‑Snippet zeigt, wie Sie eine Nachricht aus dem Posteingangs‑Ordner löschen. Für dieses Beispiel lautet der Code:
- Liest Nachrichten aus dem Posteingangs‑Ordner.
- Verarbeite Nachrichten basierend auf bestimmten Kriterien (in diesem Beispiel finden wir ein Schlüsselwort im Betreff der Nachricht).
- Löscht die Nachricht.
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
}
}
Nachrichten kopieren
Die Aspose.Email‑API ermöglicht das Kopieren einer Nachricht von einem Ordner in einen anderen Ordner mittels copyItem Methode. Die überladene Version dieser Methode gibt die eindeutige URI der kopierten Nachricht zurück, wie in diesem Artikel gezeigt.
Kopieren einer Nachricht in einen anderen Ordner
Das folgende Code‑Snippet zeigt, wie Sie eine Nachricht in einen anderen Ordner kopieren.
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());
}