E-Mails mit SendGrid senden

In dieser Anleitung wird gezeigt, wie Sie mit SendGrid eine E-Mail von einer App senden, die auf einer Compute Engine-Instanz ausgeführt wird. SendGrid ist ein Drittanbieter-E-Mail-Dienst, der Compute Engine-Nutzern eine kostenlose Testversion mit 12.000 kostenlosen Transaktions-E-Mails pro Monat bietet.

Zielsetzungen

  • SendGrid mit Postfix auf einer Compute Engine-Instanz verwenden
  • SendGrid in Java-Code verwenden, der auf einer Compute Engine-Instanz ausgeführt wird
  • SendGrid in Node.js-Code verwenden, der auf einer Compute Engine-Instanz ausgeführt wird

Kosten

In dieser Anleitung werden kostenpflichtige Komponenten von Google Cloud verwendet, darunter auch Compute Engine.

Neuen Google Cloud-Nutzern steht möglicherweise eine kostenlose Testversion zur Verfügung.

Vorbereitung

  1. Melden Sie sich in Ihrem Google-Konto an.

    Wenn Sie noch kein Konto haben, registrieren Sie sich hier für ein neues Konto.

  2. Wählen Sie in der GCP Console auf der Projektauswahlseite ein GCP-Projekt aus oder erstellen Sie eins.

    Zur Projektauswahl

  3. Prüfen Sie, ob die Abrechnung für Ihr Google Cloud Platform-Projekt aktiviert ist. So bestätigen Sie die Abrechnung für Ihr Projekt.

  4. Wechseln Sie in der GCP Console zur Seite VM-Instanzen.

    Die Seite VM-Instanzen aufrufen

  5. Klicken Sie auf Instanz erstellen.
  6. Legen Sie Name auf sendgrid-tutorial fest.
  7. Klicken Sie im Abschnitt Bootlaufwerk auf Ändern, um mit der Konfiguration des Bootlaufwerks zu beginnen.
  8. Wählen Sie auf dem Betriebssystem-Images: Tab a Debian or CentOS image aus.

  9. Klicken Sie auf Auswählen.
  10. Füllen Sie auf der Seite Neue Instanz erstellen die Eigenschaften für Ihre Instanz aus. Maximieren Sie für erweiterte Konfigurationsoptionen den Abschnitt Verwaltung, Sicherheit, Laufwerke, Netzwerk, einzelne Mandanten.
  11. Erstellen klicken, um die Instanz zu erstellen.
  12. Registrieren Sie sich im Google Cloud Marketplace für den SendGrid-E-Mail-Dienst. Halten Sie die SendGrid-SMTP-Kontoanmeldedaten fest, die Nutzername, Passwort und Hostname umfassen. Der SMTP-Nutzername und das SMTP-Passwort sind mit den bei der Registrierung für den Dienst angegebenen Daten identisch. Der SendGrid-Hostname ist smtp.sendgrid.net.
  13. Erstellen Sie einen API-Schlüssel:
    1. Melden Sie sich bei SendGrid an und rufen Sie Settings > API Keys (Einstellungen > API-Schlüssel) auf.
    2. Erstellen Sie einen API-Schlüssel.
    3. Wählen Sie die Berechtigungen für den Schlüssel aus. Der Schlüssel benötigt mindestens die Berechtigungen Mail send (E-Mails senden), damit Sie E-Mails senden können.
    4. Klicken Sie auf Save (Speichern), um den Schlüssel zu erstellen.
    5. SendGrid generiert einen neuen Schlüssel. Dies ist die einzige Kopie des Schlüssels. Deshalb müssen Sie den Schlüssel unbedingt kopieren und zur späteren Verwendung speichern.

E-Mails mit Postfix auf der Instanz senden

Führen Sie die folgenden Schritte aus, um eine Verbindung zur Instanz sendgrid-tutorial herzustellen und SendGrid mit Postfix auszuführen.

SSH-Verbindung zur Instanz sendgrid-tutorial herstellen

  1. Rufen Sie in der GCP Console die Seite VM-Instanzen auf.

    Zur Seite "VM-Instanzen"

  2. Klicken Sie in der Liste der VM-Instanzen in der Zeile der Instanz, zu der Sie eine Verbindung herstellen möchten, auf SSH.

SendGrid als SMTP-Relay mit Postfix konfigurieren

