Invio di email con Mailjet

Mailjet è un servizio email globale di terze parti che offre agli utenti di Compute Engine un livello gratuito con 6000 email al mese. Mailjet offre inoltre:

  • Un'API, un'interfaccia utente e un inoltro SMTP per inviare email transazionali e di marketing.
  • Conformità ai dati in materia di privacy dei dati in Europa.
  • Funzionalità di email e recapito, ad esempio impostazioni di priorità personalizzabili e gestione automatica della limitazione.
  • libreria di risorse API in Go, PHP, Nodejs, Java, Python e Ruby per gestire subaccount, autenticazione, contatti, campagne, payload personalizzati, statistiche, eventi in tempo reale e analisi tramite l'API Event.
  • Framework MJML integrato per creare modelli email HTML adattabili.
  • Assistenza 24 ore su 24, 7 giorni su 7, in più di 4 lingue.
  • Possibilità di inviare messaggi email da domini diversi da gmail.com.

Questo documento descrive come configurare l'istanza VM per l'invio di posta tramite Mailjet utilizzando i seguenti metodi:

Per una documentazione completa di altre soluzioni email, compresi esempi di integrazione con i server, le librerie e i framework SMTP più comuni, consulta la documentazione di Mailjet.

Prima di iniziare

  1. Crea un nuovo account Mailjet nella pagina dei partner di Google di Mailjet*. Quando ti registri, fornisci il dominio e l'indirizzo email da cui vuoi inviare i messaggi email.

  2. Recupera le credenziali dell'account SMTP Mailjet.

  3. Assicurati che l'indirizzo email da cui vuoi inviare email sia stato convalidato.

  4. Configura una regola firewall per consentire il traffico TCP sulla porta 2525.

* Google riceve un compenso per i clienti che si registrano per un account non gratuito.

Configurazione di Mailjet come inoltro SMTP

La configurazione di Mailjet come inoltro di posta consente di inoltrare messaggi email a Mailjet per la consegna remota.

Utilizzo di Postfix

  1. Connettiti alla VM utilizzando SSH, sostituendo instance-name con il nome dell'istanza da cui vuoi inviare i messaggi email:

    gcloud compute ssh instance-name
  2. Sulla VM, installa Postfix Mail Transport Agent. Quando richiesto, accetta le scelte predefinite per i nomi di dominio, ma seleziona la configurazione 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. Modificare le opzioni di configurazione di Postfix. Le opzioni di configurazione di Postfix sono impostate nel file main.cf. Apri il file con l'editor di testo di tua scelta:

    sudo vi /etc/postfix/main.cf
    
  4. Aggiorna il file:

    1. Commenta le seguenti righe:

      # default_transport = error
      # relay_transport = error
      
    2. Aggiungi le seguenti righe alla fine del file:

      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
      

      Queste righe applicano il supporto SSL/TLS e configurano l'autenticazione SMTP per queste richieste. Un modulo SASL (Access and Security Layer) semplice gestisce l'autenticazione nella configurazione di Postfix.

    3. Salva le modifiche e chiudi il file.

  5. Crea la mappa delle password SASL con l'editor di testo di tua scelta:

    sudo vi /etc/postfix/sasl_passwd
    
  6. Al file sasl_passwd, aggiungi le seguenti righe per fornire le credenziali per Mailjet:

    in-v3.mailjet.com:2525 YOUR_API_KEY:YOUR_SECRET_KEY
    
  7. Usa l'utilità postmap per generare un file .db:

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

    Dovresti ricevere la seguente risposta:

    -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. Quindi, rimuovi il file che contiene le tue credenziali perché non è più necessario:

    sudo rm /etc/postfix/sasl_passwd
    
  9. Imposta le autorizzazioni per il tuo file .db:

    sudo chmod 600 /etc/postfix/sasl_passwd.db
    sudo ls -la /etc/postfix/sasl_passwd.db
    
  10. Infine, ricarica la configurazione per caricare i parametri modificati:

    Debian

    sudo /etc/init.d/postfix restart
    

    CentOS

    sudo postfix reload
    

  11. Testa la configurazione. Installa il pacchetto mailx o mailutils e testa la configurazione.

    Debian

    sudo apt -y install mailutils
    

    CentOS

    sudo yum install mailx -y
    

    Invia un messaggio di prova:

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

    Sostituisci quanto segue:

    • from-email: un indirizzo email che è stato convalidato.
    • destination-email: l'indirizzo a cui inviare il messaggio email.

    Cerca nei log di sistema una riga di stato contenente status e il codice di risposta del server riuscito (250):

    Debian

    sudo tail -n 5 /var/log/syslog
    

    CentOS

    sudo tail -n 5 /var/log/maillog
    

In caso di problemi durante la configurazione di Postfix con Mailjet, consulta le istruzioni per la configurazione di Postfix per Mailjet.

Utilizzo di Nodemailer

Le seguenti istruzioni descrivono come utilizzare Mailjet con Node.js su Debian Wheezy.

