Enviando e-mail com Mailjet


Mailjet é um serviço de e-mail global terceirizado que oferece aos usuários do Compute Engine um nível gratuito com 6.000 e-mails por mês. Além disso, Mailjet também oferece:

  • Uma API, interface de usuário e retransmissão SMTP para enviar emails transacionais e de marketing.
  • Conformidade europeia com a privacidade de dados.
  • Recursos de e-mail e capacidade de entrega, como configurações de prioridade personalizáveis ​​e gerenciamento automatizado de aceleração.
  • Biblioteca de recursos de API em Go, PHP, Nodejs, Java, Python e Ruby para gerenciar subcontas, autenticação, contatos, campanhas, cargas personalizadas, estatísticas, eventos em tempo real e análise por meio da API de eventos .
  • Estrutura MJML integrada para criar modelos de e-mail HTML responsivos.
  • Suporte follow-the-sun 24 horas por dia, 7 dias por semana, em mais de 4 idiomas.
  • Capacidade de enviar mensagens de email de domínios diferentes de gmail.com .

Este documento descreve como configurar sua instância de VM para enviar e-mails por meio do Mailjet usando os seguintes métodos:

Para documentação extensa de outras soluções de e-mail, incluindo exemplos de integração com servidores, bibliotecas e estruturas SMTP mais comuns, consulte a documentação do Mailjet .

Antes de começar

  1. Crie uma nova conta Mailjet na página de parceiro Google do Mailjet *. Ao se inscrever, forneça o domínio e o endereço de e-mail dos quais deseja enviar mensagens de e-mail.

  2. Obtenha as credenciais da sua conta Mailjet SMTP .

  3. Certifique-se de que o endereço de e-mail do qual deseja enviar e-mails foi validado .

  4. Configure uma regra de firewall para permitir o tráfego TCP na porta 2525.

*O Google é remunerado pelos clientes que se inscrevem em uma conta não gratuita.

Configurando Mailjet como uma retransmissão SMTP

Configurar o Mailjet como um retransmissor de e-mail permite encaminhar mensagens de e-mail para o Mailjet para entrega remota.

Usando Postfix

  1. Conecte-se à sua VM usando SSH, substituindo instance-name pelo nome da instância da qual você deseja enviar mensagens de email:

    gcloud compute ssh instance-name
  2. Na VM, instale o Postfix Mail Transport Agent. Quando solicitado, aceite as opções padrão para nomes de domínio, mas selecione a configuração Local Only .

    Debian

    sudo apt update && sudo apt -y install postfix libsasl2-modules
    

    CentOS

    sudo yum install postfix cyrus-sasl-plain cyrus-sasl-md5 -y
    

  3. Modifique as opções de configuração do Postfix. As opções de configuração do Postfix são definidas no arquivo main.cf Abra o arquivo com o editor de texto de sua preferência:

    sudo vi /etc/postfix/main.cf
    
  4. Atualize o arquivo:

    1. Comente as seguintes linhas:

      # default_transport = error
      # relay_transport = error
      
    2. Adicione as seguintes linhas ao final do arquivo:

      relayhost = in-v3.mailjet.com:2525
      smtp_tls_security_level = encrypt
      smtp_sasl_auth_enable = yes
      smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
      smtp_sasl_security_options = noanonymous
      

      Essas linhas impõem suporte SSL/TLS e configuram a autenticação SMTP para essas solicitações. Um módulo de camada simples de acesso e segurança (SASL) lida com a autenticação na configuração do Postfix.

    3. Salve suas alterações e feche o arquivo.

  5. Crie o mapa de senha SASL com o editor de texto de sua preferência:

    sudo vi /etc/postfix/sasl_passwd
    
  6. Ao arquivo sasl_passwd , adicione as seguintes linhas para fornecer as credenciais para Mailjet:

    in-v3.mailjet.com:2525 YOUR_API_KEY:YOUR_SECRET_KEY
    
  7. Use o utilitário postmap para gerar um arquivo .db :

    sudo postmap /etc/postfix/sasl_passwd
    sudo ls -l /etc/postfix/sasl_passwd*
    

    Você deverá receber a seguinte resposta:

    -rw------- 1 root root    68 Jun  1 10:50 /etc/postfix/sasl_passwd
    -rw------- 1 root root 12288 Jun  1 10:51 /etc/postfix/sasl_passwd.db
    
  8. Em seguida, remova o arquivo que contém suas credenciais porque ele não é mais necessário:

    sudo rm /etc/postfix/sasl_passwd
    
  9. Defina as permissões no seu arquivo .db :

    sudo chmod 600 /etc/postfix/sasl_passwd.db
    sudo ls -la /etc/postfix/sasl_passwd.db
    
  10. Por fim, recarregue sua configuração para carregar os parâmetros modificados:

    Debian

    sudo /etc/init.d/postfix restart
    

    CentOS

    sudo postfix reload
    

  11. Teste sua configuração. Instale o pacote mailx ou mailutils e teste sua configuração.

    Debian

    sudo apt -y install mailutils
    

    CentOS

    sudo yum install mailx -y
    

    Envie uma mensagem de teste:

    echo 'Test passed.' | mail -s 'Test-Email' -aFrom:from-email destination-email

    Substitua o seguinte:

    • from-email : um endereço de e-mail que foi validado .
    • destination-email : o endereço para o qual enviar a mensagem de email.

    Procure nos logs do seu sistema uma linha de status contendo status e o código de resposta do servidor bem-sucedido (250) :

    Debian

    sudo tail -n 5 /var/log/syslog
    

    CentOS

    sudo tail -n 5 /var/log/maillog
    

