Erreichen

Grow

Manage

Automate

Erreichen

Grow

Manage

Automate

S/MIME Teil 4: Empfänger-Öffentlich-Schlüssel einfach sammeln – mit SparkPost Inbound Relay Webhooks

E-Mail

1 min read

S/MIME Teil 4: Empfänger-Öffentlich-Schlüssel einfach sammeln – mit SparkPost Inbound Relay Webhooks

E-Mail

1 min read

S/MIME Teil 4: Empfänger-Öffentlich-Schlüssel einfach sammeln – mit SparkPost Inbound Relay Webhooks

In dieser Reihe haben wir gesehen, dass das Hinzufügen einer S/MIME-Signatur ziemlich unkompliziert ist. Das Senden von S/MIME-verschlüsselten E-Mails ist komplexer, da Sie die öffentlichen Schlüssel der Empfänger benötigen. Es ist eine Sache, wenn Sie einen E-Mail-Client für Menschen wie Thunderbird verwenden – aber wie kann das mit von Anwendungen generierten E-Mail-Streams funktionieren?

In Teil 1 hatten wir eine kurze Tour durch S/MIME, bei der wir die Signierung und Verschlüsselung unserer Nachrichtenströme über eine Reihe von Mail-Clients betrachteten. Teil 2 führte uns durch ein einfaches Befehlszeilenwerkzeug zur Signierung und Verschlüsselung von E-Mails, die dann über SparkPost gesendet werden. Teil 3 zeigte, wie man sichere Mailströme in lokale Plattformen wie Port25 PowerMTA und Momentum einspeist.

In dieser Serie haben wir gesehen, dass das Einfügen einer S/MIME-Signatur relativ unkompliziert ist. Das Senden von S/MIME-verschlüsselten Mails ist komplizierter, weil man die öffentlichen Schlüssel der Empfänger erhalten muss. Das ist eine Sache, wenn man einen Mail-Client für Menschen wie Thunderbird benutzt – aber wie funktioniert das mit app-generierten E-Mail-Strömen?

Aber warten Sie – es gibt einen anderen Weg nach Mordor, um diese Schlüssel zu bekommen. Ihr Dienst kann Ihre Kunden (natürlich per E-Mail) einladen, Ihnen eine signierte Mail an eine bekannte Kundenservice-Adresse zu senden. Mit den magischen Kräften der SparkPost Inbound Relay Webhooks werden wir diesen öffentlichen Schlüssel extrahieren und speichern, damit Sie ihn verwenden können.

Wir können dies in einem einfachen Anwendungsfall zusammenfassen:

  • Als Empfänger von Nachrichten gebe ich Ihrem Dienst meine persönliche E-Mail-Signatur per E-Mail, damit mir in Zukunft E-Mails in S/MIME-verschlüsselter Form gesendet werden können.

Daraus lassen sich einige detailliertere Anforderungen ableiten:

  • Wir benötigen einen immer aktiven, zuverlässigen Eingangs-E-Mail-Dienst, um die signierten E-Mails zu empfangen.

  • Es sollte keine besonderen Anforderungen an das Mail-Format geben, außer dass es eine S/MIME-Signatur tragen sollte.

  • Da jeder versuchen kann, eine Mail an diesen Dienst zu senden, sollte er defensiv gestaltet sein, beispielsweise um „Spoof“-Nachrichten von schlechten Akteuren abzulehnen. Es werden mehrere Schichten von Prüfungen erforderlich sein.

  • Wenn alles in Ordnung ist, speichert der Dienst das Zertifikat in einer Datei im bekannten Klartextformat Privacy-Enhanced Mail (PEM).

Es gibt einige nicht-funktionale Anforderungen:

  • Maschine-zu-Maschine-Webhook-Dienste können schwer zu durchschauen sein, einfach nur aus den Antworten darauf, was intern vor sich geht. Der Dienst sollte umfangreiche, für Menschen lesbare Protokolle auf Anwendungsebene bereitstellen. Insbesondere die Zertifikatsanalyse und -überprüfung sollte protokolliert werden.

  • Wir fügen Testfälle für die App-Interna hinzu, verwenden das nette Pytest-Framework und führen diese Tests automatisch beim Einchecken mit Travis CI-Integration mit GitHub aus.

OK – lassen Sie uns anfangen!

1. Lösung Überblick

Hier ist, wie die Gesamtlösung aussehen wird.

Diagram depicting a secure email flow illustrating how emails are verified using certificates for secure transmission.

