Em 2009 os serviços oferecidos pelo Gmail sofreram diversas falhas. Este assunto inclusive foi tema de capa da revista Info de abril de 2009. Muitas pessoas depositam uma confiança cega nos serviços do Google, principalmente por sua simplicidade e engenhosidade. Por conta desta admiração, o Gmail se tornou um ponto fundamental nas atividades diárias de um grande número de pessoas. O tutorial que se segue detalha os procedimentos para fazer uma cópia de segurança, em um sistema GNU/Linux, das mensagens armazenadas em uma conta do Gmail.
O programa utilizado para se conectar ao Gmail e fazer o download das mensagens chama-se getmail4. O programa getmail se conecta ao servidor do Google, usando os protocolos POP ou IMAP. Usando o POP o Google limita em 99 o número de mensagens baixadas de cada vez. Isto pode ser muito inconveniente, pois com todo o espaço que o Google nos oferece, o número de mensagens pode chegar às centenas de milhares. Isto pode ser resolvido com um pequeno laço em shell, que fica executando o programa getmail4 repetidamente, até o fim da transferência de todas as mensagens.
O getmail4 permite que se especifique o formato das mensagens após serem recuperadas do Google: formato Mbox ou Maildir. No formato mbox todas as mensagens ficam em um único arquivo, o que é muito inconveniente, pois arquivos grandes são mais difíceis de serem processados por qualquer cliente de email. Já o formato Maildir cria um arquivo separado para cada mensagem, o que é igualmente inconveniente, pois teremos um diretório com centenas de milhares de mensagens. Quando isto ocorre, até comandos mais banais, como um simples "ls", demoram minutos para serem executados.
A melhor alternativa é justamente aquela que combina elementos dos dois enfoques. Criar múltiplos arquivos mbox seguindo um critério pré-definido. No Google temos os labels, ou rótulos, que nos permitem agrupar as mensagens segundo critérios que definimos. Desta forma, primeiramente é preciso agrupar as mensagens e atribuir labels a elas. Em seguida, fazemos o download das mensagens que atendam a este pré-requisito.
Os passos a serem seguidos são muito simples. Primeiramente configura-se o programa getmail4, criando um dirétório para armazenar as diretivas de uso do programa.
mkdir .getmail
Em seguida, deve-se criar o diretório onde as mensagens serão armazenadas. Não existe uma regra fixa para o local em que deve ser criado este diretório.
mkdir ~/mail/gmail-archive
O próximo passo é criar o arquivo de configuração do programa getmail4, chamado ~/.getmail getmail.gmail. Neste arquivo são guardadas as informações de sua conta no Gmail e o local onde as mensagens serão gravadas.
[retriever]
type = SimpleIMAPSSLRetriever
server = imap.gmail.com
username = seu.email@gmail.com
password = suasenha
mailboxes = ("out.gmail",)
[destination]
type = Mboxrd
path = ~/mail/gmail-archive/colaboracoes.mbox
[options]
# print messages about each action (verbose = 2)
# Other options:
# 0 displays warnings and errors
# 1 displays messages about retrieving and deleting messages
read_all = false
delete = false
verbose = 2
message_log = ~/.getmail/gmail.log
No primeiro conjunto de diretivas, agrupadas sob o rótulo [retriever], especifica-se os dados do Gmail (protocolo, nome de usuário, senha, etc.).
Na opção type são possíveis duas alternativas: SimplePOP3SSLRetriever e SimpleIMAPSSLRetriever. A opção escolhida foi SimpleIMAPSSLRetriever, que permite baixar as imagens segundo a rotulação (labels) atribuida às mensagens. Esta rotulação está especificada na opção mailboxes. Neste exemplo, as mensagens baixadas do gmail serão gravadas no arquivo de nome out.gmail.
No segundo grupo de diretivas, [destination], especifica-se como as mensagens serão gravadas no computador. Adotou-se neste exemplo o formato mbox (Mboxrd), e o arquivo onde as mensagens serão gravadas. Importante, o arquivo, mesmo vazio, já deve existir. Caso não exista, deve ser criado com o comando touch:
touch ~/mail/gmail-archive/colaboracoes.mbox
O terceiro grupo de diretivas, [options], diz respeito às mensagens geradas pelo programa e onde serão gravadas.
O próximo passo é invocar o programa getmail4:
/usr/bin/getmail -r /home/usuario/.getmail/getmail.gmail
A opção -r instrui o programa getmail4 a pegar as informações de configuração de um arquivo. Em nosso exemplo, o arquivo /home/usuario/.getmail/getmail.gmail.
Uma vez que tenha sido feito o processamento inicial, baixando as mensagens selecionadas, o programa getmail4 pode ser executado diariamente em horários pré-determinados. O trecho de código a seguir exemplifica uma possível maneira de se realizar esta tarefa.
#!/bin/bash
# getmail.sh - baixar automaticamente as mensagens do Gmail
/usr/bin/getmail -q -r /home/usuario/.getmail/getmail.gmail
Note o acréscimo da diretiva -q, que significa quiet. Como o programa está sendo rodado via cron, não é possível visualizar as mensagens de execução do programa. O arquivo de log criado durante a execução poderá ser consultado posteriormente em caso de problemas ou mesmo apenas para visualizar o resultado da execução.
Em seguida, configure a crontab para invocar o script com a periodicidade desejada:
# Execute o programa a cada 30 minutos
0,30 * * * * /home/usuario/bin/getmail.sh