Senden von E-Mail-Anhängen mit Twilio SendGrid und Python

November 27, 2019
Autor:in:

Senden von E-Mail-Anhängen mit Twilio SendGrid und Python


Hallo und Danke fürs Lesen! Dieser Blogpost ist eine Übersetzung von Sending Email Attachments with Twilio SendGrid and Python. Während wir unsere Übersetzungsprozesse verbessern, würden wir uns über Dein Feedback an help@twilio.com freuen, solltest Du etwas bemerken, was falsch übersetzt wurde. Wir bedanken uns für hilfreiche Beiträge mit Twilio Swag :)

Du versendest E-Mails über deine Python-App mit der Twilio SendGrid-API und möchtest Dateien an deine E-Mails anhängen? Mit der Twilio SendGrid-API ist das Senden von E-Mail-Anhängen ein Kinderspiel. In diesem Blog fügen wir ein PDF-Dokument an eine E-Mail an, die über SendGrid gesendet wird. Wenn du bislang noch keine E-Mails mit SendGrid versendet hast, empfehle ich dir den Post, den mein Kollege Sam dazu verfasst hat. Wir setzen an der Stelle an, an der dieser Post endet.

Voraussetzungen

Bevor wir beginnen, benötigen wir Folgendes:

Einrichtung

Falls noch nicht getan, musst du dich für ein kostenloses SendGrid-Konto registrieren. Für dieses Tutorial ist die kostenlose Option ausreichend. Nachdem wir unser Konto eingerichtet haben, erstellen wir einen API-Schlüssel. Wir können ihm einen beliebigen Namen geben, aber wir brauchen ihn später noch.

API-Schlüssel mit Twilio SendGrid erstellen

Das Ganze sollte so aussehen.

API-Schlüssel mit Twilio SendGrid erstellt

Eine gute Idee ist es, diesen API-Schlüssel beim Speichern als Umgebungsvariable festzulegen, auf die wir über unseren Python-Code zugreifen können. Dadurch vermeiden wir, ihn direkt in unseren Code schreiben zu müssen. Wir legen den Wert der Umgebungsvariablen SENDGRID_API_KEY auf den API-Schlüssel unseres SendGrid-Kontos fest. In diesem Tutorial wird anschaulich beschrieben, wie Umgebungsvariablen festgelegt werden. Davon machen wir später noch Gebrauch.

Virtuelle Umgebung

Du kannst den Code aus diesem Post in einer isolierten Python-Umgebung ausführen. Wenn du nicht genau weißt, was eine virtuelle Umgebung ist, dann hilft dir dieser Post zu virtuellen Umgebungen garantiert weiter. So richtest du das Ganze ein.

Installiere zuerst das virtualenv-Paket und führe den folgenden Befehl aus:

virtualenv emails

Aktiviere dann die virtuelle Umgebung:

source ./emails/bin/activate

Installiere SendGrid Python-Hilfebibliothek in virtualenv:

pip install sendgrid

Senden von E-Mails

Wir setzen an der Stelle an, an der der Blogpost meines Kollegen endet, und senden eine E-Mail. Wir sollten eine send_email.py-Datei haben, die in etwa so aussieht:

import os
from sendgrid import SendGridAPIClient
from sendgrid.helpers.mail import Mail

message = Mail(
    from_email='from_email@example.com',
    to_emails='to@example.com',
    subject='Sending with Twilio SendGrid is Fun',
    html_content='<strong>and easy to do anywhere, even with Python</strong>')

sg = SendGridAPIClient(os.environ.get('SENDGRID_API_KEY'))
response = sg.send(message)
print(response.status_code, response.body, response.headers)

Wir verwenden das Python base64-Modul, um unsere Datei zu lesen und als base64-Zeichenfolge zu codieren. Ich habe die fiktive Datei attachment.pdf verwendet. Wir müssen also sicherstellen, dass wir den Namen der Datei durch ein Dokument ersetzen, das wir im selben Ordner wie die send_email.py-Datei gespeichert haben.

Wir erstellen einen Anhang mit den Twilio SendGrid-Hilfebibliotheken. Starten wir mit einer einzelnen attachment.pdf.

import os
import base64

from sendgrid import SendGridAPIClient
from sendgrid.helpers.mail import (Mail, Attachment, FileContent, FileName, FileType, Disposition)


message = Mail(
    from_email='from_email@example.com',
    to_emails='to@example.com',
    subject='Sending with Twilio SendGrid is Fun',
    html_content='<strong>and easy to do anywhere, even with Python</strong>'
)

with open('attachment.pdf', 'rb') as f:
    data = f.read()
    f.close()
encoded_file = base64.b64encode(data).decode()

attachedFile = Attachment(
    FileContent(encoded_file),
    FileName('attachment.pdf'),
    FileType('application/pdf'),
    Disposition('attachment')
)
message.attachment = attachedFile

sg = SendGridAPIClient(os.environ.get('SENDGRID_API_KEY'))
response = sg.send(message)
print(response.status_code, response.body, response.headers)

Bevor wir diesen Code ausführen, müssen wir sicherstellen, dass wir die Umgebungsvariable SENDGRID_API_KEY festgelegt haben. Außerdem müssen wir noch den Wert to_emails durch unsere eigene E-Mail-Adresse ersetzen, damit wir überprüfen können, ob unser Code auch ordnungsgemäß funktioniert.

Schließlich speichern wir unseren Code und führen im Terminal den folgenden Befehl aus, um eine E-Mail an uns selbst zu senden:

python send_email.py

Wenn wir jetzt in unserem Posteingang nachsehen, sollten wir in etwa Folgendes sehen.

E-Mail mit Anhang im Posteingang

Zusammenfassung

Jetzt wissen wir, wie wir E-Mails mit Anhängen über Twilio SendGrid senden, aber die API bietet noch so viel mehr Möglichkeiten. In der Dokumentation zu SendGrid findest du jede Menge weitere nützliche Funktionen und Verwendungen.

Ich freue mich immer über Fragen und würde gern erfahren, was du mit Twilio entwickelst. Ich bin gespannt.

  • Twitter: @ChatterboxCoder
  • Instagram: @ChatterboxCoder
  • E-Mail: nokenwa@twilio.com