Arbeiten mit Ordnern auf einem IMAP-Server
Abrufen von Ordnerinformationen
Das Abrufen von Ordnerinformationen von einem IMAP-Server ist mit Aspose.Email sehr einfach. Rufen Sie die listFolders() Methode des ImapClient Klasse. Sie gibt ein Objekt des ImapFolderInfoCollection Typ. Durchlaufen Sie diese Sammlung und erhalten Sie Informationen zu einzelnen Ordnern in einer Schleife. Die Methode ist überladen. Sie können einen Ordnernamen als Parameter übergeben, um eine Liste von Unterordnern zu erhalten. Das folgende Codefragment zeigt, wie man Ordnerinformationen von einem IMAP-Server mit der beschriebenen Aspose.Email‑Methode abruft.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Get all folders in the currently subscribed folder
ImapFolderInfoCollection folderInfoColl = client.listFolders();
// Iterate through the collection to get folder info one by one
for (ImapFolderInfo folderInfo : (Iterable<ImapFolderInfo>) folderInfoColl) {
// Folder name and get New messages in the folder
System.out.println("Folder name is " + folderInfo.getName());
ImapFolderInfo folderExtInfo = client.getFolderInfo(folderInfo.getName());
System.out.println("New message count: " + folderExtInfo.getNewMessageCount());
System.out.println("Is it readonly? " + folderExtInfo.getReadOnly());
System.out.println("Total number of messages " + folderExtInfo.getTotalMessageCount());
}
Ordner löschen und umbenennen
Ein Ordner auf einem IMAP-Server kann mit Aspose.Email in einer einzigen Zeile gelöscht oder umbenannt werden:
- Die deleteFolder() Methode akzeptiert den Ordnernamen als Parameter.
- Für die renameFolder() Methode, Sie müssen den aktuellen Ordnernamen und den neuen Ordnernamen übergeben. Das folgende Codefragment zeigt, wie man einen Ordner von einem IMAP-Server entfernt und wie man einen Ordner umbenennt. Jeder Vorgang wird mit einer Codezeile durchgeführt.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Delete a folder and Rename a folder
client.deleteFolder("foldername");
client.renameFolder("foldername", "newfoldername");
Hinzufügen einer neuen Nachricht in einem Ordner
Sie können eine neue Nachricht zum Ordner hinzufügen, indem Sie die MailMessage und ImapClient Klassen. Erstellen Sie zuerst ein MailMessage Objekt, indem Sie Betreff, An‑ und Von‑Werte angeben. Anschließend einen Ordner abonnieren und die Nachricht hinzufügen. Das folgende Codefragment zeigt, wie man eine neue Nachricht zu einem Ordner hinzufügt.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Create a message
MailMessage msg = new MailMessage("user@domain1.com", "user@domain2.com", "subject", "message");
// Subscribe to the Inbox folder and Append the newly created message
client.selectFolder(ImapFolderInfo.IN_BOX);
client.subscribeFolder(client.getCurrentFolder().getName());
client.appendMessage(client.getCurrentFolder().getName(), msg);
Mehrere Nachrichten mit MultiConnection-Unterstützung hinzufügen
Sie können mehrere Nachrichten hinzufügen, indem Sie das appendMessages Methode bereitgestellt von dem ImapClient Klasse. Die appendMessages Methode akzeptiert eine Liste von MailMessage und fügt ihn dem aktuellen Ordner hinzu, falls kein Ordner als Parameter angegeben ist. ImapClient unterstützt außerdem den MultiConnection‑Modus für stark ausgelastete Vorgänge. Das folgende Codefragment zeigt, wie man mehrere Nachrichten mit dem MultiConnection‑Modus hinzufügt.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
ImapClient imapClient = new ImapClient();
imapClient.setHost("<HOST>");
imapClient.setPort(993);
imapClient.setUsername("<USERNAME>");
imapClient.setPassword("<PASSWORD>");
imapClient.setSupportedEncryption(EncryptionProtocols.Tls);
imapClient.setSecurityOptions(SecurityOptions.SSLImplicit);
List<MailMessage> messages = new ArrayList<MailMessage>();
for (int i = 0; i < 20; i++) {
MailMessage message = new MailMessage("<EMAIL ADDRESS>", "<EMAIL ADDRESS>", "Test Message - " + UUID.randomUUID().toString(), "IMAP Group Append with MultiConnection");
messages.add(message);
}
imapClient.setConnectionsQuantity(5);
imapClient.setUseMultiConnection(MultiConnectionMode.Enable);
imapClient.appendMessages(messages);
Nachrichten in einen anderen Postfachordner verschieben
Aspose.Email for Java ermöglicht das Verschieben einer Nachricht von einem Postfachordner zu einem anderen mittels der ImapClient API. Die moveMessage Methode verwendet die eindeutige Nachrichten-ID und den Namen des Zielordners, um eine Nachricht in den Zielordner zu verschieben. Der folgende Code‑Snippet zeigt, wie Sie Nachrichten in einen anderen Postfachordner verschieben.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// This example shows how to move a message from one folder of a mailbox to another one using the ImapClient API of Aspose.Email for Java
// Available from Aspose.Email for Java onwards
// -------------- Available API Overload Members --------------
// void ImapClient.moveMessage(IConnection iConnection, int sequenceNumber, String folderName, boolean commitDeletions)
// void ImapClient.moveMessage(IConnection iConnection, String uniqueId, String folderName, boolean commitDeletions)
// void ImapClient.moveMessage(int sequenceNumber, String folderName, boolean commitDeletions)
// void ImapClient.moveMessage(String uniqueId, String folderName, boolean commitDeletions)
// void ImapClient.moveMessage(IConnection iConnection, int sequenceNumber, String folderName)
// void ImapClient.moveMessage(IConnection iConnection, String uniqueId, String folderName)
// void ImapClient.moveMessage(int sequenceNumber, String folderName)
// void ImapClient.moveMessage(String uniqueId, String folderName)
final ImapClient client = new ImapClient("host.domain.com", 993, "username", "password");
try {
String folderName = "EMAILNET-35151";
if (!client.existFolder(folderName))
client.createFolder(folderName);
try {
MailMessage message = new MailMessage("from@domain.com", "to@domain.com", "EMAILNET-35151 - " + UUID.randomUUID(),
"EMAILNET-35151 ImapClient: Provide option to Move Message");
client.selectFolder(ImapFolderInfo.IN_BOX);
// Append the new message to Inbox folder
String uniqueId = client.appendMessage(ImapFolderInfo.IN_BOX, message);
ImapMessageInfoCollection messageInfoCol1 = client.listMessages();
System.out.println(messageInfoCol1.size());
// Now move the message to the folder EMAILNET-35151
client.moveMessage(uniqueId, folderName);
client.commitDeletes();
// Verify that the message was moved to the new folder
client.selectFolder(folderName);
messageInfoCol1 = client.listMessages();
System.out.println(messageInfoCol1.size());
// Verify that the message was moved from the Inbox
client.selectFolder(ImapFolderInfo.IN_BOX);
messageInfoCol1 = client.listMessages();
System.out.println(messageInfoCol1.size());
} finally {
try {
client.deleteFolder(folderName);
} catch (java.lang.RuntimeException e) {
}
}
} finally {
if (client != null)
client.dispose();
}
Nachrichten in einen anderen Postfachordner kopieren
Aspose.Email API bietet die Möglichkeit, eine Nachricht von einem Postfachordner in einen anderen zu kopieren. Sie ermöglicht das Kopieren einer einzelnen oder mehrerer Nachrichten mittels copyMessage und copyMessages Methoden. Die copyMessages Methode bietet die Möglichkeit, mehrere Nachrichten vom Quellordner eines Postfachs in den Zielordner zu kopieren. Das folgende Codefragment zeigt, wie man Nachrichten in einen anderen Postfachordner kopiert.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
final ImapClient client = new ImapClient("exchange.aspose.com", "username", "password");
try {
// Create the destination folder
String folderName = "EMAILNET-35242";
if (!client.existFolder(folderName))
client.createFolder(folderName);
try {
// Append a couple of messages to the server
MailMessage message1 = new MailMessage("asposeemail.test3@aspose.com", "asposeemail.test3@aspose.com", "EMAILNET-35242 - " + UUID.randomUUID(),
"EMAILNET-35242 Improvement of copy method.Add ability to 'copy' multiple messages per invocation.");
String uniqueId1 = client.appendMessage(message1);
MailMessage message2 = new MailMessage("asposeemail.test3@aspose.com", "asposeemail.test3@aspose.com", "EMAILNET-35242 - " + UUID.randomUUID(),
"EMAILNET-35242 Improvement of copy method.Add ability to 'copy' multiple messages per invocation.");
String uniqueId2 = client.appendMessage(message2);
// Verify that the messages have been added to the mailbox
client.selectFolder(ImapFolderInfo.IN_BOX);
ImapMessageInfoCollection msgsColl = client.listMessages();
for (ImapMessageInfo msgInfo : msgsColl)
System.out.println(msgInfo.getSubject());
// Copy multiple messages using the CopyMessages command and Verify that messages are copied to the destination folder
client.copyMessagesByUids(Arrays.asList(uniqueId1, uniqueId2), folderName);
client.selectFolder(folderName);
msgsColl = client.listMessages();
for (ImapMessageInfo msgInfo : msgsColl)
System.out.println(msgInfo.getSubject());
} finally {
try {
client.deleteFolder(folderName);
} catch (java.lang.RuntimeException e) {
}
}
} finally {
if (client != null)
client.dispose();
}
Arbeiten mit Spezial‑Postfach‑Ordnern
Einige IMAP-Nachrichtenspeicher enthalten Spezialpostfächer, z. B. für Entwürfe oder gesendete Nachrichten. Viele E-Mail-Programme erlauben dem Benutzer anzugeben, wo Entwürfe oder gesendete Nachrichten abgelegt werden sollen, aber die Konfiguration erfordert, dass der Benutzer weiß, welche Postfächer der Server hierfür reserviert hat. Aspose.Email kann diese Spezialpostfächer mithilfe der ImapMailboxInfo Klasse, um die Arbeit mit ihnen zu erleichtern. Das folgende Codebeispiel zeigt, wie man auf diese Spezialpostfächer zugreift, indem man die ImapMailboxInfo Klasse.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
ImapClient imapClient = new ImapClient();
imapClient.setHost("<HOST>");
imapClient.setPort(993);
imapClient.setUsername("<USERNAME>");
imapClient.setPassword("<PASSWORD>");
imapClient.setSupportedEncryption(EncryptionProtocols.Tls);
imapClient.setSecurityOptions(SecurityOptions.SSLImplicit);
ImapMailboxInfo mailboxInfo = imapClient.getMailboxInfo();
System.out.println(mailboxInfo.getInbox());
System.out.println(mailboxInfo.getDraftMessages());
System.out.println(mailboxInfo.getJunkMessages());
System.out.println(mailboxInfo.getSentMessages());
System.out.println(mailboxInfo.getTrash());