Führen Sie in Ihrem SSH-Terminal die folgenden Befehle aus, um SendGrid als SMTP-Relay mit Postfix zu verwenden.

  1. Werden Sie Superuser:

    sudo su -
    
  2. Sichere Demaskierung festlegen:

    umask 077
    
  3. Postfix Mail Transport Agent installieren:

    Debian

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

    CentOS

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

    Wenn Sie dazu aufgefordert werden, wählen Sie die Konfiguration Nur lokal aus und bestätigen den Standard-Domainnamen.

  4. Ändern Sie die Postfix-Konfigurationsoptionen. Öffnen Sie /etc/postfix/main.cf zum Bearbeiten. Geben Sie beispielsweise zur Verwendung des nano-Texteditors den folgenden Befehl ein:

    nano /etc/postfix/main.cf
    
  5. Aktualisieren Sie die Datei:

    1. Entfernen Sie die Kommentarzeichen bei folgenden Zeilen:

      # default_transport = error
      # relay_transport = error
      
    2. Fügen Sie die folgenden Zeilen am Ende der Datei hinzu:

      relayhost = [smtp.sendgrid.net]:2525
      smtp_tls_security_level = encrypt
      smtp_sasl_auth_enable = yes
      smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
      header_size_limit = 4096000
      smtp_sasl_security_options = noanonymous
      

      Die obigen Zeilen erzwingen die SSL/TLS-Unterstützung und konfigurieren die SMTP-Authentifizierung für solche Anfragen. Die Authentifizierung in der Postfix-Konfiguration wird von einem SASL-Modul (Simple Authentication and Security Layer) verarbeitet.

  6. Speichern und schließen Sie die Datei.

  7. Generieren Sie die SASL-Passwortzuordnung mit dem API-Schlüssel, den Sie im Abschnitt Vorbereitung erstellt haben:

    echo [smtp.sendgrid.net]:2525 apikey:[YOUR_API_KEY] >> /etc/postfix/sasl_passwd
    

    Dabei ist [YOUR_API_KEY] der von Ihnen erstellte API-Schlüssel.

  8. Verwenden Sie das Dienstprogramm postmap zur Generierung einer .db-Datei:

    postmap /etc/postfix/sasl_passwd
    
  9. Prüfen Sie, ob Sie eine .db-Datei haben:

    ls -l /etc/postfix/sasl_passwd*
    
    -rw------- 1 root root    ...  /etc/postfix/sasl_passwd
    -rw------- 1 root root    ...  /etc/postfix/sasl_passwd.db
    
  10. Entfernen Sie die Datei mit Ihren Anmeldedaten, da sie nicht mehr benötigt wird:

    rm /etc/postfix/sasl_passwd
    
  11. Legen Sie die Berechtigungen für die .db-Datei fest und überprüfen Sie, ob die andere Datei entfernt wurde:

    chmod 600 /etc/postfix/sasl_passwd.db
    ls -la /etc/postfix/sasl_passwd.db
    
    -rw------- 1 root root    ...  /etc/postfix/sasl_passwd.db
    
  12. Laden Sie die Konfiguration neu, um die geänderten Parameter zu laden:

    Debian

    /etc/init.d/postfix restart
    

    CentOS

    postfix reload
    

  13. Installieren Sie das mailutils- oder mailx-Paket:

    Debian

    apt-get install mailutils -y

    CentOS

    yum install mailx -y
    

  14. Senden Sie eine Test-E-Mail:

    echo '[MESSAGE]' | mail -s [SUBJECT] [EMAIL@EXAMPLE.COM]

    Dabei gilt:

    • [MESSAGE] ist die Nachricht der E-Mail.
    • [SUBJECT] ist der Betreff der E-Mail.
    • [EMAIL@EXAMPLE.COM] ist die E-Mail-Adresse, an die Sie eine Nachricht senden möchten.

    Suchen Sie in den Systemlogs nach einer Statuszeile, die status und den Code für eine erfolgreiche Serverantwort (250) enthält.

    Debian

    tail -n 5 /var/log/syslog
    

    CentOS

    tail -n 5 /var/log/maillog
    

E-Mails mit Java auf der Instanz senden

SSH-Verbindung zur Instanz sendgrid-tutorial herstellen

  1. Rufen Sie in der GCP Console die Seite VM-Instanzen auf.

    Zur Seite "VM-Instanzen"

  2. Klicken Sie in der Liste der VM-Instanzen in der Zeile der Instanz, zu der Sie eine Verbindung herstellen möchten, auf SSH.

E-Mail-Nachricht verfassen und senden

In der folgenden Anleitung wird die SendGrid-Java-Clientbibliothek zum Verfassen und Senden einer E-Mail-Nachricht über SendGrid verwendet. Das vollständige Beispiel können Sie sich auf GitHub ansehen.

Gehen Sie im SSH-Terminal folgendermaßen vor:

  1. Werden Sie Superuser und legen Sie mit umask einen sicheren Zugriff fest:

    sudo su -
    umask 077
    
  2. Installieren Sie Java und Maven:

    apt-get update -y && apt-get install git-core openjdk-8-jdk maven -y
    
  3. Klonen Sie das GitHub-Repository:

    git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
    
  4. Gehen Sie zum Hauptquellcode für das Beispiel:

    cd /root/java-docs-samples/compute/sendgrid/src/main/java/com/example/compute/sendgrid
    
  5. Öffnen Sie SendEmailServelet.java zum Bearbeiten.

    • Ersetzen Sie YOUR-SENDGRID-API-KEY durch den API-Schlüssel für das SendGrid-Konto.

    • Ersetzen Sie YOUR-SENDGRID-FROM-EMAIL durch die E-Mail-Adresse, von der aus Sie E-Mails senden möchten.

    • Ersetzen Sie DESTINATION-EMAIL durch die E-Mail-Adresse, an die Sie E-Mails senden möchten.

  6. Gehen Sie zum Stammverzeichnis des Beispielcodes:

    cd /root/java-docs-samples/compute/sendgrid
    
  7. Verpacken Sie die Java-Klasse:

    mvn clean package
    
  8. Wechseln Sie zum neuen target-Verzeichnis:

    cd target
    
  9. Legen Sie Berechtigungen fest, mit denen Sie die JAR-Datei ausführen können:

    chmod +x compute-sendgrid-1.0-SNAPSHOT-jar-with-dependencies.jar
    
  10. Führen Sie den Selektor für alternative Java-Versionen aus:

    update-alternatives --config java
    

    Wählen Sie die Option java-8-openjdk-amd64 aus.

  11. Führen Sie die Java-Datei aus:

    java -jar compute-sendgrid-1.0-SNAPSHOT-jar-with-dependencies.jar
    

