Ler correio do Postfix usando o shell script [closed]

1

Gostaria de poder ler mensagens de entrada de um MTA do Postfix usando um script de shell. O shell script deve ser capaz de recuperar os cabeçalhos de e-mail, assunto, corpo, anexos, etc., e marcar o e-mail como lido. As mensagens são armazenadas no formato Maildir /. Quando um e-mail é lido no Postfix, ele é movido da pasta Maildir / new para a pasta Maildir / cur, que é útil para reter como backup, caso uma mensagem precise ser reprocessada.

Eu pesquisei isso extensivamente, mas não encontrei nada útil, muitos exemplos de como enviar e-mails, mas nada útil para ler e-mails através de um script. O comando mail / mailx parece apenas permitir o acesso interativo, não parece haver uma opção para usá-lo através de um script de shell. Isso só precisa funcionar para um usuário, já que estou usando uma configuração catchall para capturar todos os e-mails recebidos em uma única caixa de correio, para processamento subsequente pelo script.

Há sempre a opção de pesquisar na pasta Maildir / new por mensagens recebidas usando um cronjob ou incron, mas seria bom usar os recursos de gerenciamento de mensagens do Postfix em vez de gerenciar manualmente os arquivos msg. Meu script será local para o servidor Postfix.

Alguma sugestão / ideia? obrigado.

Edit: Talvez eu deva mencionar que não estou procurando ajuda com o script. Eu estou procurando por alguma ferramenta de linha de comando que pode acessar o Postfix Maildir / msg store e ler / fazer coisas com o msgs e pode ser invocado de forma não-interativa. Em outras palavras, funcionalidade básica da ferramenta de email, mas não interativa.

    
por Jim Walker 01.09.2014 / 16:35

2 respostas

2

Eu encontrei o seguinte:

link

Essa pessoa descreve exatamente o que eu estava procurando. Gênio puro! Para capturar a essência (tudo abaixo está no link acima):

Imprimir todo o email para STDOUT:

$ echo "type *" | mail

$ echo "type 1" | mail   # print the first email to stdout

$ echo "type 3-5" | mail # print the emails from 3 to 5

Verifique se a caixa de correio está vazia (ou seja, "Nenhum email para [nome de usuário]" foi encontrado):

$ echo q | mail 2>&1 | grep "No mail for [username]"

Limpar a caixa de correio:

$ echo "d *" | mail

$ echo "d 3" | mail     # Delete the 3rd email

Salvar todos os e-mails em um arquivo de texto:

$ echo "s * test.txt" | mail

Salvar e-mails entre um intervalo em um arquivo:

$ echo "s 3-6 test.txt" | mail # this will save email from #3 to #6 to the file test.txt

Leia um email da caixa de correio:

$ echo 1 | mail # Read the first mail from mail box:

$ echo 5 | mail # Read the 5th email from mail box: 

$ echo 6 | mail

Se não houver um 6º email da caixa de correio. Ele solicitará o erro abaixo:

6: Invalid message number

A mensagem de erro "Número de mensagem inválido" informa que não há nenhum sexto email na caixa de correio. Se o quinto email for retornado com sucesso. Você pode tratar a mensagem de erro "Número de mensagem inválido" como o final da caixa de correio, assim como o EOF de um arquivo. Combinado isso com um loop, você pode navegar por todos os emails dentro da caixa de correio.

    
por 01.09.2014 / 18:27
2

Seu Google Fu está faltando.

Uma solução fácil é um arquivo ~/.forward no estilo sendmail onde você canaliza | a mensagem diretamente para o seu script, antes mesmo de ser gravada na sua Caixa de Correio. Seu script, em seguida, faz a sua coisa e escreve a mensagem de correio para o disco depois.

Da mesma forma, mas você obtém um pouco mais de flexibilidade quando configura o procmail como o agente de entrega de mensagens e define um ~/.procmailrc para encaminhar as mensagens para o seu script.

A alternativa é instalar um daemon IMAP ou POP3 e usar fetchmail para pesquisar na sua caixa de correio e ler as novas mensagens e entregá-las ao seu script.

    
por 01.09.2014 / 16:54