você está aqui: Home  → Colunistas  →  Cantinho do Shell

 

Mala direta por email

Por Rubens Queiroz de Almeida

Data de Publicação: 12 de Outubro de 2006

O exemplo de hoje mostra como montar um programa para envio de mala direta, por email, para diversos destinatários. Utiliza-se, para montar a lista de destinatários, um banco de dados em modo texto. A mensagem está embutida dentro da própria shell, utilizando um recurso chamado in here documents, ou, traduzindo, documento embutido.

O banco de dados para este exemplo consiste de linhas em que os campos são separados pelo caractere ":".

O objetivo do shell script é enviar, para uma lista de assinantes, o novo número de seu telefone celular. As mensagens devem ser personalizadas, com o nome do destinatário.

Banco de dados: Arquivo lista.txt

  Rubens Queiroz de Almeida:queiroz@dicas-l.com.br:98761234
  José Amâncio Bueno:amancio@example.com.br:99998888
  Maria Aparecida Antunes:aparecida@example.com:81772976

O programa

  #!/bin/bash
  
  IFS=:
  
  while read nome email telefone
  do
  echo $nome ... $email ... $telefone
  
  /usr/sbin/sendmail $email << EOF
  Subject: [EXAMPLE] Mudança do número de telefone
  From: Rubens Queiroz de Almeida <queiroz@dicas-l.com.br>
  To: $nome <$email>
  
  A/C $nome
  
  Gostariamos de lhe comunicar que o novo número de seu
  telefone celular é $telefone.
  
  Atenciosamente,
  
  Serviço de Atendimento ao Cliente
  Example.Com
  EOF
  done < lista.txt

Passemos agora à explicação dos campos.

  IFS=:

IFS significa INPUT FIELD SEPARATOR. No nosso banco de dados em modo texto, o caractere que separa os campos é ":".

  while read nome email telefone

Esta diretiva sinaliza o início de um laço que irá ler, linha a linha, todo o conteúdo do arquivo lista.txt. O primeiro campo será atribuído à variável nome, o segundo à variável email e o terceiro à variável email.

  echo $nome ... $email ... $telefone

Esta diretiva não faz nada de útil, apenas ecoa para a tela o valor das três variáveis à medida em que são lidas. Apenas para acompanhamento da execução do programa.

  /usr/sbin/sendmail $email << EOF

Esta linha invoca o sendmail para o envio da mensagem. Aqui usamos o IN HERE DOCUMENT. O texto que será processado pelo programa sendmail vai da linha seguinte até encontrar, no começo da linha, os caracteres EOF.

Uma mensagem eletrônica consiste do cabeçalho, seguida de uma linha em branco e em seguida do corpo da mensagem. Podemos colocar quantas linhas de cabeçalho desejarmos, dependendo do que necessitarmos. Neste caso, identificamos o assunto da mensagem e o remetente (Subject e From). Importante colocar também o campo To:, especificando, como fizemos, o nome completo do destinatário e o email. Fazemos isto para evitar que apareça na mensagem o texto undisclosed recipients, que sinaliza que a mensagem foi enviada em lote, para dezenas ou centenas de pessoas. Poderíamos colocar outros campos, como por exemplo Reply-To, quando desejarmos que a resposta seja enviado para uma pessoa que não seja o remetente.

O que vem em seguida é a mensagem. Note bem os pontos em que foram inseridas as variáveis. Utilizamos aqui as variáveis $nome e $telefone.

IMPORTANTE: Como você está enviando mensagens para diversas pessoas, antes de fazer o envio real, faça um teste para certificar-se de que tudo está funcionando corretamente. A não ser que você seja realmente um programador genial, a chance de cometer erros é grande. Para fazer o teste, substitua a chamada ao sendmail por

  /usr/sbin/sendmail queiroz@dicas-l.com.br << EOF

Observe que eu retirei a variável $email desta linha. As mensagens serão enviadas apenas para meu endereço, para que eu possa verificar se tudo está realmente correto. É claro que você não precisa enviar a mensagem de teste para milhares de endereços. Para testar, crie um novo arquivo lista.txt contendo apenas uns cinco ou dez endereços. É mais do que suficiente.

As aplicações desta receita são inúmeras e podem ser usadas em diversos contextos. Aqui vale a imaginação do programador.

Meus agradecimentos, mais uma vez, ao Papai do Shell, Júlio Neves, que foi quem me ensinou este truque.

Você conhece outra forma de fazer esta tarefa? Envie-nos suas idéias utilizando o campo de comentário a seguir.

Recomende este artigo nas redes sociais

 

 

Veja a relação completa dos artigos desta coluna