2. Installieren, Konfigurieren und Starten der Web-App

Wir beginnen mit diesem Teil, damit wir ihn vollständig testen können, bevor wir die eingehenden Relay-Webhooks einrichten.

Die Web-App ist im selben GitHub-Projekt enthalten wie die Teile 1 – 3, also wenn Sie diesen Teilen gefolgt sind, haben Sie sie bereits. Hier sind die neuen Teile:

  • Programm readSMIMEsig.py – E-Mail lesen und Zwischen- sowie Benutzerzertifikate herausfiltern.

  • Programm webapp.py – einfache Flask-kompatible Webanwendung für die Verwendung mit SparkPost Inbound Relay Webhooks.

  • webapp.ini – Konfigurationsdatei für das Obige. Eine Konfigurationsdatei ermöglicht es, dieselben Werte auf einfache Weise sowohl an Befehlszeilen- als auch an Webanwendungen zu übergeben.

Sie müssen sicherstellen, dass Ihr Host die richtige TCP-Portnummer für eingehende Anfragen aus der Außenwelt geöffnet hat, damit SparkPost Nachrichten an Ihre App senden kann. Wenn Sie beispielsweise auf AWS EC2 gehostet sind, müssen Sie die Security Group Ihrer Instanz konfigurieren.

Anweisungen zum Konfigurieren und Starten der Web-App finden Sie hier – es ist ziemlich einfach. Um zu überprüfen, ob Ihre App läuft und von außen zugänglich ist, können Sie beispielsweise von einem anderen Host aus (leere) Anfragen mit curl senden:

curl -X POST https://app.trymsys.net:8855/

Sie sollten eine Antwort wie diese sehen:

{"message":"Unbekannter Content-Type in den Anfrage-Headern"}

Das ist eine gute Sache – Ihre App läuft!

In webapp.log auf Ihrem Host sehen Sie eine Ausgabe, die dieser ähnelt:

2019-01-15 00:11:07,575,root,INFO,Anfrage von 38.96.5.10,scheme=https,path=/ 2019-01-15 00:11:07,575,root,INFO,| len(headers)=3,len(body)=None 2019-01-15 00:11:07,575,root,INFO,| Unbekannter Content-Type: None

Um Ihnen zu helfen, sofort mit echten Daten in Ihrer App zu arbeiten, können Sie diese spezifische Postman-Anfrage aus dem Projekt-Repo importieren. Dies simuliert, was Ihr SparkPost-Konto tun wird, d.h. es sendet einen https POST, der eine E-Mail mit einem spezifischen, gültigen Zertifikat (das einem meiner Testkonten gehört) an Ihre App enthält.

Sie müssen nur die Zieladresse in der Anfrage (im obigen grauen Kasten) ändern, um Ihre Installation anzupassen. Wenn Sie den Token-Wert in webapp.ini geändert haben, passen Sie den Header-Wert in Postman entsprechend an.

Wenn Ihre App funktioniert, sehen Sie eine „200 OK“-Antwort in Postman. Ihre Host-webapp.log-Datei enthält eine Ausgabe wie diese:

2019-01-15 00:11:48,554,root,INFO,Anfrage von 38.96.5.10,scheme=https,path=/ 2019-01-15 00:11:48,554,root,INFO,| len(headers)=10,len(body)=14778 2019-01-15 00:11:48,555,root,INFO,| msg_from=bob.lumreeker@gmail.com,rcpt_to=secureme@inbound.thetucks.com,len(email_rfc822)=9223 2019-01-15 00:11:48,599,root,INFO,| from=bob.lumreeker@gmail.com,DKIM bestanden 2019-01-15 00:11:48,600,root,INFO,| content-type=multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-256; boundary="------------ms010908020707040304020406",content-description=None 2019-01-15 00:11:48,600,root,INFO,| content-type=text/plain; charset=utf-8; format=flowed,content-description=None 2019-01-15 00:11:48,600,root,INFO,| content-type=application/pkcs7-signature; name="smime.p7s",content-description=S/MIME Kryptografische Signatur 2019-01-15 00:11:48,600,root,INFO,| filename=smime.p7s,bytes=3998 2019-01-15 00:11:48,601,root,INFO,| Zertifikat: subject email_address=['bob.lumreeker@gmail.com'],not_valid_before=2018-10-03 00:00:00,not_valid_after=2019-10-03 23:59:59,hash_algorithm=sha256,key_size=2048 bytes, issuer={'countryName': 'GB', 'stateOrProvinceName': 'Greater Manchester', 'localityName': 'Salford', 'organizationName': 'COMODO CA Limited', 'commonName': 'COMODO RSA Client Authentication and Secure Email CA'} 2019-01-15 00:11:48,602,root,INFO,| Zertifikat: subject email_address=[],not_valid_before=2013-01-10 00:00:00,not_valid_after=2028-01-09 23:59:59,hash_algorithm=sha384,key_size=2048 bytes, issuer={'countryName': 'GB', 'stateOrProvinceName': 'Greater Manchester', 'localityName': 'Salford', 'organizationName': 'COMODO CA Limited', 'commonName': 'COMODO RSA Certification Authority'} 2019-01-15 00:11:48,616,root,INFO,| geschriebene Datei ./bob.lumreeker@gmail.com.crt,bytes=1870,ok=True

