Como determinar o UID de uma mensagem no IMAP
-
23-09-2019 - |
Pergunta
Estou trabalhando em um projeto de cliente de email usando C#.Estou usando o protocolo POP e IMAP para me comunicar com o servidor.O problema é que não consigo entender por que, quando desejo obter o UID de uma mensagem, o resultado do servidor POP e do servidor IMAP são diferentes.
POP
C: UIDL 1
S: +OK 1 UID2-1269789826
e
IMAP
C: $ FETCH 1 (UID)
S: * 1 FETCH (UID 2)
S: $ OK Fetch completed.
Por que o resultado para obtenção do UID é tão diferente?No IMAP existe outra função para isso?Qualquer ajuda é bem-vinda.Obrigado.
Solução
POP3 e IMAP são dois protocolos distintos.Os UIDs usados por esses dois protocolos não estão relacionados e não deveriam ser iguais.Na verdade, um UID POP3 é uma string arbitrária, enquanto um UID IMAP é um número de 32 bits (transmitido como string).
Em teoria, é possível escrever um servidor de e-mail que suporte IMAP e POP3 e usar o mesmo UID para ambos os protocolos, mas não conheço nenhum servidor que realmente faça isso. Na prática, você deve tratar UIDs POP3 e UIDs IMAP como valores não relacionados.
RFC 1939 (POP3):O ID exclusivo de uma mensagem é uma string arbitrária determinada pelo servidor, consistindo de um a 70 caracteres no intervalo de 0x21 a 0x7E, que identifica exclusivamente uma mensagem dentro de um maildrop e que persiste entre sessões.
RFC 3501 (IMAP):(Atributo de mensagem de identificador exclusivo (UID) é) um valor de 32 bits atribuído a cada mensagem, que quando usado com o valor de validade do identificador exclusivo (veja abaixo) forma um valor de 64 bits que NÃO DEVE se referir a qualquer outra mensagem na caixa de correio ou qualquer caixa de correio subsequente com o mesmo nome para sempre.
Outras dicas
Fato imap muito importante
Foi isso que aprendi tocando com o Gmail (espero que outros sistemas sejam os mesmos):
- Enviou uma mensagem para minha caixa de entrada
- Tem uid 45
- Mova a mensagem para o lixo
- Agora tem UID 5 (porque o UID é único por caixa de correio)
- Mova -o de volta para a caixa de entrada
- Agora tem uid 46
- Mova -o de volta ao lixo
- Agora tem uid 6
- Obtenha a ideia ...
Eu mudei as mensagens usando a interface do usuário gmail.com
Até onde eu sei, o UID só é útil para encontrar os e -mails mais recentes em uma pasta. Você pode executar a pesquisa de comando ("UID 34:*
) Para obter todas as mensagens em uma pasta com UID 34 ou acima.
Mas não comece a usar o UID como uma chave para essa mensagem em um banco de dados ou você acabará com o DUPES.
Acho que vou dedicar um tempo recebido e o hash com o conteúdo da mensagem para obter um UID que eu possa realmente colocar em um banco de dados.