Há cerca de dois anos resolvi aceitar a dura realidade de que nenhum programa de email presta. Após essa revelação, resolvi seguir os passos dos que foram iluminados antes e resolvi usar o mutt 1. O mutt é um programa bacana criado com um único propósito: ler email. Isso quer dizer que ele não não se preocupa em baixar os emails, enviá-los ou em editá-los. Ele é até capaz de fazer isso, mas sejamos sinceros, ele é uma porcaria desempenhando essas outras funções. :)
Então, depois de configurar meu ambiente de email, com
Essa configuração funciona muito bem, mas dia desses acabei esbarrando numa página que comparava três indexadores (mairix, nmzmail e maildir-utils) e que dizia que o maildir-utils era a opção do sujeito.
Nunca considerei o mairix pois li em alguns reviews [citation needed] que o nmzmail possuía mais impressões positivas, mas como não conhecia o maildir-utils (mu), era hora de comparar os dois e ver no que dava. Meu objetivo não era comparar por comparar, mas o nmzmail costumava gastar bastante tempo processando meu banco de dados de email, que consiste de aproximadamente 45000 documentos e quase dois milhões de palavras.
Após instalação do mu, hora de gerar o índice. Como a geração inicial do índice costuma ser custosa, ela não foi usada para comparação. No entanto, após a criação do índice, resolvi fazer algumas novas indexações para comparação de desempenho (há um cronjob que levanta de três em três horas para atualizar o índice, quanto menos tempo, melhor). Enquanto o tempo total de indexação do mu ficou na ordem de cinco segundos em todas as execuções, o nmzmail levou cerca de 50 segundos. :o
Depois desse resultado, resolvi usar o mu por mais algum tempo para ver se me adapto ao programa. Infelizmente ele não possui uma interface para entrada de consultas (pelo menos eu não vi nenhuma) e a solução do zack não me agradou muito. Por isso, criei o script python abaixo para fazer cache das consultas com readline e facilitar a minha vida.
#!/usr/bin/env python
import atexit
import readline
from os.path import join
from os import environ as env
from subprocess import call
HOME = env['HOME']
INDEXPATH = join(HOME, '.mu', 'results')
MAILDIRPATH = join(HOME, 'Maildir')
HISTORY = '.mailfinder_history'
HISTFILE = join(HOME, HISTORY)
try:
readline.read_history_file(HISTFILE)
except IOError:
pass
atexit.register(readline.write_history_file, HISTFILE)
def main():
query = raw_input('Query: ')
call(['rm -fr %s' % INDEXPATH], shell = True)
command = 'mu find -m %s -l %s %s' % (MAILDIRPATH, INDEXPATH, query)
ret = call([command], env = env, shell = True)
if __name__ == '__main__':
main()
No mutt, continuo com o meu antigo atalho (S) para para execução das consultas e adicionei outro atalho (F9) para revisitar os resultados da última busca:
macro generic S "<shell-escape>mail-finder.py<return><esc>c~/.mu/results<return>" "Search via mu"
macro index <F9> "<change-folder-readonly>~/.mu/results\n" "Display mu find results"
O script de atualização dos índices, por sua vez, ficou assim agora:
#!/bin/sh
mount | grep $MAILDIR &> /dev/null
if [ "$?" == "1" ]; then
echo "$MAILDIR not mounted. Aborting." > /dev/stderr
exit 1
fi
exec nice -n 19 /usr/bin/mu index -q -m $MAILDIR
Fim! Legal, né?
PS: O esquema de cores padrão do mutt é meio nojento também. Depois de virar usuário do zenburn, acabei criando um tema equivalente para o mutt, exibido no início deste post.