Debian
  1. Connettiti all'istanza tramite SSH:
    gcloud compute ssh instance-name
  2. Aggiorna i repository dei pacchetti:
    user@test-wheezy:~# sudo apt update
  3. Installa le dipendenze Node.js:
    user@test-wheezy:~# sudo apt -y install git-core curl build-essential openssl libssl-dev
  4. Clona il repository Node.js da github:
    user@test-wheezy:~# git clone https://github.com/nodejs/node
  5. Cambia la directory nella struttura di origine Node.js:
    user@test-wheezy:~# cd node
  6. Configura il software del nodo per questo sistema operativo e questa macchina virtuale:
    user@test-wheezy:~# ./configure
  7. Crea Node.js, npm e oggetti correlati:
    user@test-wheezy:~# sudo make

    Il completamento dell'operazione può richiedere alcuni minuti.

  8. Installa Node.js, npm e altri software nel percorso predefinito:
    user@test-wheezy:~# sudo make install
  9. Installa il pacchetto mailer:
    user@test-wheezy:~# npm install nodemailer nodemailer-smtp-transport
  10. Nella directory node, crea un nuovo file denominato sendmail.js contenente il seguente codice 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 protected]', // 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. Esegui il programma per inviare un messaggio e-mail tramite Mailjet:
    user@test-wheezy:~# node sendmail.js
CentOS
  1. Connettiti all'istanza tramite SSH:
    gcloud compute ssh instance-name
  2. Aggiorna i repository dei pacchetti:
    user@test-centos:~# sudo yum update -y
  3. Installa le dipendenze 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. Clona il repository Node.js da github:
    user@test-centos:~# git clone https://github.com/nodejs/node
  5. Cambia la directory nella struttura di origine Node.js:
    user@test-centos:~# cd node
  6. Configura il software del nodo per questo sistema operativo e questa macchina virtuale:
    user@test-centos:~# ./configure
  7. Crea Node.js, npm e oggetti correlati:
    user@test-centos:~# sudo make

    Il completamento dell'operazione può richiedere alcuni minuti.

  8. Installa Node.js, npm e altri software nel percorso predefinito:
    user@test-centos:~# sudo make install
  9. Installa il pacchetto mailer:
    user@test-centos:~# npm install npm install nodemailer nodemailer-smtp-transport
  10. Nella directory node, crea un nuovo file denominato sendmail.js contenente il seguente codice 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 protected]', // 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. Esegui il programma per inviare un messaggio e-mail tramite Mailjet:
    user@test-centos:~# node sendmail.js

Invio della posta tramite l'API Mailjet con Java

Per altri esempi sull'utilizzo dell'API Mailjet, consulta la documentazione ufficiale di Mailjet.

Debian
  1. Connettiti all'istanza tramite SSH:
    gcloud compute ssh instance-name
  2. Aggiorna i repository dei pacchetti e installa i pacchetti richiesti:
    user@test-instance:~# sudo apt update && sudo apt install git-core openjdk-8-jdk maven
  3. Clona il repository Java da GitHub:
    user@test-instance:~# git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
  4. Vai al codice sorgente principale dell'esempio, che si trova in:
    /root/java-docs-samples/compute/mailjet/src/main/java/com/example/compute/mailjet
  5. Configura le impostazioni di Mailjet. Consulta la documentazione relativa all'autenticazione di Mailjet per informazioni su come sostituire le seguenti variabili:

    • your-mailjet-api-key: una chiave API per il tuo account Mailjet.
    • your-mailjet-secret-key: la chiave segreta corrispondente al tuo account 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. Dalla directory mailjet, utilizza Maven per pacchettizzare la classe come file JAR:
    user@test-instance:~# mvn clean package
  7. Assicurati di utilizzare OpenJDK 8:
    user@test-instance:~# sudo update-alternatives --config java
  8. Per inviare un'email: dalla directory di destinazione, esegui il file JAR con gli indirizzi email del destinatario e del mittente come argomenti:
    user@test-instance:~# java -jar
            compute-mailjet-1.0-SNAPSHOT-jar-with-dependencies.jar
            recipient-email sender-email
CentOS
  1. Connettiti all'istanza tramite SSH:
    gcloud compute ssh instance-name
  2. Aggiorna i repository dei pacchetti e installa i pacchetti richiesti:
    user@test-centos:~# sudo yum update && sudo yum install git-core openjdk-8-jdk maven
  3. Clona il repository Java da GitHub:
    user@test-centos:~# git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
  4. Vai al codice sorgente principale dell'esempio, che si trova in:
    /root/java-docs-samples/compute/mailjet/src/main/java/com/example/compute/mailjet
  5. Configura le impostazioni di Mailjet. Per informazioni su come sostituire le seguenti variabili, consulta la documentazione relativa all'autenticazione di Mailjet:

    • your-mailjet-api-key: una chiave API per il tuo account Mailjet.
    • your-mailjet-secret-key: la chiave segreta corrispondente al tuo account 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. Dalla directory mailjet, utilizza Maven per pacchettizzare la classe come file JAR:
    user@test-centos:~# mvn clean package
  7. Assicurati di utilizzare OpenJDK 8:
    user@test-centos:~# sudo alternatives --config java
  8. Per inviare un'email, dalla directory di destinazione, esegui il file JAR con gli indirizzi email del destinatario e del mittente come argomenti:
    user@test-centos:~# java -jar
            compute-mailjet-1.0-SNAPSHOT-jar-with-dependencies.jar
            recipient-email sender-email

Impostazioni SMTP di Mailjet

Ecco un riferimento rapido alle impostazioni SMTP specifiche di Mailjet utilizzate per configurare i client:

  • Host: in-v3.mailjet.com
  • Porta: 2525

Passaggi successivi

Esplora le architetture di riferimento, i diagrammi e le best practice su Google Cloud. Visita il nostro Cloud Architecture Center.