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. Inoltre, Mailjet offre anche:

  • Un'API, un'interfaccia utente e un inoltro SMTP per inviare email di marketing e transazionali.
  • Conformità alla normativa europea sulla privacy dei dati.
  • Funzionalità per email e recapito, ad esempio impostazioni di priorità personalizzabili e gestione automatica della limitazione.
  • Libreria di risorse API in Go, PHP, Node.js, 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 di 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 inviare email tramite Mailjet utilizzando i seguenti metodi:

  • Tramite un SMTP inoltro con:
  • Direttamente tramite l'API Mailjet utilizzando Java

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

Prima di iniziare

  1. Crea un nuovo account Mailjet nella pagina del partner Google* di Mailjet. Al momento della registrazione, fornisci il dominio e l'indirizzo email da cui vuoi inviare i messaggi.

  2. Ottieni le credenziali dell'account SMTP Mailjet.

  3. Assicurati che l'indirizzo email da cui vuoi inviare le 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 a pagamento.

Configurare Mailjet come inoltro SMTP

La configurazione di Mailjet come relay della posta ti consente di inoltrare i messaggi email a Mailjet per il recapito remoto.

Utilizzo di Postfix

  1. Connettiti alla VM tramite 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. Modifica 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 di livello di sicurezza e accesso semplice (SASL) 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. Utilizza 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. Dopodiché rimuovi il file contenente le tue credenziali perché non è più necessario:

    sudo rm /etc/postfix/sasl_passwd
    
  9. Imposta le autorizzazioni per il 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 corretta (250):

    Debian

    sudo tail -n 5 /var/log/syslog
    

    CentOS

    sudo tail -n 5 /var/log/maillog
    

Se riscontri problemi di configurazione di Postfix con Mailjet, consulta le istruzioni di configurazione di Postfix di 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 impostandola su quella dell'albero di origine di 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

    L'operazione può richiedere alcuni minuti.

  8. Installa Node.js, npm e altro software nella posizione predefinita:
    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@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. Esegui il programma per inviare un messaggio email 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 impostandola sulla struttura di origine di 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

    L'operazione può richiedere alcuni minuti.

  8. Installa Node.js, npm e altro software nella posizione predefinita:
    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@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. Esegui il programma per inviare un messaggio email tramite Mailjet:
    user@test-centos:~# node sendmail.js

Invio di email tramite l'API Mailjet con Java

Per altri esempi di 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 all'indirizzo:
    /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 scoprire come sostituire le seguenti variabili:

    • your-mailjet-api-key: una chiave API per il tuo account Mailjet.
    • your-mailjet-secret-key: la chiave secret corrispondente per il 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 all'indirizzo:
    /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 sull'autenticazione di Mailjet:

    • your-mailjet-api-key: una chiave API per il tuo account Mailjet.
    • your-mailjet-secret-key: la chiave secret corrispondente per il 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 architetture di riferimento, diagrammi e best practice su Google Cloud. Consulta il nostro Cloud Architecture Center.