Eu executo um servidor de correio Postfix / Dovecot para uso pessoal. Há apenas algumas caixas de correio reais, essencialmente just [email protected]
e [email protected]
.
Eu freqüentemente uso o virtual
arquivo para criar caixas de correio virtuais encaminhadas para [email protected]
. Eu tenho vários deles para contas descartáveis, como compras únicas em lojas online, jogos online que quero experimentar sem me preocupar com spam em andamento etc. Para fazer isso, SSH e execute os seguintes comandos:
sudo vim /etc/postfix/virtual
# add a line that looks like:
# # [email protected] [email protected]
sudo postmap virtual
sudo service postfix restart
Faço isso com frequência suficiente para automatizar o processo até certo ponto. Eu considerei simplesmente escrever um script de shell que utilizasse a caixa de correio virtual e a caixa de correio real como argumentos e fizesse as alterações, mas estou esperando algo ainda mais fácil.
Gostaria de poder enviar um email [email protected]
para outra caixa de correio no servidor com o nome da caixa de correio virtual como o corpo da mensagem. O problema seria as sudo
chamadas, mas posso criar um novo usuário cuja única responsabilidade é lidar com isso, que deve lidar com isso.
Principalmente a pergunta é a seguinte: como eu criaria um evento que seria acionado por um email? Existe um serviço em algum lugar que faz isso? Posso configurar o Postfix ou o Dovecot para escutar esse email e executar comandos nesse evento?
Respostas:
O procedimento correto para executar um script (eu uso um script de shell) após o recebimento de uma mensagem de email é o seguinte. Envolve a modificação do arquivo de configuração do postfix , master.cf (que, no meu Debian, está localizado em / etc / postfix ) adicionando a seguinte linha:
que instrui o postfix a executar o script (é necessário executá-lo) quando ocorrer algum evento.
Para especificar quando executar o script, faça o seguinte: suponha que ele seja executado quando [email protected] receber uma mensagem. Coloque a seguinte linha
dentro do arquivo /etc/postfix/address.txt ; você precisará criar um banco de dados adequado para o postfix usar esse arquivo, o que você realiza por meio de
que produz como saída um arquivo chamado /etc/postfix/address.db . Agora volte ao arquivo /etc/postfix/main.cf e adicione a seguinte linha:
Agora reinicie o postfix ,
e você deve estar pronto para ir.
fonte
sendmail
direto no servidor não acionará isso.pickup
opçãoEu posso ver duas soluções óbvias.
Se você estiver usando o procmail como o MDA no seu servidor ou desejar converter para usá-lo, poderá executar qualquer script arbitrário em qualquer email arbitrário através da
|
ação de receita do procmail (canal). Esperamos que não seja iniciado como root, mas deve ser fácil criar um script que execute a mágica necessária e que possa ser invocado sem senha como root por um usuário relevante. A saída do script pode até ser alimentada novamente no mesmo e-mail e entregue posteriormente, transformando a receita em uma ação de filtro.Uma alternativa (que deve exigir menos manutenção prática) é criar uma única caixa de correio e configurar o Postfix
$recipient_delimiter
para ser algo que normalmente não é usado para esse fim; por exemplo,.
ou-
. Observe que o address_delimeter é uma configuração para todo o servidor. Digamos que você configure a caixa de correio[email protected]
e defina$recipient_delimeter = .
. Isso permitirá então odummy.<anything>@example.com
que será entregue na caixa de correio local correspondente[email protected]
. Para desativar um destes, adicionedummy.<whatever>@example.com
para uma tabela de destinatários apropriada com uma ação de rejeição. A desvantagem é que ela será uma caixa de correio abrangente para o prefixo, portanto, você deve dificultar a localização do prefixo por acidentes ou ataques de dicionário. A vantagem é que, no caso normal (o remetente respeita seus desejos e não revende seu endereço de e-mail), essa abordagem não requer manutenção, e você sempre pode alterar seu prefixo posteriormente e listar explicitamente as combinações que deseja continuar recebendo e-mails. .fonte
Caso o link seja desativado, aqui está o resumo.
Primeiro, vá
master.cf
e registre seu script "myhook" adicionando a seguinte linha:myhook unix - n n - - pipe flags=F user=www-data argv=/path/to/script.sh ${sender} ${size} ${recipient}
Além disso, edite a linha smtp para instruir o Postfix a executar o filtro para qualquer email que chegue pela entrega SMTP:
smtp inet n - - - - smtpd -o content_filter=myhook:dummy
Observe que, se você estiver enviando e-mails usando o comando "sendmail", o filtro não será acionado. Nesse caso, adicione a opção após o método de entrega "retirada":
pickup fifo n - - 60 1 pickup -o content_filter=myhook:dummy
Reinicie o postfix:
postfix reload
Torne seu script legível e executável por qualquer pessoa:
chmod +rx script.sh
Observe que o script é sempre acionado para qualquer email que chegue. Para especificar o endereço exato, consulte a resposta @MariusMatutiae.
fonte