Como enviar e-mails para vários destinatários

Pelo título, aposto que você pensou “basta utilizar ‘com cópia’ (Cc) ou ‘com cópia oculta’ (CCO)”. Isso pode ser feito através de qualquer e-mail, porém vamos observar como fazer isso através de quatro maneiras diferentes: (1) importando-se uma lista de contatos de uma tabela MySQL e criando um grupo para o envio desse e-mail; (2) utilizando-se um conjunto de funções do PHPMailer rodando em um servidor LAMP; (3) rodar rotina em python com alguns módulos; (4) via terminal Linux usando shell script e o programa mutt; (5) via terminal, com o Sendemail.

caixa-de-correios-lotada

1 – Gmail

No Gmail, existe a possibilidade de criar um grupo e importar os contatos de um arquivo “.csv”. Para isso, entre no MySQL (supondo que seus contatos estejam lá), selecione a base de dados e digite a seguinte linha de comando para criar o arquivo:

Escolhi gravar na pasta de temporários por causa de permissões de leitura (copie o arquivo para uma outra pasta); os campos a serem gravados estão na ordem apresentada (nome, sobrenome, email) e serão delimitados por vírgula. Abra o arquivo para edição e coloque na primeira linha o cabeçalho. Nesse caso, deixei “Name,Family Name,E-mail 1 – Value” para corresponder aos campos disponíveis no arquivo.

Vá para o Gmail, clique em Gmail no canto superior esquerdo da página e depois em Contatos. Clique no botão Mais, acima da lista de contatos, e selecione Importar. Escolha o arquivo e pronto (mais detalhes no site do Google). Ou importe/copie o arquivo no google drive, clique em Ferramentas -> Galeria de Scripts, busque por “mail merge” e escolha um.

2 – PHPMailer

Por medida de segurança contra spam e abusos, alguns servidores de e-mail desativam sua conta temporariamente se você enviar mensagens para mais de x destinatários (no caso do Gmail, esse x é de 500 pessoas) ou enviar uma grande quantidade de mensagens devolvidas. Nesse caso, utilizaremos a clássica instalação LAMP (Linux, Apache, MySQL e PHP) e o PHPMailer.

O PHPMailer é uma classe pronta para envio de e-mails através do PHP via conexão SMTP ou POP3. Seu método de envio é largamente recomendado e é bem melhor do que o envio do mail(), que é a função padrão do PHP (a não ser que queira configurar um servidor de e-mails na sua máquina). Baixe os arquivos class.phpmailer.php e class.smtp.php (ou class.pop3.php, se for o caso) do zip disponível no site do github PHPMailer e coloque-os em um diretório.

O script para envio de e-mails contém um while para ler os campos ‘nome’, ‘sobrenome’ e ‘email’ da tabela usuarios, contida na base de dados cadastro do MySQL, e envio de cada e-mail. No final, imprime uma linha com os dados do e-mail enviado, se foi enviado com sucesso (não quer dizer que foi recebido ou lido) e o comando sleep. A função sleep atrasa a execução de um código, de acordo com a quantidade de segundos informados no parâmetro seconds da função. É muitas vezes necessário porque grande parte dos provedores de hospedagem limitam a quantidade de envio de e-mails, geralmente em 300 por hora.

Deixei comentado alguns itens opcionais, como texto plano, anexo e cópia oculta. Assim que conseguir configurar uma maneira de deixar mais apresentável o código acima eu arrumo.

3 – Python

Segue um script em python para envio de e-mail. Caso o servidor de e-mails seja local, só precisa mudar remetente, destinatário e assunto/mensagem. Porém, é possível também utilizar algum outro servidor SMTP, como o Gmail. Nesse caso, este servidor de e-mail requer conexão segura e por isso deve-se o comando “starttls”, além da identificação (duas vezes) com o comando “ehlo” e o login.

Importante: deve-se também ativar a opção “Acesso para aplicativos menos seguros” na conta do Gmail utilizada.

4 – Shell script com Mutt

Outra maneira é enviar e-mail pelo terminal com o mutt (clique no link para ver mais a respeito). Instale através do comando “sudo apt-get install mutt”, crie o arquivo “~/.muttrc” conforme indicado no link e envie o e-mail conforme comando que segue abaixo. O shell script a seguir lê os e-mails dos destinatários de uma lista no arquivo “destinatarios.txt” (somente um e-mail por linha) com o assunto indicado no parâmetro “-s”, “-c” indica os e-mails com cópia, “b” para cópia oculta e um arquivo anexo indicado por “-a”:

Observe que após o nome do último arquivo a anexar deve-se colocar dois traços para depois informar o(s) destinatário(s).

Certas definições podem ser colocadas no arquivo de configuração “~/.muttrc” ou inseridas através da própria linha de comando, utilizando o parâmetro “-e” para executar um comando de configuração. Por exemplo:

  • -e ‘set realname=”Nome do Remetente”‘ # Especifica nome do remetente
  • -e ‘set from=‘ # Especifica e-mail do remetente
  • -e ‘set use_from=yes’ # Força uso do e-mail definido com o parâmetro acima
  • -e ‘my_hdr Reply-To:email1@…,email2@…’ # Define e-mails padrão para resposta
  • -e ‘set envelope_from=yes’

O “mutt” precisa mesmo de um servidor de e-mail (nesse caso, o postfix). Veja mais no manual e no wiki do Debian.

5 – Sendemail

Outra forma bem simples de envio de e-mails pelo terminal é através do programa sendemail. Instale-o pelo comando “apt-get install sendemail” e execute o comando “sendEmail” seguidos dos seguintes parâmetros para enviar o e-mail:

  • -f → e-mail do remetente
  • -t → e-mail(s) do(s) destinatário(s), separados por vírgula
  • -u → assunto
  • -m → mensagem
  • -s → endereço do servidor SMTP
  • -xu → nome de usuário
  • -xp → senha do e-mail
  • -a → caminho de arquivo anexo (opcional)

Veja um exemplo usando o gmail, com o assunto, mensagem e destinatários definidos em variáveis shell script:

As configurações dos servidores POP, IMAP e SMTP dos principais fornecedores de acesso à internet podem ser vistas acessando-se esse link. Veja mais detalhes no artigo Enviando e-mails pelo terminal – usando o sendEmail e alguns exemplos.

Postfix e Courier são servidores de e-mail, usados para o envio e recebimentos de mensagens, respectivamente, servidores SMTP e POP3. Sua instalação e configuração podem ser vistas nos slides do link.

Caso utilize algum dos métodos, compartilhe seus resultados e dúvidas no espaço de comentários logo abaixo.