Preparação dos arquivos emails_bloqueados.txt e emails_permitidos.txt.
Estes arquivos serão lidos pelos shell scripts linha a linha, então para bloquear ou permitir um determinado email edite o arquivo e acrescente em uma linha o email completo ou parte dele para o fim desejado, basta uma parte pois essa informação servirá como fonte de pesquisa para as regras do procmail que funcionam como expressão regulares.
Exemplos:
Arquivo: emails_bloqueados.txt
alice@propaganda.com.br
best@bestsell.com
modelo@modelo.com.au
@viagra
com.jp
microsoft
Com os dados acima o destinatário não receberá os emails enviados pelos remetentes: alice@propaganda.com.br, best@bestsell.com, modelo@modelo.com.au. Também não receberá nenhum email que possua "@viagra", "com.jp" ou "microsoft" em sua composição.
Arquivo: emails_permitidos.txt
vivaolinux.com.br
@brlinux.org.br
amigo@amigo.com.br
familia@uol.com.br
Com os dados acima o destinatário receberá os emails enviados pelos remetentes: amigo@amigo.com.br e familia@uol.com.br, também receberá emails que possuam na sua composição "vivaolinux.com.br" ou "@brlinux.org.br".
Após a execução dos shell scripts estas listas serão ordenadas em ordem alfabética.
O shell script gera_emails_bloqueados.sh (os números no começo das linhas servem apenas como referência):
1 #!/bin/bash
2 #
3 # remover o arquivo atual de emails bloqueados
4 rm -f ./bloqueados.rc
5 #
6 # comando for para ler linha a linha o arquivo emails_bloqueados.txt
7 # e para cada linha lida acrescentar 4 novas linhas no arquivo
8 # bloqueados.rc
9 # Atenção para as crases que envolvem o comando cat
10 # não confundir com aspas simples.
11 for i in `cat ./emails_bloqueados.txt`
12 do
13 echo ":0" >> ./bloqueados.rc
14 echo "* ^FROM.*$i" >> ./bloqueados.rc
15 echo "/dev/null" >> ./bloqueados.rc
16 echo "" >> ./bloqueados.rc
17 done
18 # Apos todas as regras de emails bloqueados se a analise chegar
19 # nas linhas abaixo indica que o destinatário do email não se
20 # encontra nas listas de emails_permitidos e emails_bloqueados
21 # então
22 # um email de aviso de bloqueio para próximos
23 # emails sera enviado para o remetente e o email atual ira para o seu
24 # destino.
25 #
26 # Faz uma copia do email para o arquivo temporário
27 # email_bloqueado.tmp para poder extrair o email do remetente
28 # com o comando formail no shell script gera_emails_bloqueados.sh
29 echo "" >> ./bloqueados.rc
30 echo ":0 wc" >> ./bloqueados.rc
31 echo "*" >> ./bloqueados.rc
32 echo "./email_bloqueado.tmp" >> ./bloqueados.rc
33 echo "" >> ./bloqueados.rc
34 #
35 # Envia o email atual para a caixa postal do seu destino
36 echo ":0 wc" >> ./bloqueados.rc
37 echo "*" >> ./bloqueados.rc
38 echo "/var/mail/destino" >> ./bloqueados.rc
39 echo "" >> ./bloqueados.rc
40 #
41 # Executa o shell script gera_email_retorno.sh para enviar o email
42 # de aviso para o remetente que o email dele esta bloqueado
43 # para este destinatário.
44 echo ":0 fwc" >> ./bloqueados.rc
45 echo "*" >> ./bloqueados.rc
46 echo "|~/gera_email_retorno.sh" >> ./bloqueados.rc
47 echo "" >> ./bloqueados.rc
48 #
49 # Como ultima regra deixa preparado para executar esse próprio
50 # shell script (gera_emails_bloqueados.sh) para o próximo email em
51 # que o remetente não se encontrar nas listas de emails permitidos
52 # e bloqueados.
53 echo ":0 fw" >> ./bloqueados.rc
54 echo "*" >> ./bloqueados.rc
55 echo "|~/gera_emails_bloqueados.sh" >> ./bloqueados.rc
Na linha 38 deve-se trocar o local "/var/mail/destino" para o local e nome de arquivo onde está a caixa postal do destinatário, por exemplo, os emails que recebo ficam armazenados no arquivo de nome "jorge" no diretório "/var/mail", então deveria ficar "/var/mail/jorge".
O shell script gera_email_retorno.sh (os números no começo das linhas servem apenas como referência):
1 #!/bin/bash
2 #
3 # Extrai o remetente do email armazenando na variável DE do arquivo temporário
4 # email_bloqueado.tmp criado pelo shell script gera_emails_bloqueados.sh com o
5 # conteúdo do email enviado. Atenção que o comando formail esta envolvido
6 # com crase e não com aspas simples (apostrofo).
7 DE=`formail -rt -zxTo: < ./email_bloqueado.tmp`
8 #
9 # Faz o mesmo que o comando acima, extraindo o destinatário ao invés do
10 # remetente.
11 PARA=`formail -xTo: < ./email_bloqueado.tmp`
12 #
13 # O mesmo que o comando acima, extraindo o assunto.
14 ASSUNTO=`formail -xSubject: < ./email_bloqueado.tmp`
15 #
16 # Armazena na variável TEXTO o corpo do email que sera enviado
17 TEXTO="O email enviado para $PARA com o assunto $ASSUNTO, foi entregue ao seu destino, porem "
18 #
19 # Continua montando o corpo do email acrescentando o conteúdo do arquivo
20 # msg.txt, para isto utilizo o comando cat. Atenção são crases que envolvem
21 # o comando cat e não ha espaço apos $TEXTO.
22 TEXTO=$TEXTO`cat msg.txt`
23 #
24 # O & (e comercial) eh a preparação para a formatação da URL que estará como
25 # link no corpo do email. A mensagem deste email solicita o acesso a um site
26 # que ao ser acessado envia automaticamente solicitando o desbloqueio deste
27 # remetente do arquivo de emails_bloqueados.txt
28 TEXTO=$TEXTO$DE'&i_dest=seu_email@dominio'
29 #
30 # O comando abaixo inclui o email do remetente no arquivo de emails_bloqueados.txt
31 echo $DE >> ./emails_bloqueados.txt
32 #
33 # Envia o email para o remetente.
34 echo $TEXTO | mail -s "Email bloqueado !" $DE
35 #
36 # Exclui o arquivo temporário.
37 rm -f ./email_bloqueado.tmp
Na linha 28 deve-se trocar para o seu email após o sinal de igual, esta informação é básica para o programa PHP enviar novo email para você decidir se irá desbloquear o remetente do email bloqueado ou não.
O conteúdo do arquivo "msg.txt" citado na linha 22 é:
Seu email foi bloqueado para as próximas mensagens.
Favor acessar o link indicado e siga as Instruções para desbloqueá-lo em definitivo.
http://www.seusite.com.br/email_desbloqueio.php?i_email=
A URL na última linha do arquivo msg.txt será completada dentro do shell script gera_email_retorno.sh, por isto ela termina com o sinal de igual. O programa em PHP que estará na site utilizará das variáveis i_email e i_dest para enviar o email.
O programa PHP (os números no começo das linhas servem apenas como referência):
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2 <html>
3 <head>
4 <title>Desbloqueio de Emails</title>
5 </head>
6
7 <?php
8 $form["dest"] = $HTTP_GET_VARS["i_dest"];
9 $form["novo_email"] = $HTTP_GET_VARS["i_email"];
10 ?>
11 <table align='center'>
12 <tr>
13 <td colspan=2>Para evitar os emails indesejaveis criamos uma lista com os emails permitidos e outra com os emails bloqueados.
14 </td>
15 </tr>
16 <tr colspan=2>
17 <td>Os emails que nao estao nas listas sao enviados aos seus respectivos destinatarios, porem sao incluidos na lista de emails bloqueados.
18 </td>
19 </tr>
20 <tr>
21 <td>Com o acesso a esta pagina foi solicitado que o email <?=$form["novo_email"]?> seja incluido na lista de emails permitidos.
22 </td>
23 </tr>
24 <tr>
25 <td>Cabera ao destinatario que receber essa solicitacao incluir o remetente na lista de emails permitidos,
26 </td>
27 </tr>
28 <tr>
29 <td>enquanto isto nao for feito o email estara automaticamente bloqueado.
30 </td>
31 </tr>
32 </table>
33 <?php
34 /* recipients */
35 // $to = "desbloqueio@tum.com.br";
36 $to = $form["dest"];
37
38 /* subject */
39 $subject = "Acrescentar este mail na lista de permitidos -".$form["novo_email"];
40 /* message */
41 $message = $form["novo_email"]; //.$novoarq;
42 // $mensagem = str_replace(";",",",$message);
43 /* To send HTML mail, you can set the Content-type header. */
44 $headers = "MIME-Version: 1.0\n";
45 $headers .= "Content-type: text/html; charset=iso-8859-1\n";
46 /* additional headers */
47 $headers .= "From: TUM - CPD <cpd.uniao@tum.com.br>\n";
48 /*
49 $headers .= "Cc: birthdayarchive@example.com\r\n";
50 $headers .= "Bcc: birthdaycheck@example.com\r\n";
51 */
52 /* and now mail it */
53 mail($to, $subject, $message, $headers);
54 ?>
55 </body>
56 </html>
Feito isto, estão prontas as atividades para incluir automaticamente um email no arquivo de emails_bloqueados.txt.
Na próxima seção veremos como desbloquear um email, eliminando-o do arquivo de emails_bloqueados.txt e acrescentando-o no arquivo emails_permitidos.txt.