Für einen schnellen Check sehen Sie sich die letzte Zeile an – wenn sie „geschriebene Datei“ sagt, dann sind Sie gut. Der Rest zeigt den DKIM-Check und den Zertifikatsvalidierungsprozess.

Wir beginnen mit diesem Teil, damit wir ihn vollständig testen können, bevor wir die eingehenden Relay-Webhooks einrichten.

Die Web-App ist im selben GitHub-Projekt enthalten wie die Teile 1 – 3, also wenn Sie diesen Teilen gefolgt sind, haben Sie sie bereits. Hier sind die neuen Teile:

  • Programm readSMIMEsig.py – E-Mail lesen und Zwischen- sowie Benutzerzertifikate herausfiltern.

  • Programm webapp.py – einfache Flask-kompatible Webanwendung für die Verwendung mit SparkPost Inbound Relay Webhooks.

  • webapp.ini – Konfigurationsdatei für das Obige. Eine Konfigurationsdatei ermöglicht es, dieselben Werte auf einfache Weise sowohl an Befehlszeilen- als auch an Webanwendungen zu übergeben.

Sie müssen sicherstellen, dass Ihr Host die richtige TCP-Portnummer für eingehende Anfragen aus der Außenwelt geöffnet hat, damit SparkPost Nachrichten an Ihre App senden kann. Wenn Sie beispielsweise auf AWS EC2 gehostet sind, müssen Sie die Security Group Ihrer Instanz konfigurieren.

Anweisungen zum Konfigurieren und Starten der Web-App finden Sie hier – es ist ziemlich einfach. Um zu überprüfen, ob Ihre App läuft und von außen zugänglich ist, können Sie beispielsweise von einem anderen Host aus (leere) Anfragen mit curl senden:

curl -X POST https://app.trymsys.net:8855/

Sie sollten eine Antwort wie diese sehen:

{"message":"Unbekannter Content-Type in den Anfrage-Headern"}

Das ist eine gute Sache – Ihre App läuft!

In webapp.log auf Ihrem Host sehen Sie eine Ausgabe, die dieser ähnelt:

2019-01-15 00:11:07,575,root,INFO,Anfrage von 38.96.5.10,scheme=https,path=/ 2019-01-15 00:11:07,575,root,INFO,| len(headers)=3,len(body)=None 2019-01-15 00:11:07,575,root,INFO,| Unbekannter Content-Type: None

Um Ihnen zu helfen, sofort mit echten Daten in Ihrer App zu arbeiten, können Sie diese spezifische Postman-Anfrage aus dem Projekt-Repo importieren. Dies simuliert, was Ihr SparkPost-Konto tun wird, d.h. es sendet einen https POST, der eine E-Mail mit einem spezifischen, gültigen Zertifikat (das einem meiner Testkonten gehört) an Ihre App enthält.

Sie müssen nur die Zieladresse in der Anfrage (im obigen grauen Kasten) ändern, um Ihre Installation anzupassen. Wenn Sie den Token-Wert in webapp.ini geändert haben, passen Sie den Header-Wert in Postman entsprechend an.

Wenn Ihre App funktioniert, sehen Sie eine „200 OK“-Antwort in Postman. Ihre Host-webapp.log-Datei enthält eine Ausgabe wie diese:

2019-01-15 00:11:48,554,root,INFO,Anfrage von 38.96.5.10,scheme=https,path=/ 2019-01-15 00:11:48,554,root,INFO,| len(headers)=10,len(body)=14778 2019-01-15 00:11:48,555,root,INFO,| msg_from=bob.lumreeker@gmail.com,rcpt_to=secureme@inbound.thetucks.com,len(email_rfc822)=9223 2019-01-15 00:11:48,599,root,INFO,| from=bob.lumreeker@gmail.com,DKIM bestanden 2019-01-15 00:11:48,600,root,INFO,| content-type=multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-256; boundary="------------ms010908020707040304020406",content-description=None 2019-01-15 00:11:48,600,root,INFO,| content-type=text/plain; charset=utf-8; format=flowed,content-description=None 2019-01-15 00:11:48,600,root,INFO,| content-type=application/pkcs7-signature; name="smime.p7s",content-description=S/MIME Kryptografische Signatur 2019-01-15 00:11:48,600,root,INFO,| filename=smime.p7s,bytes=3998 2019-01-15 00:11:48,601,root,INFO,| Zertifikat: subject email_address=['bob.lumreeker@gmail.com'],not_valid_before=2018-10-03 00:00:00,not_valid_after=2019-10-03 23:59:59,hash_algorithm=sha256,key_size=2048 bytes, issuer={'countryName': 'GB', 'stateOrProvinceName': 'Greater Manchester', 'localityName': 'Salford', 'organizationName': 'COMODO CA Limited', 'commonName': 'COMODO RSA Client Authentication and Secure Email CA'} 2019-01-15 00:11:48,602,root,INFO,| Zertifikat: subject email_address=[],not_valid_before=2013-01-10 00:00:00,not_valid_after=2028-01-09 23:59:59,hash_algorithm=sha384,key_size=2048 bytes, issuer={'countryName': 'GB', 'stateOrProvinceName': 'Greater Manchester', 'localityName': 'Salford', 'organizationName': 'COMODO CA Limited', 'commonName': 'COMODO RSA Certification Authority'} 2019-01-15 00:11:48,616,root,INFO,| geschriebene Datei ./bob.lumreeker@gmail.com.crt,bytes=1870,ok=True

Für einen schnellen Check sehen Sie sich die letzte Zeile an – wenn sie „geschriebene Datei“ sagt, dann sind Sie gut. Der Rest zeigt den DKIM-Check und den Zertifikatsvalidierungsprozess.

Wir beginnen mit diesem Teil, damit wir ihn vollständig testen können, bevor wir die eingehenden Relay-Webhooks einrichten.

Die Web-App ist im selben GitHub-Projekt enthalten wie die Teile 1 – 3, also wenn Sie diesen Teilen gefolgt sind, haben Sie sie bereits. Hier sind die neuen Teile:

  • Programm readSMIMEsig.py – E-Mail lesen und Zwischen- sowie Benutzerzertifikate herausfiltern.

  • Programm webapp.py – einfache Flask-kompatible Webanwendung für die Verwendung mit SparkPost Inbound Relay Webhooks.

  • webapp.ini – Konfigurationsdatei für das Obige. Eine Konfigurationsdatei ermöglicht es, dieselben Werte auf einfache Weise sowohl an Befehlszeilen- als auch an Webanwendungen zu übergeben.

Sie müssen sicherstellen, dass Ihr Host die richtige TCP-Portnummer für eingehende Anfragen aus der Außenwelt geöffnet hat, damit SparkPost Nachrichten an Ihre App senden kann. Wenn Sie beispielsweise auf AWS EC2 gehostet sind, müssen Sie die Security Group Ihrer Instanz konfigurieren.

Anweisungen zum Konfigurieren und Starten der Web-App finden Sie hier – es ist ziemlich einfach. Um zu überprüfen, ob Ihre App läuft und von außen zugänglich ist, können Sie beispielsweise von einem anderen Host aus (leere) Anfragen mit curl senden:

curl -X POST https://app.trymsys.net:8855/

Sie sollten eine Antwort wie diese sehen:

{"message":"Unbekannter Content-Type in den Anfrage-Headern"}

Das ist eine gute Sache – Ihre App läuft!

In webapp.log auf Ihrem Host sehen Sie eine Ausgabe, die dieser ähnelt:

2019-01-15 00:11:07,575,root,INFO,Anfrage von 38.96.5.10,scheme=https,path=/ 2019-01-15 00:11:07,575,root,INFO,| len(headers)=3,len(body)=None 2019-01-15 00:11:07,575,root,INFO,| Unbekannter Content-Type: None

