Aspose.Email  für C++

E-Mail senden C++

So verwenden Sie C++ und SMTP, um E-Mails mit Anhang oder iCalendar zu senden

  Kostenlose Testversion herunter laden

In der Regel wird das SMTP-Protokoll zum Senden von E-Mail-Nachrichten verwendet. Sie benötigen Zugriff auf einen SMTP-Server, um eine Nachricht senden zu können. Sie müssen die Adresse des SMTP-Servers im Netzwerk ermitteln, den Port und die Art der Verschlüsselung sowie die Anmelde- und Autorisierungsmethode ermitteln. Bei einigen E-Mail-Anbietern müssen Sie auch den Zugriff auf den SMTP-Server in Ihren Kontoeinstellungen aktivieren. Wenn Sie mit der Implementierung der OAuth-Autorisierung in Ihrer Software nicht vertraut sind, können Sie auch versuchen, in Ihren Kontoeinstellungen ein separates Passwort für die Anwendung zu erstellen.

Wenn Sie also alle Vorarbeiten erledigt haben, ist es an der Zeit, mit dem Senden von Nachrichten zu beginnen. Sie können dafür die Bibliothek Aspose.Email für C++ verwenden. Betrachten Sie das einfachste Beispiel:

auto smtpClient = MakeObject<SmtpClient>(u"smtp.gmail.com", u"login", u"password", SecurityOptions::SSLAuto);
smtpClient->Send(u"login@gmail.com", u"to@gmail.com", u"subject", u"body");

Verwenden Sie diese Option, wenn Sie eine einfache Text-E-Mail senden möchten.

E-Mail mit Anhängen mit C++ senden

Wenn Sie eine komplexe E-Mail-Nachricht mit C++ senden müssen, ist die MailMessage-Klasse auf jeden Fall nützlich. Um beispielsweise eine Nachricht zu senden, die der vorherigen ähnelt:

auto message = MakeObject<MailMessage>(u"login@gmail.com", u"to@aspose.com", u"subject", u"body");
smtpClient->Send(message);

Die MailMessage-Klasse ist ein großartiges Tool. Sie ermöglicht das Senden von Nachrichten, die in den Dateiformaten EML und MSG (Outlook Message Format) gespeichert sind. Sie können dieses Format auch verwenden, um Anlagen oder sogar iCalendar-Objekte zu senden, um die Teilnahme einzurichten oder zu bestätigen. Mit MailMessage können Sie Ihre Empfängerliste, Cc- und Bcc-Empfänger, verfeinern. Sie können eine E-Mail mit HTML-Markup senden. Sie können die Nachricht auch vor dem Senden mit verschiedenen Flags markieren, Metadaten hinzufügen, verschlüsseln usw.

Warum wählen die Leute Aspose.Email für C++ zum Senden von E-Mails?

Ja, Aspose.Email für C++ ist nicht nur ein Programm zum Senden von E-Mail-Nachrichten. Dies ist eine umfassende Lösung, die umfassende Unterstützung für eine Vielzahl von Aufgaben im Zusammenhang mit dem Senden, Empfangen, Speichern und Verarbeiten von E-Mails bietet. Und Sie können sicher sein, dass Sie bei der Ausführung dieser Aufgaben nicht auf die Einschränkungen der Bibliothek stoßen. Wir beschäftigen uns seit vielen Jahren mit diesem Thema und erweitern ständig seine Funktionalität.

Sie sind wahrscheinlich auf kleine Bibliotheken gestoßen, die vor relativ kurzer Zeit erschienen sind. Sie lösen einfach und natürlich ein einfaches Problem, mit dem viele Benutzer konfrontiert sind. Aber sobald Sie ein wenig zur Seite treten, stellen Sie fest, dass Sie durch die weitere Verwendung dieses unprätentiösen Geräts gezwungen sind, ständig Krücken abzuzäunen, einige Module, um Bibliotheksbeschränkungen zu umgehen, Adapter, mit denen Sie sich mit Ihrer kleinen Bibliothek mit einer anderen kleinen Bibliothek anfreunden usw. Und jetzt ist Ihre kleine raffinierte Lösung nicht mehr so raffiniert. Außerdem schickst du es an den Server, wo es sich regelmäßig und konsequent selbst ins Knie schießt, weil vor dir noch niemand einen solchen Zoo an Krücken und Integrationen getestet hat. Und egal wie sehr du dich bemühst, früher oder später wirst du immer noch auf die Grenzen dieser Bibliothek stoßen. Und du musst nach etwas Neuem suchen. Wenn es also um die Arbeit mit E-Mail geht, sollten Sie Aspose.Email für C++ in Betracht ziehen!

