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.
-
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.
-
Copie a senha atual com hash do usuário no servidor antigo. Salve essa string em algum lugar.
-
Defina a senha do usuário para um valor conhecido no servidor antigo.
-
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.
-
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
-
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
-
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)
-
Pare o Dovecot no novo servidor.
-
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
-
Exclua qualquer arquivo dovecot.index * no Maildir do usuário.
-
Reinicie o Dovecot no novo servidor.
-
Importe os e-mails do usuário usando o imapsync. Inclua a opção --useuid.
-
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.
-
Pare novamente o pombal no novo servidor.
-
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.
-
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)
-
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!
-
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.
-
Pare o Dovecot novamente e substitua o arquivo dovecot-uidlist existente pela versão .new criada acima.
-
Exclua qualquer arquivo .index * e .log.
-
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.
-
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
-
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.