você está aqui: Home  → Arquivo de Mensagens Programação Shell Linux: Inscrições Abertas

Mensagem automatica de recusa de anexo .doc

Colaboração: Francisco A Silva

Data de Publicação: 12 de Dezembro de 2005

Recentemente li uma dica aqui no Dicas-L sobre informar o remetente de e-mail sobre a questao dos anexos do MS Word. Achei interessante e resolvi adaptar meu filtro de e-mail para varrer este tipo de anexo e enviar uma mensagem automatica para o remetente, e claro, nao aceitar a mensagem. Esta dica vale pra quem tem acesso ao seu home pra poder mudar seu .procmailrc.

No .procmailrc, eu coloquei a seguinte regra, que procura por anexos .doc, caso encontre, submete o e-mail para o script recusa.pl;

:0 HB
* .filename *=? *\"?.*\.(doc|DOC)(=\?)?\"?
| /home/francisco/recusadoc/recusa.pl

Segue o script que processa a mensagem devolvendo para o remetente um e-mail informativo de como proceder com o anexo e a razão pela qual não é recomendado o envio de anexos do MS Word e sim um .txt ou .html por exemplo. O Script também grava um log de todas as mensagens processadas que combinem com a regra. A mensagem pode ser alterada de acordo com sua necessidade.

#!/usr/bin/perl
# Script alterado em 06/12/2005 para filtro de anexo Ms. Word.
# Versao 1.2, 23/07/2001. Uso e distribuicao de acordo com a licenca GNU. #

# current date & time
use POSIX qw(strftime);
$date = strftime "%a %b %e %H:%M:%S %Y", localtime;

# logfile
$logfile = '/home/francisco/recusadoc/doc.log' ;

# sender
$sender = 'francisco@silva.eti.br' ;

# signature
$signature =
"
Servidor de correio (mailto:$sender)
(mensagem gerada automaticamente)
 (nao responda esta mensagem)
";

# ------------------------------------------------------

# esta fun??o recebe um string e retorna a mesma string
# sem as codifica??es ISO normalmente usadas em e-mails

sub decodeiso
{
 $STOP STOP STOP STOP STOP STOP = $_[0] ;

 # codifica??o ISO-Latin1 ?Q? Quoted-printable
 # Informações sobre segurança if ( $STOP STOP STOP STOP STOP STOP =~ /=\?iso-8859-1\?q\?/i ) {
   $STOP STOP STOP STOP STOP STOP =~ s/=\?iso-8859-1\?.\?([^\?]+)\?=/\1/gi ;
   $STOP STOP STOP STOP STOP STOP =~ s/=([0-9abcdef]{2})/pack("C", hex($1))/egi;
 }

 # codifica??o ISO-Latin1 ?B? Binary base64
 # Órgão ? último ?= can?=ção if ( $STOP STOP STOP STOP STOP STOP =~ /=\?iso-8859-1\?b\?/i ) {
   # remover cabecalhos iso
   $STOP STOP STOP STOP STOP STOP =~ s/=\?iso-8859-1\?.\?([^\?]+)\?=/\1/gi ;
   # ... (ainda por fazer)
  }

 $STOP STOP STOP STOP STOP STOP ;
}

# ------------------------------------------------------

# criar ambiente seguro para execucao
$ENV{PATH} = "";
$ENV{PATH} = "/bin:/usr/bin";

# separe header tags into the hash "tags"
while (<STDIN>)
{
 # se encontrar uma mail tag guarda-la em minusculas
 if ( /^([\w-]+): (.*$)/ )
 {
   $tags{lc($1)} = &decodeiso($2) ;
 }
 # terminar se for linha em branco
 last if (/^\s+$/) ;
}

# procura os nomes dos arquivos anexos
while (<STDIN>)
{
 if (/filename *=? *\"?(.+)(=?)\"?/i)
 {
   push @files, &decodeiso($1) ;
 }
}

# limpa $from para mandar a msg de erro
$from = $tags{'from'} ;
$from =~ s/.*<(.+)>.*/\1/g ;

## envia resposta para o remetente
open(EMAIL, "|/usr/sbin/sendmail -oi -t -odq")
 or die "Erro ao enviar e-mail de resposta: $!\n";

print EMAIL <<"EOF";
From: $sender
To: $from
Subject: Anexo @files recusado


Voce enviou o anexo no formato do Microsoft Word, um formato secreto e proprietario,
por isso eu nao posso le-lo. Se voce me enviar texto puro, RTF, HTML, ou
PDF, entao eu serei capaz de ler.

Distribuir documentos no formato do Word eh ruim para voce e para outras pessoas.
Voce nao pode ter certeza de como eles serao formatados se alguem utilizar uma
versao diferente do Word; eles podem se tornar completamente ilegiveis.

Receber anexos do Word eh ruim para voce porque eles podem carregar virus (veja
http://www.symantec.com/avcenter/venc/data/acro.html). Enviar anexos do Word eh ruim
para voce, porque um documento do Word normalmente inclui informa?oes escondidas
sobre as atividades do autor (possivelmente sobre as suas tambem). Texto que voce
removeu pode ser embara?osamente descoberto. Veja
http://www.microsystems.com/Shares_Well.htm para mais informa??es.
*----------------------------------------------------------
* From:    $tags{'from'}
* To:      $ENV{'LOGNAME'}
* Subject: $tags{'subject'}
* Date:    $tags{'date'}
* File(s): @files
*----------------------------------------------------------
$signature
EOF
close(EMAIL) or warn "Problemas ao fechar o e-mail\n";
# envia aviso ao destinatario
open(EMAIL, "|/usr/sbin/sendmail -oi -t -odq")
 or die "Erro ao enviar e-mail de aviso: $!\n";

print EMAIL <<"EOF";
From: $sender
To: $ENV{'LOGNAME'}
Subject: E-mail recusado

O e-mail abaixo foi descartado por conter um anexo impr?prio.
Esta mensagem visa apenas sua informa??o; o remetente foi
foi informado do ocorrido.

*----------------------------------------------------------
* From:    $tags{'from'}
* To:      $ENV{'LOGNAME'}
* Subject: $tags{'subject'}
* Date:    $tags{'date'}
* File(s): @files
*----------------------------------------------------------
#
$signature
EOF

close(EMAIL) or warn "Problemas ao fechar o e-mail\n";

# gera entrada no arquivo de log
open (LOG, ">> $logfile") or die ("Erro ao abrir arquivo $logfile\n") ; printf LOG "
Recusa por anexo proprietario ($date):
 User: $ENV{'LOGNAME'}
 From: $tags{'from'}
 To:   $tags{'to'}
 Subj: $tags{'subject'}
 Date: $tags{'date'}
 File: @files
" ;
close (LOG) ;



Veja a relação completa dos artigos de Francisco A Silva