Trabalhando com Pastas no Servidor IMAP
Obtendo Informações de Pastas
Obter informações sobre pastas de um servidor IMAP é muito fácil com Aspose.Email. Chame o listFolders() método do ImapClient classe. Retorna um objeto do ImapFolderInfoCollection tipo. Percorra esta coleção e obtenha informações sobre pastas individuais em um loop. O método é sobrecarregado. Você pode passar o nome de uma pasta como parâmetro para obter uma lista de subpastas. O trecho de código a seguir mostra como obter informações de pastas de um servidor IMAP usando o método Aspose.Email descrito.
// 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());
}
Excluindo e Renomeando Pastas
Uma pasta em um servidor IMAP pode ser excluída ou renomeada em uma única linha com Aspose.Email:
- O deleteFolder() método aceita o nome da pasta como parâmetro.
- Para o renameFolder() método, você precisa passar o nome da pasta atual e o novo nome da pasta. O trecho de código a seguir mostra como remover uma pasta de um servidor IMAP e como renomear uma pasta. Cada operação é realizada com uma única linha de código.
// 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");
Adicionando uma Nova Mensagem em uma Pasta
Você pode adicionar uma nova mensagem à pasta usando o MailMessage e ImapClient classes. Primeiro, crie um MailMessage objeto fornecendo os valores de assunto, destinatário e remetente. Em seguida, inscreva‑se em uma pasta e adicione a mensagem a ela. O trecho de código a seguir mostra como adicionar uma nova mensagem a uma pasta.
// 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);
Adicionar Múltiplas Mensagens com Suporte MultiConnection
Você pode adicionar várias mensagens usando o appendMessages método fornecido pelo ImapClient classe. O appendMessages método aceita uma lista de MailMessage e o adiciona à pasta atual se a pasta não for fornecida como parâmetro. O ImapClient também suporta o modo MultiConnection para operações com alta carga. O trecho de código a seguir mostra como adicionar várias mensagens usando o modo MultiConnection.
// 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);
Mover Mensagens para Outra Pasta de Caixa de Correio
Aspose.Email for Java permite mover uma mensagem de uma pasta de caixa de correio para outra usando o ImapClient API. O moveMessage O método usa o ID único da mensagem e o nome da pasta de destino para mover uma mensagem para a pasta de destino. O seguinte trecho de código mostra como mover mensagens para outra pasta de caixa de correio.
// 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();
}
Copiar Mensagens para Outra Pasta de Caixa de Correio
A API Aspose.Email fornece a capacidade de copiar uma mensagem de uma pasta de caixa de correio para outra. Permite copiar uma única mensagem assim como múltiplas mensagens usando o copyMessage e copyMessages métodos. O copyMessages método fornece a capacidade de copiar várias mensagens da pasta de origem de uma caixa de correio para a pasta de caixa de correio de destino. O trecho de código a seguir mostra como copiar mensagens para outra pasta de caixa de correio.
// 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();
}
Trabalhando com Pastas de Caixa de Correio de Uso Especial
Alguns armazenamentos de mensagens IMAP incluem caixas de correio de uso especial, como aquelas usadas para armazenar mensagens de rascunho ou enviadas. Muitos clientes de e‑mail permitem que os usuários especifiquem onde as mensagens de rascunho ou enviadas devem ser colocadas, mas configurá‑las requer que o usuário saiba quais caixas de correio o servidor reservou para esses fins. O Aspose.Email pode identificar essas caixas de correio de uso especial usando o ImapMailboxInfo classe para facilitar o trabalho com elas. O exemplo de código a seguir demonstra como acessar essas caixas de correio de uso especial usando o ImapMailboxInfo classe.
// 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());