Wir bieten Ihnen nicht nur einen Client für die Arbeit mit SMTP. Erstens ist es bei weitem nicht das einzige Protokoll zum Senden von E-Mails mit C++. Mit unserem Produkt können Sie E-Mails mit Exchange EWS und Microsoft Graph versenden!

In diesem Artikel haben wir Sie bereits über die Möglichkeiten von MailMessage informiert. Dies ist jedoch bei weitem nicht das einzige Tool zur Vorbereitung von Briefen für den Versand. Sie können:

  • Generieren Sie Briefe aus einer Vorlage mit TemplateEngine;
  • entpacken Sie Container mit Buchstaben dank der Unterstützung der Formate OST, PST und MBOX;
  • Laden Sie Briefe aus dem Postfach herunter, indem Sie die Protokolle IMAP, POP3, Exchange EWS und WebDAV sowie Microsoft Graph unterstützen.
  • konvertiert E-Mails von einem Format in ein anderes.

Mit dem Exchange EWS-Protokoll können Sie problemlos einen Brief empfangen. Es wird im MAPI-Format sein. Sie können es jedoch problemlos in das EML-Format konvertieren, sodass Sie es später über das SMTP-Protokoll senden können. Gleichzeitig können Sie die Liste der Empfänger oder den Absender des Briefes jederzeit ändern.

Wie funktioniert das Senden einer E-Mail mit C++ und SMTP?

SMTP-Konfiguration

In dem Moment, in dem Sie eine Instanz der SmtpClient-Klasse erstellen, passiert nichts Besonderes. Sie geben einfach die Anzahl der Einstellungen an, mit denen Sie in Zukunft eine Verbindung zu einem SMTP-Server herstellen können, um Nachrichten zu senden. Die ganze Magie passiert beim ersten Anruf beim send Methode. Was passiert in diesem Moment?

Tatsächlich hängt alles davon ab, welche Einstellungen Sie angegeben haben. Lassen Sie uns mehrere Optionen in Betracht ziehen. Nehmen wir an, Sie haben den Serverhost angegeben, aber nicht den Port und den Verschlüsselungstyp angegeben. In diesem Fall wird der Mechanismus der automatischen Auswahl der Einstellungen gestartet. Dieser Mechanismus besteht aus aufeinanderfolgenden Versuchen, über Standardports und die entsprechenden Verschlüsselungsalgorithmen eine Verbindung zum SMTP-Server herzustellen. Zunächst wird versucht, über einen verschlüsselten Kanal eine Verbindung zum Server herzustellen. Wenn dies jedoch fehlschlägt, versucht der Mechanismus, eine unverschlüsselte Verbindung herzustellen. Wenn Sie die unverschlüsselte Version des Protokolls nicht verwenden möchten, geben Sie den SecurityOptions.SSL_AUTO Einstellung. Mit dieser Einstellung können Sie auch Servereinstellungen auswählen, es werden jedoch nur verschlüsselte Kanäle überprüft.

Konnte eine Verbindung mit dem Server hergestellt werden, wird ein Autorisierungsversuch unternommen. Schlägt die Autorisierung fehl, wird der Fehlercode für die Zukunft gespeichert. Der Matcher wird versuchen, auf andere Weise eine Verbindung herzustellen. Die Nachricht wird gesendet, wenn Sie eine Verbindung herstellen und sich anmelden können. Wenn die Verbindung fehlschlägt, erhält der Benutzer einen Autorisierungsfehlercode (falls einer bei der Auswahl gespeichert wurde). So kann der Benutzer verstehen, dass er das falsche Passwort eingegeben oder einen anderen Fehler gemacht hat. Wenn keine der Optionen für Ports und Verschlüsselungstypen passt und wir nicht einmal zum Autorisierungsversuch gekommen sind, erhält der Benutzer eine Fehlermeldung, die über falsche Servereinstellungen informiert.

Übrigens sollte beachtet werden, dass unser SMTPClient (wie alle anderen Clients unserer Bibliothek) über einen Proxy eine Verbindung zum SMTP-Server herstellen kann. Sie können die Proxy-Servereinstellungen auch während der Initialisierung angeben.

