Transferindo mensagens entre servidores de e-mails

A ferramenta imapsync, desenvolvida sob licença GPL é útil e funcional para migrar mensagens de um servidor de e-mails para outro. Seja porque você está realmente migrando o servidor de e-mails atual da sua empresa, ou seja porque você quer fazer um backup de suas mensagens em outra conta de sua propriedade, caso você precise transferir mensagens de um lado para outro usando o protocolo IMAP, certamente você vai querer conhecer o imapsync pra isso.

Instalação

O imapsync está disponível no repositório oficial do Ubuntu e certamente da grande maioria das distribuições linux também. Desta forma, sua instalação dispensa comentários, visto que uma busca no sistema de gerenciamento de pacotes da sua distribuição facilmente o mostrará o pacote para instalação.

No ambiente da tela azul

Segundo consta no site oficial [1], usuário de sistemas Microsoft poderão executar a ferramenta a partir de um ambiente com ActiveState’s Perl, mas não vou comentar sobre este  procedimento  por dois motivos: (1) Não conheço Perl, embora tenha vontade de conhece-lo um dia; (2) Não uso sistemas Microsoft e não tenho vontade de usá-los ;).

Desta forma caso você não queira ao menos se esforçar em usar um LiveCD do Linux, então consulte o site oficial [1] da ferramenta que deve haver algum tutorial explicando o “ritual” para instalação, pois o uso depende das mesmas opções que descrevo abaixo.

Uso

Considerando que o software esteja instalado ele será usado via linha de comandos e a sintaxe básica é a que segue abaixo:

$ imapsync opções-servidor1 opções-servidor2 outras-opções

Com ele você poderá transferir, copiar, sincronizar ou mover todas as mensagens (ou apenas um pasta especifica, recursivamente ou não) que estejam em um servidor IMAP para outro, tudo dependerá, é claro, das opções fornecidas.

Perceba que você se conectará nos dois servidores simultaneamente: Onde estão as mensagens atualmente; e no novo para onde as mensagens serão copiadas/movidas/sincronizadas etc.

Algumas opções básicas

Existem algumas dezenas de parâmetros que podem ser usados e sugiro uma leitura na página de manual para encontrá-las, mas as que deixo aqui são essenciais e que você deverá usar com mais frequência:

–host1 e –host2 – Seguidas pelo nome ou endereço IP do servidor IMAP indicam o servidor de origem e o de destino das mensagens (ambas as opções são obrigatórias)
–port1 e –port2 – Após estes parâmetros informam a porta em que os seus servidores estão escutando e esperando por conexões IMAP (143, 993 etc)
–user1 e –user2 – Com estas opções informaremos o login do usuário em ambos os servidores, que não necessariamente precisam ser o mesmo.
–ssl1 e –ssl2 – Caso algum dos servidores utilize conexão segura SSL você deverá informar estes parâmetros para um, ou ambos os servidores, de acordo com a necessidade.
–authmech1 e –authmech2 – O mecanismo de autenticação usado por cada servidor (uma dica fácil para descobrir qual e o método a ser usado é tentar se conectar ao servidor a partir de cliente IMAP qualquer como o Thunderbird, Evolution, Outlook etc e então ver qual foi o método usado por lá).
–password1 e –password2 –  A senha dos usuários em ambos os servidores pode ser fornecida na linha de comandos usando-se estas opções, ou se estas opções forem omitidas você receberá um prompt as solicitando na hora de executar o comando.
–passfile1 e –passfile2 – Alternativamente você pode gravar a senha em um arquivo separado e informa-lo através destas opções. isto evita  que a senha fique registrada no histórico de comandos e também o desconforto de ter que digita-la caso tenha que acessar estas contas muitas vezes (não se esqueça de assegurar as permissões de acesso a estes arquivos o mais restritiva possível).

Opções de restrição

As opções a seguir permitem selecionar quais pastas/mensagens  serão sincronizadas/copiadas/movidas.

