Detectando Novas Mensagens de E‑mail no Servidor POP3
Com contas POP3, você pode deixar as mensagens no servidor ao baixá‑las e lê‑las. Deixar e‑mails no servidor significa que eles ficam disponíveis para outras aplicações e pessoas, por exemplo, usuários que acessam seu e‑mail a partir de vários dispositivos. Ou você pode querer baixar somente mensagens que atendam a critérios especiais, por exemplo, mensagens com um assunto específico. Para gerenciar e‑mail, você pode;
- Leia todas as mensagens do servidor POP3 usando Aspose.Email.
- Baixe as mensagens para seu banco de dados local.
As mensagens não são excluídas, permanecendo no servidor. Na primeira execução, esse processo funciona bem. Todas as mensagens necessárias são baixadas para o banco de dados. Mas na segunda execução, as mesmas mensagens são baixadas novamente porque ainda estão no servidor de e‑mail. Isso gera registros duplicados. Para resolver esse problema, use o Pop3MessageInfo.UniqueID propriedade para verificar se uma mensagem já foi baixada. O ID único da mensagem deve ser armazenado no banco de dados: ele é a chave de pesquisa para detectar novas mensagens.
Detectando Novas Mensagens
Para identificar novos e‑mails a partir de uma lista de e‑mails em um servidor POP3:
- Conectar ao servidor.
- Obter uma lista de e‑mails.
- Conectar ao banco de dados.
- Obter uma lista de e‑mails.
- Comparar as listas.
- Salvar novos e‑mails no banco de dados.
O processo é mais rápido quando você:
- Buscar todos os IDs únicos das mensagens para uma tabela hash.
- Pesquisar a tabela hash ao invés do banco de dados para cada mensagem de e‑mail em um loop for(…).
Ao invés de consultar o banco de dados para cada mensagem, exigindo muitas chamadas, este método requer apenas uma chamada. O trecho de código a seguir mostra como detectar novas mensagens de e‑mail no servidor POP3.
public static void run() {
try {
// Connect to the POP3 mail server and check messages.
Pop3Client pop3Client = new Pop3Client("pop.domain.com", 993, "username", "password");
// List all the messages
Pop3MessageInfoCollection msgList = pop3Client.listMessages();
for (Pop3MessageInfo msgInfo : msgList) {
// Get the POP3 message's unique ID
String strUniqueID = msgInfo.getUniqueId();
// Search your local database or data store on the unique ID. If a match is found, that means it's already downloaded. Otherwise download and save it.
if (searchPop3MsgInLocalDB(strUniqueID) == true) {
// The message is already in the database. Nothing to do with this message. Go to next message.
} else {
// Save the message
savePop3MsgInLocalDB(msgInfo);
}
}
} catch (Exception ex) {
System.err.println(ex);
}
}
private static void savePop3MsgInLocalDB(Pop3MessageInfo msgInfo) {
// Open the database connection according to your database. Use public properties (for example msgInfo.Subject) and store in database,
// for example, " INSERT INTO POP3Mails (UniqueID, Subject) VALUES ('" + msgInfo.UniqueID + "' , '" + msgInfo.Subject + "') and Run the query to store in database.
}
private static boolean searchPop3MsgInLocalDB(String strUniqueID) {
// Open the database connection according to your database. Use strUniqueID in the search query to find existing records,
// for example, " SELECT COUNT(*) FROM POP3Mails WHERE UniqueID = '" + strUniqueID + "' Run the query, return true if count == 1. Return false if count == 0.
return false;
}