E‑Mail senden C++
Wie man C++ und SMTP verwendet, um E‑Mails mit Anhang oder iCalendar zu senden
Kostenlose Testversion herunter ladenIn der Regel wird das SMTP‑Protokoll zum Senden von E‑Mail‑Nachrichten verwendet. Sie benötigen Zugriff auf einen SMTP‑Server, um eine Nachricht zu senden. Sie müssen die Adresse des SMTP‑Servers im Netzwerk finden, den Port und die Verschlüsselungsart bestimmen, sowie Anmelde‑ und Autorisierungsmethode festlegen. Einige E‑Mail‑Anbieter verlangen zudem, dass Sie in den Kontoeinstellungen den Zugriff auf den SMTP‑Server aktivieren. Wenn Ihnen die Implementierung von OAuth‑Autorisation im Code unangenehm ist, können Sie stattdessen ein separates Anwendungspasswort in Ihren Kontoeinstellungen erstellen.
Wenn Sie also alle Vorarbeiten erledigt haben, ist es Zeit, Nachrichten zu versenden. Dafür können Sie die Aspose.Email‑Bibliothek für C++ nutzen. 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 in C++ senden
Wenn Sie mit C++ eine komplexe E‑Mail‑Nachricht senden müssen, ist die Klasse MailMessage äußerst nützlich. Beispielsweise, um eine Nachricht ähnlich der vorherigen zu senden:
auto message = MakeObject<MailMessage>(u"login@gmail.com", u"to@aspose.com", u"subject", u"body");
smtpClient->Send(message);
Die Klasse MailMessage ist ein großartiges Werkzeug. Sie ermöglicht das Senden von Nachrichten, die in den Dateiformaten EML und MSG (Outlook Message Format) gespeichert sind. Sie können dieses Format zudem nutzen, um Anhänge oder sogar iCalendar‑Objekte zu senden, um Termine zu vereinbaren oder zu bestätigen. MailMessage erlaubt das feine Abstimmen der Empfängerlisten, Cc‑ und Bcc‑Empfänger. Sie können eine E‑Mail mit HTML‑Markup senden. Außerdem können Sie die Nachricht vor dem Versand mit verschiedenen Flags versehen, Metadaten hinzufügen, sie verschlüsseln usw.
Warum wählen Menschen Aspose.Email für C++ zum Senden von E‑Mails?
Ja, Aspose.Email für C++ ist nicht nur ein Werkzeug zum Senden von E‑Mail‑Nachrichten. Es ist eine umfassende Lösung, die umfassende Unterstützung für diverse Aufgaben rund um das Senden, Empfangen, Speichern und Verarbeiten von E‑Mails bietet. Und Sie können sicher sein, dass Sie bei der Ausführung dieser Aufgaben nicht an die Grenzen der Bibliothek stoßen. Wir befassen uns seit vielen Jahren mit diesem Thema und erweitern ihre Funktionalität kontinuierlich.
Sie sind wahrscheinlich schon auf kleine Bibliotheken gestoßen, die relativ neu entstanden sind. Sie lösen ein einfaches Problem, mit dem viele Anwender konfrontiert sind, leicht und natürlich. Sobald Sie jedoch ein wenig zurücktreten, wird Ihnen klar, dass Sie, wenn Sie diese unprätentiöse Bibliothek weiterverwenden, ständig Krücken, einige Module zum Umgehen von Bibliotheksbeschränkungen, Adapter, die dazu dienen, Ihre kleine Bibliothek mit einer anderen kleinen Bibliothek zu verbinden, usw. einbauen müssen. Und plötzlich ist Ihre kleine schlaue Lösung nicht mehr so schlau. Darüber hinaus senden Sie sie an den Server, wo sie sich regelmäßig und konsequent selbst ins Bein schießt, weil niemand ein solches Durcheinander aus Krücken und Integrationen vor Ihnen getestet hat. Und egal, wie sehr Sie sich anstrengen, früher oder später stoßen Sie immer wieder an die Grenzen dieser Bibliothek. Und Sie müssen nach etwas Neuem suchen. Wenn also um die Arbeit mit E‑Mails 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 SMTP bei weitem nicht das einzige Protokoll zum Senden von E‑Mails mit C++. Mit unserem Produkt können Sie E‑Mails über Exchange EWS und Microsoft Graph versenden!
Wir haben bereits in diesem Artikel über die Möglichkeiten von MailMessage berichtet. Doch das ist bei weitem nicht das einzige Werkzeug zur Vorbereitung von Briefen zum Versand. Sie können:
- Briefen aus einer Vorlage mit TemplateEngine generieren;
- Container mit Briefen dank der Unterstützung der Formate OST, PST und MBOX entpacken;
- Briefe aus dem Postfach über die Unterstützung der IMAP-, POP3-, Exchange‑EWS‑ und WebDav‑Protokolle sowie Microsoft Graph herunterladen;
- E‑Mails von einem Format in ein anderes konvertieren.
Sie können einen Brief problemlos über das Exchange‑EWS‑Protokoll empfangen. Er liegt im MAPI‑Format vor. Sie können ihn jedoch leicht in das EML‑Format konvertieren, wodurch ein späterer Versand über das SMTP‑Protokoll möglich wird. Gleichzeitig können Sie die Empfängerliste 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 Klasse SmtpClient erzeugen, passiert nichts Besonderes. Sie legen lediglich die Anzahl der Einstellungen fest, die Ihnen künftig die Verbindung zu einem SMTP‑Server zum Senden von Nachrichten ermöglichen. Der eigentliche Zauber erfolgt beim ersten Aufruf der send Methode an. Was geschieht in diesem Moment?
Tatsächlich hängt alles von den von Ihnen angegebenen Einstellungen ab. Betrachten wir einige Optionen. Angenommen, Sie haben den Server‑Host angegeben, aber weder Port noch Verschlüsselungsart. In diesem Fall startet der Mechanismus zur automatischen Auswahl der Einstellungen. Dieser besteht aus aufeinanderfolgenden Versuchen, über die Standardports und die jeweiligen Verschlüsselungsalgorithmen eine Verbindung zum SMTP‑Server herzustellen. Zunächst wird versucht, eine verschlüsselte Verbindung aufzubauen. Schlägt dies fehl, versucht der Mechanismus, eine unverschlüsselte Verbindung herzustellen. Wenn Sie die unverschlüsselte Version des Protokolls nicht verwenden möchten, geben Sie die SecurityOptions.SSL_AUTO Einstellung. Diese Einstellung ermöglicht ebenfalls die Auswahl von Servereinstellungen, prüft jedoch nur verschlüsselte Kanäle.
Wenn eine Verbindung zum Server hergestellt werden konnte, wird ein Autorisierungsversuch unternommen. Schlägt die Autorisierung fehl, wird der Fehlercode für später gespeichert. Der Matcher versucht, auf andere Weise eine Verbindung aufzubauen. Die Nachricht wird gesendet, wenn Sie sich verbinden und anmelden können. Scheitert die Verbindung, erhält der Benutzer einen Autorisierungs‑Fehlercode (falls einer während der Auswahl gespeichert wurde). So kann der Benutzer erkennen, dass er ein falsches Passwort eingegeben oder einen anderen Fehler gemacht hat. Passt keiner der Optionen für Ports und Verschlüsselungsarten und wir kommen nicht einmal zum Autorisierungsversuch, erhält der Benutzer eine Fehlermeldung über falsche Servereinstellungen.
Übrigens sei darauf hingewiesen, dass unser SmtpClient (wie alle anderen Clients unserer Bibliothek) über einen Proxy eine Verbindung zum SMTP‑Server herstellen kann. Sie können dabei die Proxy‑Server‑Einstellungen bereits bei der Initialisierung angeben.
SMTP‑Client‑Autorisation
SmtpClient unterstützt nicht nur verschiedene Verbindungsarten, sondern auch unterschiedliche Autorisationsmethoden. Beispielsweise können Sie den OAuth‑Mechanismus verwenden. Dazu stellen wir mehrere Werkzeuge gleichzeitig bereit.
Zunächst ist es der 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‑Autorisation selbst durchführen und alle erhaltenen Informationen vom OAuth‑Server speichern. Das RefreshToken spielt dabei eine Schlüsselrolle. Es ist ein zusätzliches Token, das vom Autorisierungsserver zusammen mit dem AccessToken ausgegeben wird. Der Unterschied besteht darin, dass das AccessToken in der Regel nur für einen begrenzten Zeitraum gültig ist, während das RefreshToken deutlich länger oder sogar unbegrenzt (bis es vom Nutzer widerrufen wird) gültig ist. Dank des RefreshTokens kann die Klasse TokenProvider jederzeit ein AccessToken erneuern, wenn dieses nicht mehr gültig ist.
Eine weitere Option ist das Interface ITokenProvider. In diesem Fall können Sie nicht nur den OAuth‑Mechanismus selbst implementieren, sondern ihn auch an den SmtpClient übergeben, damit dieser ihn bei Bedarf nutzt.
Es sei darauf hingewiesen, dass der OAuth‑Mechanismus nicht immer notwendig ist. Manchmal ist es wesentlich einfacher, sich mit Benutzername und Passwort anzumelden. Dafür müssen Sie Ihr E‑Mail‑Konto nicht komplett neu konfigurieren, keine Zwei‑Faktor‑Authentifizierung deaktivieren usw. Eine sicherere Lösung ist ein separates Anwendungspasswort. Um diese Funktion zu nutzen, sollten Sie in den Einstellungen Ihres E‑Mail‑Kontos nachsehen. In der Regel wird das Anwendungspasswort automatisch erstellt, wenn Sie es in Ihrem Konto einrichten. Vergessen Sie nicht, es irgendwo zu sichern. Wir empfehlen zudem, die Berechtigungen Ihrer Anwendung so weit wie möglich einzuschränken. Natürlich kann ein Angreifer, der Zugang zu diesem Passwort erhält, nicht direkt Ihr Konto übernehmen, aber er kann dennoch viele unangenehme Dinge tun. Und hier können Sie nichts tun, weil das Passwort das einzige Mittel zum Schutz Ihrer Daten vor Eindringlingen ist. Insgesamt ist das Tool sehr praktisch, reduziert jedoch die Sicherheit Ihres Kontos; verwenden Sie es auf eigene Gefahr.
E‑Mail‑Versand über SMTP mit C++
Damit ist die Verbindung zum Server hergestellt und die Autorisierung erfolgreich. Jetzt können E‑Mails gesendet werden. Zum Senden wird ein Objekt der Klasse MailMessage verwendet. Technisch können Sie alle erforderlichen Daten einfach an die Send‑Methode übergeben, doch sie werden intern im MailMessage‑Objekt gesammelt. Da die Klasse MailMessage in das EML‑Format serialisieren kann, erhalten wir einen Datenstrom, den wir an unseren SMTP‑Server übergeben können. Damit geben wir dem Server den Befehl, einen Brief zu senden und übermitteln ihm den gesamten Inhalt des Briefes als Textdaten. Werden binäre Daten, etwa als angehängte Dateien, übertragen, werden diese im Base64‑Format kodiert, und die Metadaten des Briefes geben an, dass der Empfänger sie wieder dekodieren muss. Der SMTP‑Server kann die Korrektheit der empfangenen Nachricht prüfen (z. B. das FROM‑Feld mit dem Konto des Absenders auf dem Server vergleichen) und nach eigenem Ermessen die Metadaten ergänzen. Anschließend sendet der Server die E‑Mail an die Empfänger, deren Liste er ebenfalls aus den Metadaten der E‑Mail übernimmt.