–folder – Informa o nome da pasta a ser sincronizada. Caso necessário você pode usar esta opção várias vezes para informar que deseja sincronizar várias pastas. Perceba que as pastas deverão existir em ambos os servidores com o mesmo nome. Caso não existam serão criadas antes que as mensagens sejam transferidas;
–folderrec – Da mesma forma que a opção anterior, mas funciona recursivamente. Ou seja se dentro da pasta “Acompanhar” você tem duas outras “Processos” e “Serviços”, ao invés de usar a opção –folder 3 vezes (uma para cada pasta), bastaria usar esta nova opção uma vez só para a pasta “Acompanhar”
–include – Se você tem um conjunto de pastas que o nome possui alguma similaridade você poderá usar esta opção para sincronizar aquelas que combinem com a sua expressão regular.
–exclude – Complementa a opção anterior fazendo o imapsync ignorar as pastas que combinem com o padrão fornecido. Por exemplo você poderia querer sincronizar a pasta “Mensagens-20..” (com a opção –include – o .. seriam substituídos por dois caracteres quaisquer na hora da procura por pastas) mas ignorando a pasta “Mensagens-2009” (adicionando também a opção –exclude)
–minage – Não sincroniza mensagens mais novas que N dias. Útil se você deseja apenas copiar as mensagens recebidas no últimos dias
–maxage – Não sincroniza mensagens mais velhas que N dias. Caso use ambas as opções ao mesmo tempo, esteja atento a ordem em que elas serão usadas pois isto pode influenciar nas mensagens que serão sincronizadas, conforme a representação abaixo, onde somente as mensagens dentro do período representado por “+” serão sincronizados:

passado |------------- maxage ++++++++> hoje (somente mensagens mais recentes)
passado |+++++++++++++ minage --------> hoje (somente mensagens mais antigas)
passado |---- maxage ++++ minage -----> hoje (mensagens dentro do intervalo especificado)
passado |+++ minage ------ maxage ++++> hoje (mensagens que não estão dentro do intervalo especificado)

–maxsize – Ignora as mensagens que sejam maior do que o tamanho estabelecido com esta opção.

Opções de teste

Estas opções podem ser usadas para testar se o comando está funcionando como você espera que estivesse

–dry – Não faz absolutamente nada mais além de mostrar as mensagens sobre o que seria feito se você não usa-se esta opção.
–justfoldersizes – Somente exibe o tamanho das pastas
–debug – Ativa o modo de depuração incrementando a quantidade de informações sobre o processo que está sendo feito
–debugimap – Ativa o modo de depuração sobre os comandos enviados/recebidos dos servidores IMAP
–justconnect – Somente testa se é viável conectar a ambos os servidores IMAP
–justlogin – Não só testa a viabilidade de conexão, mas testar a autenticação dos usuários também.

Outras opções úteis

Existem muitas outras opções. Eu escolhi aqui apenas aquelas que considerei mais úteis nas vezes que usei o imapsync, então não deixe de consultar a página de manual e o help interno do comando  para obter mais informações sobre estas e outras opções.

–delete – Exclui as mensagens do servidor de origem logo após a transferência. Isso é útil para quem precisar mover as mensagens de um servidor para o outro, pois sem esta opção as mensagens serão apenas copiadas de um servidor para o outro (veja que não é “delete1” e sim “delete”).
–delete2 – Excluir do servidor de destino, todas as mensagens que não tiverem uma cópia no servidor de origem. Se você pretende manter ambos os servidores sincronizados esta opção te será útil
–expunge1 – Expurga as mensagens do servidor de origem ao invés de deleta-las. Lembre-se que no IMAP, o processo de “delete” na verdade apenas marca a mensagem para a exclusão e a oculta da listagem de mensagens. Para realmente excluir a mensagem você deve expurgar, com esta opção.
–expunge2 – Expurga as mensagens no servidor de destino
–uindexpunge – Expurga somente as mensagens que não possuírem mais uma cópia no servidor de origem. Para que ela possa funcionar é obrigatório também informar a opção “–delete2”
–ignoresize – Ignora o tamanho das mensagens e simplesmente as transfere. Dica: Para copiar mensagens de/para um servidor Gmail eu tive que usar esta opção
–allowsizemismatch – Alguns servidores reportam um tamanho de mensagem (RFC822) diferente do que a mensagem realmente tem (as vezes algumas dezenas de bytes é suficiente para estragar tudo) e por isso o imapsync emite um erro não copiando as mensagens. Esta opção diz ao imapsync para ignorar o tamanho informado pelo servidor. Para usar esta opção é recomendável usar também a opção anterior. Em meus testes com Gmail eu precisei usar esta opção também, e não tive nenhum problema com perda de dados e nem de mensagens truncadas.
–idatefromheader – Ao enviar a mensagem para o servidor de destino esta opção informa que a data da mensagem é exatamente a que consta no cabeçalho da mensagem. Pode parecer algo imbecil, mas se você não usar esta opção as mensagens poderão ser listadas no novo servidor com a data em que você as transferiu, ao invés da data correta que deve ser exatamente (ou mais próximo possível do que consta em seu cabeçalho).