Se você tiver problemas ao configurar o Postfix com Mailjet, consulte as instruções de configuração do Mailjet Postfix .

Usando o Nodemailer

As instruções a seguir descrevem como usar Mailjet com Node.js no Debian Wheezy.

Debian
  1. Conecte-se à sua instância usando SSH:
    gcloud compute ssh instance-name
  2. Atualize seus repositórios de pacotes:
    user@test-wheezy:~# sudo apt update
  3. Instale as dependências do Node.js:
    user@test-wheezy:~# sudo apt -y install git-core curl build-essential openssl libssl-dev
  4. Clone o repositório Node.js do github:
    user@test-wheezy:~# git clone https://github.com/nodejs/node
  5. Mude o diretório para a árvore de origem do Node.js:
    user@test-wheezy:~# cd node
  6. Configure o software do nó para este sistema operacional e máquina virtual:
    user@test-wheezy:~# ./configure
  7. Crie Node.js, npm e objetos relacionados:
    user@test-wheezy:~# sudo make

    Isso pode levar alguns minutos para ser concluído.

  8. Instale Node.js, npm e outros softwares no local padrão:
    user@test-wheezy:~# sudo make install
  9. Instale o pacote do mailer:
    user@test-wheezy:~# npm install nodemailer nodemailer-smtp-transport
  10. No diretório node , crie um novo arquivo chamado sendmail.js que contenha o seguinte JavaScript:
    const mailer = require('nodemailer');
    const smtp = require('nodemailer-smtp-transport');
    
    async function mailjet() {
      const transport = mailer.createTransport(
        smtp({
          host: 'in.mailjet.com',
          port: 2525,
          auth: {
            user: process.env.MAILJET_API_KEY || '<your-mailjet-api-key',
            pass: process.env.MAILJET_API_SECRET || '<your-mailjet-api-secret>',
          },
        })
      );
    
      const json = await transport.sendMail({
        from: 'ANOTHER_EMAIL@ANOTHER_EXAMPLE.COM', // From address
        to: 'EMAIL@EXAMPLE.COM', // To address
        subject: 'test email from Node.js on Google Cloud Platform', // Subject
        text: 'Hello!\n\nThis a test email from Node.js.', // Content
      });
      console.log(json);
    }
    mailjet();
  11. Execute o programa para enviar uma mensagem de e-mail através do Mailjet:
    user@test-wheezy:~# node sendmail.js
