Às vezes, um servidor de e-mail pode ser de muita utilidade, se sabemos como lidar com isso adequadamente. No artigo de hoje, vamos ver como usar o nosso MTA para executar ações automaticamente quando receber um e-mail específico ou definir parâmetros. Uma vez que sabemos que a teoria vai levantar dois estudos de caso como exemplos.
Para começar, precisamos de um servidor Linux com Qmail como MTA . Eu acho que qualquer outro servidor de correio electrónico ( Sendmail , Postfix ), eu personalizar em Qmail , porque é o que eu conheço e usar, mas tenho certeza de que outras pessoas possam fazer o mesmo.
Teoria
Para entender como a idéia de que devemos primeiro entender como qmail realiza a entrega de mensagens para caixas de correio locais. É um assunto sobre o qual há considerável literatura de pesquisa do Google, mas pode não ser claro em uma leitura rápida. É a famosa bagunça de arquivos . qmail .
Cada vez que você criar um usuário do sistema deve ser criado, se você receber e-mails, a. Qmail-default em seu diretório home.
- # cat /home/jiglesias/.qmail-default [Jiglesias @ Lérez ~] # cat / home / jiglesias /. Qmail-default
- . / Maildir /
Normalmente, este arquivo é criado automaticamente, porque quando você instalar qmail terá criado uma cópia desse arquivo na criação de usuário esqueleto / etc / skel
- # ls -la /etc/skel [Jiglesias @ Lérez ~] # ls-la / etc / skel
- Total 56
- Jul 29 18 : 29 . drwxr-xr-x 4 root root 4096 29 de julho de 18: 29.
- Dec 30 04 : 08 .. drwxr-xr-x 97 root root 12288 30 de dezembro abril: 08 ..
- Feb 1 2008 .bash_logout -Rw-r-r-1 root root 33 1 February, 2008. Bash_logout
- Feb 1 2008 .bash_profile -Rw-r-r-1 root root 176 1 February, 2008. Bash_profile
- Feb 1 2008 .bashrc -Rw-r-r-1 root root 124 1 February, 2008. Bashrc
- Aug 29 2007 Maildir drwx - 5 root root 4096 29 ago 2007 Maildir
- Jan 2 2008 .qmail-default -Rw-r-r-1 root root 12 jan fevereiro de 2008. Qmail-default
- Sep 12 2006 .zshrc -Rw-r-r-1 root root 658 12 set 2006. Zshrc
Para quem não sabe, o esqueleto são os arquivos que são copiados para o diretório do usuário (com permissões dele) cada vez que você criar um novo. Se você quiser que todos os seus usuários em um arquivo automaticamente, este é o seu lugar. No nosso caso, vemos que, além de. Diretório Maildir Qmail-padrão é o padrão de entrega do correio qmail. Dado um usuário neste arquivo e este diretório, você pode receber e-mails.
Ok ok, você está indo rápido demais. Você não explicou para servir. Qmail-default isso. Certo. As regras. Qmail indicam entrega de mensagens com base em dois parâmetros:
- O nome do arquivo. Qmail-xx refere-se à conta de e-mail em que ele atua.
- O conteúdo indica o que fazer com o e-mail.
Suponha que um usuário (jiglesias) receber e-mails a partir de duas contas diferentes (jiglesias @ ... e osus @ ...).
Por padrão, todos os emails vão para sua caixa postal e ele está indicando o arquivo. Qmail-padrão. Temos agora que o comportamento é diferente, dependendo da conta para a qual é dirigida, em seguida, os arquivos criados Qmail para os sentidos.:
- . Qmail-jiglesias: verificar e-mail para ser jiglesias @ ...
- . Qmail-osus: verificar e-mail para ser osus @ ...
Podemos até ir um pouco mais com um. Qmail-jiglesias-padrão, e passariam a controlar o e-mail que vai para qualquer tipo de direção jiglesias-XXXX @ ..., ou seja, qualquer endereço de início por jiglesias-será controlado por este arquivo. qmail.
No caso base, que é o que nós vimos, a entrega é feita de caixa de correio do usuário (diretório Maildir), mas poderíamos fazer outras coisas, dependendo do conteúdo do arquivo Qmail responsável pelo processamento de entrega de correio.:
Encaminhamento para outra conta:
- # cat /home/jiglesias/.qmail-jiglesias [Jiglesias @ Lérez ~] # cat / home / jiglesias /. Qmail-jiglesias
- reenvio@osusnet.com
Encaminhar para um programa / script:
- # cat /home/jiglesias/.qmail-osus [Jiglesias @ Lérez ~] # cat / home / jiglesias /. Qmail-osus
- | PreLine / usr / bin / programa
Combinação dos anteriores
- # cat /home/jiglesias/.qmail-jiglesias [Jiglesias @ Lérez ~] # cat / home / jiglesias /. Qmail-jiglesias
- . / Maildir /
- reenvio@osusnet.com
- | PreLine / usr / bin / programa
O caso em questão é o segundo, ou seja, a entrega do e-mail para passar para um script que irá analisar o e-mail e tomar decisões.
Você vai ficar impressionado com a | PreLine . arquivo qmail. É que o sistema prepara-se um e-mail para ser processado e entregue a outro roteiro adicionando alguns cabeçalhos. A saída do script que recebe o e-mail é importante, pois influencia o resultado da entrega final do e-mail, em particular, é importante saber que, se rejeitar um e-mail vai ter que terminar o roteiro com saída (100), isso indica uma qmail devem rejeitar essa mensagem. Veremos a utilidade deste produto.
Prática
Uma vez que sabemos como passar o controle de um e-mail recebido de um script, vamos ver como tratá-la. O que vamos fazer com um script PHP . . Em nosso estoque Qmail fazer algo como:
- # more .qmail-jiglesias [Jiglesias @ Lérez ~] # more. Qmail-jiglesias
- | PreLine / usr / bin / php / home / jiglesias / test.php
Com isso concluímos o trabalho no servidor de correio. Vamos ver como analisar o e-mail do PHP.
A primeira coisa a fazer é pegar o conteúdo do e-mail a partir do script através da entrada padrão, então podemos processar o e-mail como uma cadeia de texto.
- <? Php
- >
Com estas simples duas linhas de código no nosso script que enviar e-mail conteúdo. Agora só processá-la. Podemos fazê-lo linha por linha por conta própria ou confiar em qualquer livraria. Eu uso Mail_mimeDecode de Pêra . A vantagem desta biblioteca é que pode-se obter, para além do texto do e-mail, os anexos.
- <? Php
- 'include_bodies' ] = true ; $ Params ['include_bodies'] = true;
- 'decode_bodies' ] = true ; $ Params ['decode_bodies'] = true;
- 'decode_headers' ] = true ; $ Params ['decode_headers'] = true;
- 'input' ] = $email ; $ Params ['input'] = $ email;
- ( $params ) ; $ Estrutura = Mail_mimeDecode :: decode ($ params);
- ( $structure -> headers [ 'subject' ] ) ; $ Assunto = guarnição ($ Estrutura -> headers ['assunto']);
- ( trim ( $structure -> headers [ 'from' ] ) ) ; $ From = addslashes ( guarnição ($ Estrutura -> headers ['de']));
- [ 1 ] ; $ Name = $ p [1];
- >
Assim, podemos agora processar o e-mail e decidir como nós julgamos apropriado. Nós inseri-lo em um banco de dados, lançamento de outros processos automatizados, enviar alertas SMS ... o que vem à mente.
Estudos de caso
A questão-chave, depois de ver a teoria, por que eu iria usar isso?. Proponho duas aplicações que eu fiz.
Sistema de Apoio
O sistema de ticket de suporte típico. No assunto do email arrastando o identificador de bilhete, por exemplo, [# 123445]. Vamos ter de discutir o assunto e ver se o padrão predefinido aparece. Se houver diante de um novo bilhete e inserir os dados em nosso banco de dados, caso contrário, é uma resposta a um incidente anterior e que terá o identificador. Simples não é?. Podemos até mesmo anexar aos nossos arquivos indicendias que podem ser alcançados por e-mail.
O envio de arquivos do celular
O segundo exemplo é semelhante ao anterior mas tecnicamente conceptualmente distintas. A maioria dos telefones (exceto a parte alta) não é possível enviar arquivos de formas wap (<input type="file">). A alternativa é que o usuário envie um e-mail ou MMS (a maioria dos operadores de permitir o envio para endereços de e-mail) com os seus arquivos. Nosso script irá processar o conteúdo do e-mail recebido, descriptografar arquivos e tratados conforme o caso.
Estes são dois exemplos simples de como usar e-mail para automatizar tarefas, mas, como eu disse, nós poderíamos fazer tudo o que você possa imaginar, desde o envio de um SMS de alerta até mesmo reiniciar o nosso servidor ou lançar qualquer outra tarefa.













