você está aqui: Home  → Arquivo de Mensagens

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

 

 

Opinião dos Leitores

Seja o primeiro a comentar este artigo
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script