CentOS
  1. Conecte-se à sua instância usando SSH:
    gcloud compute ssh instance-name
  2. Atualizar repositórios de pacotes:
    user@test-centos:~# sudo yum update -y
  3. Instale as dependências do Node.js:
    user@test-centos:~# sudo yum install git-core curl openssl openssl-dev -y
    ...
    user@test-centos:~# sudo yum groupinstall "Development Tools" -y
    ...
  4. Clone o repositório Node.js do github:
    user@test-centos:~# git clone https://github.com/nodejs/node
  5. Mude o diretório para a árvore de origem do Node.js:
    user@test-centos:~# cd node
  6. Configure o software do nó para este sistema operacional e máquina virtual:
    user@test-centos:~# ./configure
  7. Crie Node.js, npm e objetos relacionados:
    user@test-centos:~# sudo make

    Isso pode levar alguns minutos para ser concluído.

  8. Instale Node.js, npm e outros softwares no local padrão:
    user@test-centos:~# sudo make install
  9. Instale o pacote do mailer:
    user@test-centos:~# npm install npm install nodemailer nodemailer-smtp-transport
  10. No diretório node , crie um novo arquivo chamado sendmail.js que contenha o seguinte JavaScript:
    const mailer = require('nodemailer');
    const smtp = require('nodemailer-smtp-transport');
    
    async function mailjet() {
      const transport = mailer.createTransport(
        smtp({
          host: 'in.mailjet.com',
          port: 2525,
          auth: {
            user: process.env.MAILJET_API_KEY || '<your-mailjet-api-key',
            pass: process.env.MAILJET_API_SECRET || '<your-mailjet-api-secret>',
          },
        })
      );
    
      const json = await transport.sendMail({
        from: 'ANOTHER_EMAIL@ANOTHER_EXAMPLE.COM', // From address
        to: 'EMAIL@EXAMPLE.COM', // To address
        subject: 'test email from Node.js on Google Cloud Platform', // Subject
        text: 'Hello!\n\nThis a test email from Node.js.', // Content
      });
      console.log(json);
    }
    mailjet();
  11. Execute o programa para enviar uma mensagem de e-mail através do Mailjet:
    user@test-centos:~# node sendmail.js

Envio de e-mail através da API Mailjet com Java

Para obter mais exemplos de uso da API Mailjet, consulte a documentação oficial do Mailjet .

Debian
  1. Conecte-se à sua instância usando SSH:
    gcloud compute ssh instance-name
  2. Atualize seus repositórios de pacotes e instale os pacotes necessários:
    user@test-instance:~# sudo apt update && sudo apt install git-core openjdk-8-jdk maven
  3. Clone o repositório Java do GitHub:
    user@test-instance:~# git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
  4. Vá para o código-fonte principal do exemplo, localizado em:
    /root/java-docs-samples/compute/mailjet/src/main/java/com/example/compute/mailjet
  5. Defina suas configurações do Mailjet. Consulte a documentação do Mailjet Authentication sobre como substituir as seguintes variáveis:

    • your-mailjet-api-key : uma chave de API para sua conta Mailjet.
    • your-mailjet-secret-key : A chave secreta correspondente para sua conta Mailjet.

    public class MailjetSender {
    
      public static void main(String[] args) throws MailjetException {
        final String mailjetApiKey = "YOUR-MAILJET-API-KEY";
        final String mailjetSecretKey = "YOUR-MAILJET-SECRET-KEY";
        ClientOptions options =
            ClientOptions.builder().apiKey(mailjetApiKey).apiSecretKey(mailjetSecretKey).build();
        MailjetClient client = new MailjetClient(options);
    
        MailjetSender sender = new MailjetSender();
        sender.sendMailjet(args[0], args[1], client);
      }
    
      public MailjetResponse sendMailjet(String recipient, String sender, MailjetClient client)
          throws MailjetException {
        MailjetRequest email =
            new MailjetRequest(Emailv31.resource)
                .property(
                    Emailv31.MESSAGES,
                    new JSONArray()
                        .put(
                            new JSONObject()
                                .put(
                                    Emailv31.Message.FROM,
                                    new JSONObject().put("Email", sender).put("Name", "pandora"))
                                .put(
                                    Emailv31.Message.TO,
                                    new JSONArray().put(new JSONObject().put("Email", recipient)))
                                .put(Emailv31.Message.SUBJECT, "Your email flight plan!")
                                .put(
                                    Emailv31.Message.TEXTPART,
                                    "Dear passenger, welcome to Mailjet!" 
                                    + "May the delivery force be with you!")
                                .put(
                                    Emailv31.Message.HTMLPART,
                                    "<h3>Dear passenger, welcome to Mailjet!</h3>"
                                    + "<br />May the delivery force be with you!")));
    
        try {
          // trigger the API call
          MailjetResponse response = client.post(email);
          // Read the response data and status
          System.out.println(response.getStatus());
          System.out.println(response.getData());
          return response;
        } catch (MailjetException e) {
          System.out.println("Mailjet Exception: " + e);
          return null;
        }
      }
    }
  6. No diretório mailjet , use o Maven para empacotar a classe como um arquivo JAR:
    user@test-instance:~# mvn clean package
  7. Certifique-se de estar usando o OpenJDK 8:
    user@test-instance:~# sudo update-alternatives --config java
  8. Para enviar um e-mail: do diretório de destino, execute o arquivo JAR com os endereços de e-mail do destinatário e do remetente como argumentos:
    user@test-instance:~# java -jar
            compute-mailjet-1.0-SNAPSHOT-jar-with-dependencies.jar
            recipient-email sender-email
