Acesso direto ao conteúdo

Busca

Visite também: Segurança Linux ·  UnderLinux ·  VivaOLinux ·  LinuxSecurity ·  NoticiasLinux ·  BR-Linux ·  SoftwareLivre.org ·  [mais]   
 

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.

Veja a relação completa dos artigos da coluna Cantinho do Shell

Formato PDF
Newsfeed RSS
Formato para impressão
PDF RSS Imprimir
  • Currently 2.97/5
  • 1
  • 2
  • 3
  • 4
  • 5

Avaliação: 3.0 /5 (837 votos)


Para se manter atualizado sobre as novidades desta coluna, consulte sempre o newsfeed RSS

Cantinho do Shell NewsFeed RSS

Para saber mais sobre RSS, leia o artigo O Padrão RSS - A luz no fim do túnel.

Opinião dos Leitores

Thiago Moreira de Souza
22 Mai 2010, 17:21
Opa sou eu de novo,eu fiz o teste, gravei o script no gedit tentei executar no terminal e deu isso
thiago@thiago-laptop:~/Documentos/teste$ teste.sh
teste.sh: command not found

bom ai tentei novamente de outra forma digitando o script direto no terminal e deu um outro erro

bash: usr/sbin/sendmail: Arquivo ou diretório não encontrado

o que eu devo fazer agora
Thiago Moreira de Souza
22 Mai 2010, 16:57
Boa Tarde, meu nome é Thiago, tenho pouco tempo de experiência com o linux mas cada minuto que se passa fico muito satisfeito com o que estou aprendendo, achei muito interessante esse conteúdo, que você acabou de passar, só que gostaria de tirar uma dúvida, esse procedimento do script shell é para digitar tudo no terminal, ou gravar no gedit com a extensão .sh, se for ter que gravar no gedit, como faço para chamar esse recurso pelo terminal para executar o script...

Fico no aguardo e meus PARABÉNS E SUCESSO!!!
emilson
15 Abr 2008, 01:42
preciso de uma solução igual a que mostra pronta meus dados estao em uma planilha de excel pode me ajudar


grato


Atenciosamente


Emilson Ferreira
*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

Bombando o Shell - Caixa de Ferramentas Gráficas do Shell Linux></A>
</div>
<div align=center>
<!--
<a href='http://www.idph.net/inglesonline/inscricao.shtml' target='_blank'><img src='http://www.dicas-l.com.br/imagens/InglesOnline.jpg' border='0' alt=''></a><BR><BR>-->
<A HREF=http://iol.idph.com.br rel=

 

 

Procure pela casa ou apartamento ideal à venda ou para aluguel na busca inteligente do Imohoo
Buscar imóveis