SMTP-Client-Autorisierung

SmtpClient unterstützt mehr als nur verschiedene Verbindungsmethoden. Es unterstützt auch verschiedene Autorisierungsmethoden. Sie können beispielsweise den OAuth-Mechanismus verwenden. Dazu stellen wir mehrere Tools gleichzeitig zur Verfügung.

Zuallererst ist es TokenProvider. Dies ist die Klasse, die alle notwendigen Daten zum Speichern und Aktualisieren des OAuth-Tokens enthält. In diesem Fall müssen Sie die OAuth-Autorisierung selbst durchführen und alle erforderlichen Informationen speichern, die Sie vom OAuth-Server erhalten haben. RefreshToken spielt hier eine Schlüsselrolle. Dies ist ein zusätzliches Token, das vom Autorisierungsserver zusammen mit AccessToken ausgestellt wird. Ihr Unterschied besteht darin, dass AccessToken in der Regel nur für einen bestimmten Zeitraum gültig ist. Wohingegen RefreshToken viel länger oder sogar unbegrenzt gültig ist (bis der Benutzer es widerruft). Dank RefreshToken kann die TokenProvider-Klasse ein AccessToken jederzeit aktualisieren, wenn dieses nicht mehr gültig ist.

Eine weitere Option ist die ITokenProvider-Schnittstelle. In diesem Fall können Sie den OAuth-Mechanismus nicht nur selbst implementieren, sondern ihn auch an den SmtpClient übergeben, sodass er ihn bei Bedarf selbst verwendet.

Es ist zu beachten, dass der OAuth-Mechanismus nicht immer erforderlich ist. Manchmal ist es viel einfacher, sich mit einem Benutzernamen und einem Passwort anzumelden. Und dafür müssen Sie Ihr E-Mail-Konto überhaupt nicht neu konfigurieren, die Zwei-Faktor-Autorisierung verweigern usw. Es gibt eine sicherere Lösung - dies ist ein separates Passwort für die Anwendung. Um diese Funktion nutzen zu können, sollten Sie sich die Einstellungen Ihres E-Mail-Kontos ansehen. Höchstwahrscheinlich wird das Passwort für die Anwendung automatisch generiert, wenn Sie es in Ihrem Konto einrichten. Vergiss nicht, es irgendwo zu speichern. Wir empfehlen außerdem, die Berechtigungen Ihrer Anwendung während der Konfiguration so weit wie möglich einzuschränken. Wenn ein Angreifer Zugriff auf dieses Passwort erhält, kann er sich Ihr Konto natürlich nicht aneignen, aber er kann trotzdem viele unangenehme Dinge tun. Und hier können Sie nichts tun, denn das Passwort ist das einzige, was Ihre Daten vor Eindringlingen schützt. Im Allgemeinen ist das Tool sehr praktisch, verringert jedoch die Sicherheit Ihres Kontos. Verwenden Sie es auf eigenes Risiko.

Senden von E-Mails über SMTP mit C++

Die Verbindung zum Server ist also hergestellt und die Autorisierung war erfolgreich. Es ist Zeit, Briefe zu schicken. Zum Senden wird ein Objekt der MailMessage-Klasse verwendet. Technisch gesehen können Sie einfach alle notwendigen Daten an die Sendemethode übergeben. Tatsächlich werden sie jedoch weiterhin im MailMessage-Objekt gesammelt. Dank der Fähigkeit der MailMessage-Klasse, in das EML-Format zu serialisieren, erhalten wir außerdem den erforderlichen Datenstrom, der an unseren SMTP-Server übergeben werden kann. Daher geben wir dem Server den Befehl, einen Brief zu senden und den gesamten Inhalt des Briefes in Form von Textdaten an ihn zu übertragen. Wenn Binärdaten in dem Brief übertragen werden, z. B. in Form von angehängten Dateien, werden diese Daten im Base64-Format codiert, und die Metadaten des Briefes weisen darauf hin, dass der Empfänger sie erneut dekodieren muss. Der SMTP-Server kann die Richtigkeit der empfangenen Nachricht überprüfen (z. B. das FROM-Feld mit dem Konto des Absenders auf dem Server überprüfen) und die Metadaten der Nachricht nach eigenem Ermessen ergänzen. Anschließend sendet der Server die E-Mail an die Empfänger. Eine Liste dieser Empfänger wird ebenfalls aus den Metadaten der E-Mail abgerufen.