Um Ihnen zu helfen, sofort mit echten Daten in Ihrer App zu arbeiten, können Sie diese spezifische Postman-Anfrage aus dem Projekt-Repo importieren. Dies simuliert, was Ihr SparkPost-Konto tun wird, d.h. es sendet einen https POST, der eine E-Mail mit einem spezifischen, gültigen Zertifikat (das einem meiner Testkonten gehört) an Ihre App enthält.

Sie müssen nur die Zieladresse in der Anfrage (im obigen grauen Kasten) ändern, um Ihre Installation anzupassen. Wenn Sie den Token-Wert in webapp.ini geändert haben, passen Sie den Header-Wert in Postman entsprechend an.

Wenn Ihre App funktioniert, sehen Sie eine „200 OK“-Antwort in Postman. Ihre Host-webapp.log-Datei enthält eine Ausgabe wie diese:

2019-01-15 00:11:48,554,root,INFO,Anfrage von 38.96.5.10,scheme=https,path=/ 2019-01-15 00:11:48,554,root,INFO,| len(headers)=10,len(body)=14778 2019-01-15 00:11:48,555,root,INFO,| msg_from=bob.lumreeker@gmail.com,rcpt_to=secureme@inbound.thetucks.com,len(email_rfc822)=9223 2019-01-15 00:11:48,599,root,INFO,| from=bob.lumreeker@gmail.com,DKIM bestanden 2019-01-15 00:11:48,600,root,INFO,| content-type=multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-256; boundary="------------ms010908020707040304020406",content-description=None 2019-01-15 00:11:48,600,root,INFO,| content-type=text/plain; charset=utf-8; format=flowed,content-description=None 2019-01-15 00:11:48,600,root,INFO,| content-type=application/pkcs7-signature; name="smime.p7s",content-description=S/MIME Kryptografische Signatur 2019-01-15 00:11:48,600,root,INFO,| filename=smime.p7s,bytes=3998 2019-01-15 00:11:48,601,root,INFO,| Zertifikat: subject email_address=['bob.lumreeker@gmail.com'],not_valid_before=2018-10-03 00:00:00,not_valid_after=2019-10-03 23:59:59,hash_algorithm=sha256,key_size=2048 bytes, issuer={'countryName': 'GB', 'stateOrProvinceName': 'Greater Manchester', 'localityName': 'Salford', 'organizationName': 'COMODO CA Limited', 'commonName': 'COMODO RSA Client Authentication and Secure Email CA'} 2019-01-15 00:11:48,602,root,INFO,| Zertifikat: subject email_address=[],not_valid_before=2013-01-10 00:00:00,not_valid_after=2028-01-09 23:59:59,hash_algorithm=sha384,key_size=2048 bytes, issuer={'countryName': 'GB', 'stateOrProvinceName': 'Greater Manchester', 'localityName': 'Salford', 'organizationName': 'COMODO CA Limited', 'commonName': 'COMODO RSA Certification Authority'} 2019-01-15 00:11:48,616,root,INFO,| geschriebene Datei ./bob.lumreeker@gmail.com.crt,bytes=1870,ok=True

Für einen schnellen Check sehen Sie sich die letzte Zeile an – wenn sie „geschriebene Datei“ sagt, dann sind Sie gut. Der Rest zeigt den DKIM-Check und den Zertifikatsvalidierungsprozess.

3. SparkPost Inbound-Relay-Webhooks-Einrichtung

Zuerst wählen wir eine Domain aus, die wir als Adresse für eingehende Nachrichten verwenden – hier wird es inbound.thetucks.com sein. Richten Sie Ihre Domain entsprechend dieser Anleitung ein. Hier sind die Schritte, die ich im Detail verwendet habe:

3.1 MX-Einträge hinzufügen

Sie benötigen Zugriff auf Ihr spezielles Internet Service Provider-Konto. Wenn dies erledigt ist, können Sie diese mit "dig" überprüfen – hier ist der Befehl für meine Domain.

dig +short MX inbound.thetucks.com

Sie sollten Folgendes sehen:

10 rx3.sparkpostmail.com. 10 rx1.sparkpostmail.com. 10 rx2.sparkpostmail.com.

3.2 Eine eingehende Domain erstellen

Verwenden Sie die SparkPost Postman API-Sammlung und wählen Sie den Inbound Domains / Create .. Aufruf aus. Der Body des POST-Requests enthält Ihre Domain, zum Beispiel:

{    "domain": "inbound.thetucks.com" }

