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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top