E-Mails mit Node.js auf der Instanz senden

Wenn Sie dieses Beispiel ausführen möchten, muss Node.js Version 7.6 oder höher auf der VM-Instanz installiert sein.

SSH-Verbindung zur Instanz sendgrid-tutorial herstellen

  1. Rufen Sie in der GCP Console die Seite VM-Instanzen auf.

    Zur Seite "VM-Instanzen"

  2. Klicken Sie in der Liste der VM-Instanzen in der Zeile der Instanz, zu der Sie eine Verbindung herstellen möchten, auf SSH.

E-Mail-Nachricht verfassen und senden

Gehen Sie im SSH-Terminal folgendermaßen vor:

  1. Werden Sie Superuser und legen Sie mit umask einen sicheren Zugriff fest:

    sudo su -
    umask 077
    
  2. Aktualisieren Sie die Paket-Repositorys:

    Debian

    apt-get update
    

    CentOS

    yum update -y
    

  3. Installieren Sie Node.js-Abhängigkeiten:

    Debian

    apt-get install git-core curl build-essential openssl libssl-dev -y
    

    CentOS

    yum install git-core curl openssl openssl-devel -y
    yum groupinstall "Development Tools" -y
    

  4. Installieren Sie Node.js. Dabei wird standardmäßig auch npm installiert:

    Debian

    curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
    sudo apt-get install -y nodejs
    

    CentOS

    curl --silent --location https://rpm.nodesource.com/setup_6.x | bash -
    

    Installieren Sie dann Node.js:

    yum -y install nodejs
    

  5. Installieren Sie den SendGrid-Node.js-Client:

    npm install sendgrid
    
  6. Klonen Sie das Beispiel-Repository:

    git clone https://github.com/googleapis/nodejs-compute.git
    
  7. Gehen Sie zu dem Verzeichnis, das das SendGrid-Beispiel enthält:

    cd nodejs-compute/samples
    
  8. Kopieren Sie die Datei sendgrid.js:

    cp sendgrid.js sendmail.js
    
  9. Öffnen Sie sendmail.js zum Bearbeiten.

    • Ersetzen Sie <your-sendgrid-api-key> durch den API-Schlüssel für das SendGrid-Konto.

    • Ersetzen Sie from_email@example.com durch die E-Mail-Adresse, von der aus Sie E-Mails senden möchten.

    • Ersetzen Sie to_email@example.com durch die E-Mail-Adresse, an die Sie E-Mails senden möchten.

    // This sample is based off of:
    // https://github.com/sendgrid/sendgrid-nodejs/tree/master/packages/mail
    const sendgrid = require('@sendgrid/mail');
    sendgrid.setApiKey(process.env.SENDGRID_API_KEY || '<your-sendgrid-api-key>');
    
    async function sendgridExample() {
      await sendgrid.send({
        to: 'to_email@example.com',
        from: 'from_email@example.com',
        subject: 'Sendgrid test email from Node.js on Google Cloud Platform',
        text:
          'Well hello! This is a Sendgrid test email from Node.js on Google Cloud Platform.',
      });
    }
    sendgridExample();

  10. Führen Sie das Programm aus, um über SendGrid eine E-Mail-Nachricht zu senden:

    node sendmail.js
    

Bereinigen

So vermeiden Sie, dass Ihr Google Cloud Platform-Konto für die in dieser Anleitung genutzten Ressourcen unnötig mit Gebühren belastet wird:

Projekt löschen

Am einfachsten vermeiden Sie weitere Kosten durch Löschen des für die Anleitung erstellten Projekts.

So löschen Sie das Projekt:

  1. Rufen Sie in der GCP Console die Seite Ressourcen verwalten auf.

    Zur Seite "Ressourcen verwalten"

  2. Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie auf Löschen .
  3. Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Beenden, um das Projekt zu löschen.

Compute Engine-Instanz löschen

So löschen Sie eine Compute Engine-Instanz:

  1. Wechseln Sie in der GCP Console zur Seite VM-Instanzen.

    Zur Seite "VM-Instanzen"

  2. Klicken Sie auf das Kästchen für Ihre sendgrid-tutorial-Instanz.
  3. Klicken Sie auf Löschen , um die Instanz zu löschen.

Weitere Informationen

Weitere Google Cloud Platform-Funktionen testen: Anleitungen