Precisa de solução de milter do linux para registrar o corpo do email no banco de dados

2

Nós trocamos e-mails com vários clientes e fornecedores. Estou tentando implementar uma solução em que todas as comunicações por e-mail entre nosso representante e o cliente ou fornecedor são salvas em nosso banco de dados; assim, em nosso sistema administrativo, temos um registro das comunicações. Eu vi um sistema semelhante para alguns dos sites do projeto, como Guru.com ou elance.com. Você se comunica por e-mail, mas o sistema registra a conversa.

Eu tenho procurado por alguns dias para tentar descobrir como implementar isso. Ao estudar e-mails no Guru.com, vejo todos eles irem para um endereço de e-mail comum. O assunto contém um ID criptografado e "De: (nome do freelancer ou nome do proprietário do projeto)" Parece que há um milter nessa caixa que analisa o corpo desse email, salva-o no banco de dados e encaminha o email para o destinatário (da linha de assunto).

Eu uso um fornecedor para meu e-mail, mas gero meu próprio servidor da Web (EC2, AWS Linux), por isso acho que posso criar um segundo registro MX para dizer "mail2" e usá-lo para esse aplicativo. Então eu poderia usar algo como "[email protected]" e fazer com que meu servidor processe esses emails. Eu estou pensando que isso pode ser feito com um remetente sendmail, mas não tenho certeza exatamente.

Minha busca por assistência ou instrução sobre isso não resultou em nada. Eu posso não saber o termo certo para procurar. Eu li sobre muitos milters, mas nenhum que parece resolver isso. Alguém pode oferecer alguma ajuda ou me apontar na direção certa?

Obrigado

Thom

    
por Thom 05.08.2014 / 16:38

1 resposta

1

O fluxo típico é um pouco de entrega. Sua pergunta está marcada com então presumo que uma solução de Procmail é aceitável.

Você não deve precisar de nenhum registro MX ou outras travessuras adicionais. O Sendmail (ou qualquer MTA moderno; eu recomendaria o Postfix se você não é particularmente casado com o Sendmail por motivos legados) pode executar um script em uma mensagem recebida de forma bastante trivial.

Quando uma mensagem é aceita para entrega, o MDA (no seu caso, o Sendmail) procura por qualquer gancho de cliente, como um arquivo .forward . Se um for encontrado, o arquivo é analisado e qualquer pipeline no arquivo é executado. É assim que o Procmail é tipicamente invocado em sistemas legados (embora, mais recentemente, uma receita enlatada para ler o .procmailrc do usuário e invocar o Procmail, caso um seja encontrado, faça parte do conjunto de recursos padrão do Sendmail).

Em vez do Procmail, você pode executar um script próprio; ou você pode executar o script a partir do seu .procmailrc (o que é benéfico porque o Procmail cuida de vários cenários de erros irritantes).

:0
| /path/to/script

Agora, o Procmail abrirá /path/to/script com a mensagem como entrada padrão e assumirá que o script cuida de processá-lo (entregá-lo e / ou analisá-lo e descartá-lo).

Adicione um sinalizador :c se quiser que o Procmail também salve em $DEFAULT :

:0c
| /path/to/script

Talvez adicione o endereço do destinatário como parâmetro ao script:

ADDR='formail -rtzxTo:'
:0c
| /path/to/script "$ADDR"

Seu script pode ser bem simples; Deixo os detalhes do banco de dados para você e mostro um script Perl simples para registrar cada mensagem recebida em um arquivo.

#!/usr/bin/perl

use strict;
use warnings;

open (DB, ">>", "/path/to/file.db") or die "Complication: $!";
print DB "Correspondent: $ARGV[1]\n";
while (<>) {
    print DB;
}
close DB;

Isso é ideal para e-mails recebidos , mas a maneira simples e direta de também registrar suas comunicações de saída é simplesmente Bcc: o endereço da conta nas mensagens de saída. Por outro lado, se você usar uma interface da Web para as interações, poderá escrever os scripts da Web, gerar um email e enviá-lo e usar o Procmail (ou algo similar) somente para a parte de entrada da conversa. Isso simplificaria um pouco o sistema, à custa de sacrificar a possibilidade de usar o sistema simplesmente escrevendo e-mails, como seria natural desse tipo de sistema.

O script Perl acima é bastante simples - e o Procmail é versátil o suficiente - que você poderia fazer tudo isso do seu .procmailrc , mas para o processamento real do banco de dados, você precisará de um pequeno script externo em qualquer evento. / p>     

por 06.08.2014 / 14:43