Detectando Novas Mensagens de Email no Servidor POP3
Com contas POP3, você pode deixar mensagens no servidor ao baixá-las e lê-las. Deixar emails no servidor significa que eles estão disponíveis para outros aplicativos e indivíduos, por exemplo, usuários que acessam seu email de vários dispositivos. Ou você pode querer baixar apenas mensagens que atendem a alguns critérios especiais, por exemplo, mensagens com uma linha de assunto específica. Para gerenciar emails, você pode:
- Ler todas as mensagens do servidor de email POP3 usando Aspose.Email.
- Baixar as mensagens para seu banco de dados local.
As mensagens não são deletadas, mas permanecem no servidor. Da primeira vez que é executado, esse processo funciona bem. Todas as mensagens necessárias são baixadas para o banco de dados. Mas da segunda vez que é executado, as mesmas mensagens são baixadas porque ainda estão no servidor de email. Isso causa registros duplicados. Para resolver esse problema, use a propriedade Pop3MessageInfo.UniqueID para verificar se uma mensagem já foi baixada. O ID único da mensagem deve ser armazenado no banco de dados: é a chave de pesquisa para detectar novas mensagens.
Detectando Novas Mensagens
Para identificar novos emails a partir de uma lista de emails em um servidor POP3:
- Conecte-se ao servidor.
- Obtenha uma lista de emails.
- Conecte-se ao banco de dados.
- Obtenha uma lista de emails.
- Compare as listas.
- Salve novos emails no banco de dados.
O processo é mais rápido quando você:
- Busca todos os IDs únicos das mensagens em uma tabela hash.
- Busca na tabela hash em vez do banco de dados para cada mensagem de email em um loop foreach(…).
Em vez de consultar o banco de dados para cada mensagem, exigindo muitas chamadas ao banco de dados, este método requer apenas uma chamada. O seguinte trecho de código mostra como detectar novas mensagens de email no servidor POP3.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET | |
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(); | |
foreach (Pop3MessageInfo msgInfo in msgList) | |
{ | |
// Get the POP3 message's unique ID | |
string strUniqueID = msgInfo.UniqueId; | |
// 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) | |
{ | |
Console.WriteLine(ex.Message); | |
} | |
} | |
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 bool 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; | |
} |