Postman desktop application with an open tab displaying a 'Create an Inbound Domain' API request, featuring fields such as domain input, several header options, and a JSON payload, aimed at testing and automating API workflows.


3.3 Erstellen eines Relay Webhooks

Erstellen Sie einen eingehenden Relay-Webhook mit dem entsprechenden Postman-Aufruf. Der Nachrichtenkörper enthält in meinem Fall:

{ "name": "Certificate Collection Webhook", "target": "https://app.trymsys.net:8855/", "auth_token": "t0p s3cr3t t0k3n", "match": { "protocol": "SMTP", "domain": "inbound.thetucks.com" } }

Wie bereits erwähnt, empfehle ich Ihnen, ein auth_token auf Ihren eigenen geheimen Wert einzustellen, wie im webapp.ini-Dokument auf Ihrem Host festgelegt.

Ihr "target"-Wert muss mit Ihrer Host-Adresse und dem TCP-Port übereinstimmen, auf dem Sie die Web-Anwendung hosten werden.

Ihr "domain"-Wert muss mit Ihren in Schritt 1 eingerichteten MX-Einträgen übereinstimmen.

Postman interface, showing the process of creating a relay webhook with detailed JSON configuration, with sections including request method, parameters, and code snippet.


Das war’s! Die Grundlagen sind erledigt. Sie sollten nun in der Lage sein, Zertifikate an Ihre eingehende Adresse zu senden, sie werden verarbeitet und erscheinen auf Ihrem Webanwendungshost – in diesem Fall eine Datei namens bob.lumreeker@gmail.com.crt.

Sie können jetzt verschlüsselte E-Mails an Bob senden, indem Sie die in den Teilen 2 & 3 dieser Serie beschriebenen Werkzeuge verwenden.

Sie können den Inhalt eines Zertifikats mit folgendem Befehl untersuchen:

openssl x509 -inform PEM -in bob.lumreeker\@gmail.com.crt -text -noout

4. Interna: DKIM-Überprüfung, Zertifikatsvalidierung

Die App überprüft, ob empfangene E-Mails ein gültiges DKIM haben, und prüft, ob die Zertifikate selbst gültig sind, wie hier beschrieben. Dort gibt es auch Implementierungshinweise und Ideen für weitere Arbeiten.

Zusammenfassend…

Wir haben gesehen, wie öffentliche Schlüssel von Empfängern leicht mit einer E-Mail an eine eingehende Relay-Webhook-Adresse gesammelt werden können. Sobald dies getan ist, können diese Empfänger ihre Nachrichten in S/MIME-verschlüsselter Form erhalten.

Das war’s für jetzt! Viel Spaß beim Senden.

Lassen Sie uns Sie mit einem Bird-Experten verbinden.
Erleben Sie die volle Macht des Bird in 30 Minuten.

Durch die Übermittlung stimmen Sie zu, dass Bird Sie bezüglich unserer Produkte und Dienstleistungen kontaktieren darf.

Sie können sich jederzeit abmelden. Weitere Informationen zur Datenverarbeitung finden Sie in Birds Datenschutzerklärung.

Unternehmen

Newsletter

Bleiben Sie mit Bird auf dem Laufenden durch wöchentliche Updates in Ihrem Posteingang.

Lassen Sie uns Sie mit einem Bird-Experten verbinden.
Erleben Sie die volle Macht des Bird in 30 Minuten.

Durch die Übermittlung stimmen Sie zu, dass Bird Sie bezüglich unserer Produkte und Dienstleistungen kontaktieren darf.

Sie können sich jederzeit abmelden. Weitere Informationen zur Datenverarbeitung finden Sie in Birds Datenschutzerklärung.

Unternehmen

Newsletter

Bleiben Sie mit Bird auf dem Laufenden durch wöchentliche Updates in Ihrem Posteingang.

Lassen Sie uns Sie mit einem Bird-Experten verbinden.
Erleben Sie die volle Macht des Bird in 30 Minuten.

Durch die Übermittlung stimmen Sie zu, dass Bird Sie bezüglich unserer Produkte und Dienstleistungen kontaktieren darf.

Sie können sich jederzeit abmelden. Weitere Informationen zur Datenverarbeitung finden Sie in Birds Datenschutzerklärung.

R

Erreichen

G

Grow

M

Manage

A

Automate

Unternehmen

Newsletter

Bleiben Sie mit Bird auf dem Laufenden durch wöchentliche Updates in Ihrem Posteingang.