CentOS
  1. Conecte-se à sua instância usando SSH:
    gcloud compute ssh instance-name
  2. Atualize seus repositórios de pacotes e instale os pacotes necessários:
    user@test-centos:~# sudo yum update && sudo yum install git-core openjdk-8-jdk maven
  3. Clone o repositório Java do GitHub:
    user@test-centos:~# git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
  4. Vá para o código-fonte principal do exemplo, localizado em:
    /root/java-docs-samples/compute/mailjet/src/main/java/com/example/compute/mailjet
  5. Defina suas configurações do Mailjet. Para obter informações sobre como substituir as seguintes variáveis, consulte a documentação do Mailjet Authentication :

    • your-mailjet-api-key : uma chave de API para sua conta Mailjet.
    • your-mailjet-secret-key : A chave secreta correspondente para sua conta Mailjet.

    public class MailjetSender {
    
      public static void main(String[] args) throws MailjetException {
        final String mailjetApiKey = "YOUR-MAILJET-API-KEY";
        final String mailjetSecretKey = "YOUR-MAILJET-SECRET-KEY";
        ClientOptions options =
            ClientOptions.builder().apiKey(mailjetApiKey).apiSecretKey(mailjetSecretKey).build();
        MailjetClient client = new MailjetClient(options);
    
        MailjetSender sender = new MailjetSender();
        sender.sendMailjet(args[0], args[1], client);
      }
    
      public MailjetResponse sendMailjet(String recipient, String sender, MailjetClient client)
          throws MailjetException {
        MailjetRequest email =
            new MailjetRequest(Emailv31.resource)
                .property(
                    Emailv31.MESSAGES,
                    new JSONArray()
                        .put(
                            new JSONObject()
                                .put(
                                    Emailv31.Message.FROM,
                                    new JSONObject().put("Email", sender).put("Name", "pandora"))
                                .put(
                                    Emailv31.Message.TO,
                                    new JSONArray().put(new JSONObject().put("Email", recipient)))
                                .put(Emailv31.Message.SUBJECT, "Your email flight plan!")
                                .put(
                                    Emailv31.Message.TEXTPART,
                                    "Dear passenger, welcome to Mailjet!" 
                                    + "May the delivery force be with you!")
                                .put(
                                    Emailv31.Message.HTMLPART,
                                    "<h3>Dear passenger, welcome to Mailjet!</h3>"
                                    + "<br />May the delivery force be with you!")));
    
        try {
          // trigger the API call
          MailjetResponse response = client.post(email);
          // Read the response data and status
          System.out.println(response.getStatus());
          System.out.println(response.getData());
          return response;
        } catch (MailjetException e) {
          System.out.println("Mailjet Exception: " + e);
          return null;
        }
      }
    }
  6. No diretório mailjet , use o Maven para empacotar a classe como um arquivo JAR:
    user@test-centos:~# mvn clean package
  7. Certifique-se de estar usando o OpenJDK 8:
    user@test-centos:~# sudo alternatives --config java
  8. Para enviar um e-mail, a partir do diretório de destino, execute o arquivo JAR com os endereços de e-mail do destinatário e do remetente como argumentos:
    user@test-centos:~# java -jar
            compute-mailjet-1.0-SNAPSHOT-jar-with-dependencies.jar
            recipient-email sender-email

Configurações SMTP do Mailjet

Aqui está uma referência rápida às configurações SMTP específicas do Mailjet que são usadas para configurar clientes:

  • Anfitrião: in-v3.mailjet.com
  • Porto: 2525

O que vem a seguir

Explore arquiteturas de referência, diagramas e práticas recomendadas sobre o Google Cloud. Dê uma olhada em nosso Centro de Arquitetura de Nuvem .