Script ThunderBird filters

5

É possível escrever seus próprios filtros para o Thunderbird, não importa qual idioma é usado.

Eu quero poder fazer uma análise completa do e-mail (cabeçalhos e texto) e tomar certas ações com base no conteúdo.

Pontos de bônus se eu puder comparar o email atual com as mensagens recebidas mais antigas (principalmente para remover mensagens de log duplicadas)

    
por Nifle 12.11.2010 / 09:52

4 respostas

4

Na verdade, é possível com o FiltaQuilla. (Tentei FiltaQuilla 1.1.0, com o Thunderbird 3.1.9).

Abaixo está um script de teste colocado em "ação de javascript com o corpo" fornecido pela FiltaQuilla. Ele mostra todas as propriedades do cabeçalho e o corpo no console de erros.

Quando esses campos de dados estiverem disponíveis para o código, ele precisará percorrer as pastas e mensagens do messenger para compará-las. Talvez usando a propriedade "threadParent" no hdr pode simplificar a lógica, consulte nsIMsgDBHdr no MDC para uma dica. No código, propriedades extras podem ser definidas. Por exemplo, defina "hdr.myvar = '1234'" no código para mensagens duplicadas, depois em um filtro de correspondência mais recente myvar para 1234 e execute uma ação normal para excluí-las.

Como esse script é a parte de ação de um filtro, a parte da condição do filtro precisa corresponder a todas as mensagens de interesse. Neste teste, o script é organizado após uma ação para copiar a mensagem para uma pasta local, que pode ou não ser necessária, mas baixa o corpo da mensagem para a máquina local em uma conta IMAP, para que a ação tenha um corpo para Acesso.

//FiltaQuilla filter action script: 
for (let index = 0; index < msgHdrs.length; index++)
{ //get msg hdr:
  let hdr = msgHdrs.queryElementAt(index, Ci.nsIMsgDBHdr);

  //show subject: get it in two ways
  let s = hdr.getStringProperty("subject");
  if ( s != undefined && s.length != undefined && s.length > 0)
      Cu.reportError("  flt log1: " + s.length + " " + s);
  Cu.reportError("  flt log2: " + hdr.subject );

  //show all properties of hdr: uncomment to show.
  //let e = hdr.propertyEnumerator;
  //while ( e.hasMore() ) Cu.reportError("  flt log3: " + e.getNext() ); 

  //get body: from an example on MDC: getMessageBody(aMessageHeader)
  //Actions configured in the filter: Without [1], it takes long long time. 
  //    [1] copy msg to a local folder. 
  //    [2] "Javascript Action with Body" with this script. 
  { let messenger = Components.classes["@mozilla.org/messenger;1"]
                      .createInstance(Components.interfaces.nsIMessenger);
    let listener = Components.classes["@mozilla.org/network/sync-stream-listener;1"]
                      .createInstance(Components.interfaces.nsISyncStreamListener);
    let uri = hdr.folder.getUriForMsg(hdr);
    messenger.messageServiceFromURI(uri)
                .streamMessage(uri, listener, null, null, false, "");
    let folder = hdr.folder;
    let body = folder.getMsgTextFromStream(listener.inputStream,
                              hdr.Charset, 65536, 32768, false, true, { });
    //show body:
    Cu.reportError("  flt log4: " + body.length + " " + body);
  }
}
    
por 24.03.2011 / 21:47
4

Não, isso não parece ser possível.

Esse processamento é provavelmente mais fácil de fazer no servidor de e-mail, com coisas como procmail , Courier maildrop , amavisd-new , etc.

O Amavisd-new é projetado especificamente para enviar e-mails para programas de processamento externos antes da entrega, geralmente daemons antivírus e antispam.

Se você não puder fazer isso no lado do servidor, precisará escrever uma extensão, mas isso provavelmente é trabalho demais.

Finalmente, talvez você possa satisfazer uma boa parte de suas necessidades com a extensão FiltaQuilla , que suporta expressões regulares, executando programas externos e ações de javascript. Você pode encontrar mais informações na página do autor .

Pessoalmente, se eu não tivesse acesso ao servidor de e-mail e se o FiltaQuilla não satisfizesse minhas necessidades, eu escolheria configurar um servidor de e-mail local Postfix / IMAP buscando o e-mail do provedor e processando-o antes da entrega com meus scripts personalizados. Deve ser muito mais fácil do que escrever uma extensão de TB. Mas pode ser um exagero para as suas necessidades.

    
por 08.12.2010 / 15:42
2

Você pode procurar um proxy POP3 / IMAP que tenha os recursos de filtragem com script de que precisa. Pode ser um proxy que roda no mesmo PC que o Thunderbird.

    
por 08.12.2010 / 18:15
1

Com a extensão: link

você pode criar JavaScript e / ou arquivos externos para executar, então parece um sólido "talvez"

    
por 20.01.2011 / 17:41