Migrar o Dovecot 0.99 para o Dovecot 2.xe preservar os UIDs POP

1

Eu tenho um servidor antigo executando o Sendmail e o Dovecot 0.99. Existem cerca de 50 contas de e-mail nesse servidor, associadas a vários nomes de domínio hospedados nele. Os dados de email são armazenados no formato MBOX no servidor antigo.

Eu preciso migrar essas contas de e-mail para um servidor de destino que executa o Postfix e o Dovecot 2.x. O servidor de destino usa o formato Maildir.

A migração de e-mails é fácil usando o imapsync. No entanto, os valores POP UIDL não são preservados. Isso faz com que todos os usuários com clientes POP (MS Outlook, etc) façam o download novamente de todas as mensagens na caixa de entrada como duplicatas em suas caixas de correio.

Como posso preservar os UIDs?

Eu tentei o dsync dovecot, mas a documentação é ruim e continuo recebendo mensagens de erro que não fazem sentido.

NOTA: Não podemos exigir que os usuários mudem de POP para IMAP ou alterem quaisquer configurações no software cliente. A migração deve ser transparente para os usuários.

Agradeço antecipadamente por qualquer conselho!

    
por Ryan Griggs 06.04.2016 / 16:58

1 resposta

1

OK, eu descobri como fazer isso. Aqui está a resposta, para qualquer um que possa achar útil. Esta é uma visão geral de alto nível. Deixe-me saber se você tiver dúvidas sobre os detalhes de qualquer etapa específica.

  1. Crie a caixa de correio do usuário no novo servidor. Defina a senha para um valor conhecido. Certifique-se de que o nome de usuário corresponda ao nome de usuário antigo.

  2. Copie a senha atual com hash do usuário no servidor antigo. Salve essa string em algum lugar.

  3. Defina a senha do usuário para um valor conhecido no servidor antigo.

  4. Força o pombal a construir os arquivos de caixa de correio apropriados no novo servidor: faça o telnet para o novo servidor, porta 110 e efetue login com o nome de usuário e a senha e, em seguida, emita um comando UIDL. Isso deve listar zero mensagens.

  5. Telnet para a porta 110 no servidor OLD, efetue login como usuário e descarregue a lista de UIDs usando o comando UIDL. Salve esta lista em um arquivo no Maildir da conta do usuário no servidor NEW. Chame isso de uidlist.old

  6. Anote o valor de UIDVALIDITY no servidor antigo, que, para o Dovecot 0.9x, será a primeira parte do UID ao emitir o comando UIDL: Exemplo de saída de linha do comando UIDL:

    1 1234567890.12345 1 = número da mensagem 1234567890 = UIDVALIDIDADE 12345 = UID da mensagem

  7. Modifique a configuração dovecot do novo servidor para usar o mesmo formato UID do servidor antigo. Edite o arquivo /etc/dovecot/conf.d/20-pop3.conf e defina o pop3_uidl_format para o formato desejado (para dovecot 0.9x ele deve ser% v.% U)

  8. Pare o Dovecot no novo servidor.

  9. Modifique o arquivo dovecot-uidlist do usuário, alterando o valor Vxxxxxx para o valor UIDVALIDITY da conta antiga. Este arquivo pode ser encontrado no diretório pessoal do usuário / Maildir

  10. Exclua qualquer arquivo dovecot.index * no Maildir do usuário.

  11. Reinicie o Dovecot no novo servidor.

  12. Importe os e-mails do usuário usando o imapsync. Inclua a opção --useuid.

  13. Uma vez importada, telnet novamente no novo servidor, porta 110 e faça o login como usuário. Emita o comando UIDL. Isso força o Dovecot a reconstruir a lista de mensagens.

  14. Pare novamente o pombal no novo servidor.

  15. Verifique se o arquivo dovecot-uidlist no novo servidor está no seguinte formato: 3 Vx Ny Gz 1 Px.y: z ...

A primeira linha contém o Vx (uidvalidity), Ny (próxima mensagem UID) e Gz (identificador global) Linhas subseqüentes contêm mensagens individuais. 1 é o número da mensagem Px é o valor de uidvalidity e y é o ID da mensagem. z é o nome do arquivo da mensagem.

Se o arquivo NÃO estiver nesse formato, telnet novamente para a nova porta do servidor 110 e valide como usuário, em seguida, emita novamente os comandos LIST e UIDL. Isso deve forçar o Dovecot a reescrever o arquivo nesse formato.

Certifique-se de que a contagem de mensagens corresponda à contagem de mensagens da conta antiga. Às vezes pode haver uma mensagem extra duplicada. É provavelmente no topo, e se assim for, você deve ver que os nomes dos arquivos são idênticos. Basta excluir esta linha do arquivo dovecot-uidlist, se for uma duplicata.

  1. Use o seguinte script PHP (requer PHP) para substituir o ID da mensagem de cada mensagem no arquivo dovecot-uidlist pelos IDs corretos do uidlist.old. Salve o script como uidimport.php no diretório Maildir do usuário.

    link (tentou postar aqui mas ficou bagunçado)

  2. Verifique se há linhas em branco ou valores espúrios em uidlist.old ou uidlist.new. CERTIFIQUE-SE de que não há linha em branco à direita na parte inferior!

  3. Execute o uidimport da seguinte forma:

    php uidimport.php uidlist.old dovecot-uidlist > dovecot-uidlist.new

Isso cria um arquivo dovecot-uidlist.new com o UID correto em cada linha.

  1. Pare o Dovecot novamente e substitua o arquivo dovecot-uidlist existente pela versão .new criada acima.

  2. Exclua qualquer arquivo .index * e .log.

  3. Edite o novo arquivo dovecot-uidlist e verifique se o valor Nxxxx na linha 1 está definido para o número NEXT após o UID da mensagem LAST na lista. Este número será usado para a próxima mensagem que chegar.

  4. Reinicie o Dovecot e faça o telnet para a nova porta do servidor 110. Autentique como o usuário, em seguida, execute o comando UIDL e salve a saída em uidlist.new

  5. Faça um diff de uidlist.old e uidlist.new. Se nenhuma diferença for encontrada, você duplicou com êxito o e-mail do usuário enquanto preserva o UID de cada mensagem! Parabéns!

Seguir estas etapas evitará que o Outlook e outros aplicativos de mensagens POP façam o download novamente das mensagens existentes do usuário. Eu realizei com sucesso estes passos em contas com até 7000 mensagens na caixa de entrada com sucesso!

Sinta-se à vontade para entrar em contato comigo caso tenha alguma dúvida.

    
por 04.05.2016 / 19:08