Agora na prática

Vou deixar alguns exemplos para que fique claro como se usa esta ferramenta, mas lembre-se que o segredo todo está na escolha das opções que serão empregadas. Consulte o “miniguia” que deixei acima e também a página de manual para entendê-las.

Movendo mensagens de um servidor para outro

O exemplo que deixo a seguir conecta-se a minha caixa postal no servidor IMAP da minha empresa que não possui SSL e realizada autenticação pelo método PLAIN e também ao minha caixa postal no Gmail, aonde eu pretendo mover todas as mensagens com mais de 365 dias que estão na pasta “Arquivo”.

imapsync \
--host1 imap.minhaempresa.com --port1 143 --user1 welrbraga --authmech1 PLAIN \
--host2 imap.gmail.com --port2 993 --ssl2 --user2 welrbraga --authmech2 LOGIN \
--folder Arquivo --idatefromheader --delete --skipsize --allowsizemismatch

Observe que quebrei o comando em 4 linhas para melhorar a sua visibilidade, mas isto não é obrigatório na hora de digitar o comando. Veja também que não informei a senha para conexão em nenhum dos dois servidores o que fará o imapsync solicita-las assim que eu mandar o comando executar. Note ainda o uso das opções –idatefromheader e –skipsize –allowsizemismatch para conseguir copiar as mensagens do Gmail sem problemas.

Sincronizando duas contas de e-mail

O comando a seguir poderia ser executado pelo cron, ou outro agendador de tarefas para que periodicamente sincronizasse uma determinada pasta para uma outra conta qualquer

imapsync \
--host1 imap.minhaempresa.com --port1 993 --ssl1 --user1 welrbraga --authmech1 LOGIN --ssl1 --passfile1 senha1.txt \
--host2 imap.minhaempresa.com --port2 993 --ssl2 --user2 welingtonbraga --authmech2 LOGIN --passfile2 senha2.txt \
--folder Arquivado --delete2 --skipsize --allowsizemismatch

Perceba que neste exemplo ambas as contas estão no mesmo servidor (mas poderiam ser servidores diferentes), também foram usadas as opções “–passfile” para informar os arquivos contendo a senha de cada conta e ainda o uso da opção “–delete2” que é a responsável por excluir as mensagens da segunda conta que já tenham sido excluídas da primeira. Caso eu quisesse sincronizar toda a conta bastaria omitir a opção “–folder”

Conclusão

Comparando ambos os exemplos dados percebe-se que seu uso é bem simples e na verdade poucas opções seriam usadas para mudar a forma de funcionamento. Sendo assim, escrever outras dezenas de exemplos seria improdutivo visto que não acrescentariam muito mais do que se pode entender com apenas estes dois modelos e da explicação das suas funções.

Caso fique alguma dúvida, como já disse antes,consulte a página de manual (man imapsync) e o help online (imapsync –help), mas se quiser também sinta-se a vontade a deixar um comentário no final desta página.

Referência

[1] Lamiral, Gilles. Imapsync Website. Disponível em <http://www.linux-france.org/prj/imapsync/>

Um comentário em “Transferindo mensagens entre servidores de e-mails”

  1. Eu gostei muito do tutorial e resolveu meu problema, como não tenho problemas com sistemas operacionais, foi só reiniciar o Windows e logar no meu Ubuntu, e consegui executar com tranquilidade a sincronização.
    Acredito que se essa ferramenta tivesse uma interface e pudesse listar as contas dos servidores e fazer em lote a sincronização, seria uma ferramenta revolucionária.

    obrigado pelo tutorial.

    Vagner

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.