Senden von E-Mails mit Anhängen mit Delphi & Indy

Im Folgenden finden Sie Anweisungen zum Erstellen eines "E-Mail-Absenders", der eine Option zum Senden von E-Mail-Nachrichten und Anhängen direkt aus einer Delphi-Anwendung enthält. Bevor wir beginnen, überlegen Sie sich die Alternative ...

Angenommen, Sie haben eine Anwendung, die unter anderem einige Datenbankdaten verarbeitet. Benutzer müssen Daten aus Ihrer Anwendung exportieren und Senden Sie die Daten per E-Mail (wie ein Fehlerbericht). Ohne den unten beschriebenen Ansatz müssen Sie die Daten in eine externe Datei exportieren und dann mit einem E-Mail-Client senden.

Senden von E-Mails von Delphi

Es gibt viele Möglichkeiten, eine E-Mail direkt von Delphi aus zu senden. Am einfachsten ist es jedoch, die zu verwenden ShellExecute API. Dadurch wird die E-Mail mit dem auf dem Computer installierten Standard-E-Mail-Client gesendet. Obwohl dieser Ansatz akzeptabel ist, können Sie auf diese Weise keine Anhänge senden.

Eine andere Technik verwendet diesmal Microsoft Outlook und OLE, um die E-Mail zu senden mit Anhangsunterstützung, dann muss jedoch MS Outlook verwendet werden.

instagram viewer

Eine weitere Option ist die Verwendung der integrierten Unterstützung von Delphi für die Windows Simple Mail-API. Dies funktioniert nur, wenn auf dem Benutzer ein MAPI-kompatibles E-Mail-Programm installiert ist.

Die Technik, die wir hier diskutieren, verwendet Indy (Internet Direct) -Komponenten - eine großartige Internetkomponentensuite, die aus gängigen Internetprotokollen besteht, die in Delphi geschrieben wurden und auf dem Blockieren von Sockets basieren.

Die TIdSMTP (Indy) -Methode

Das Senden (oder Abrufen) von E-Mail-Nachrichten mit Indy-Komponenten (im Lieferumfang von Delphi 6+ enthalten) ist so einfach wie das Löschen von ein oder zwei Komponenten in einem Formular, das Festlegen einiger Eigenschaften und das Klicken auf eine Schaltfläche.

Um mit Indy eine E-Mail mit Anhängen von Delphi zu senden, benötigen wir zwei Komponenten. Zuerst die TIdSMTOP wird verwendet, um eine Verbindung herzustellen und mit einem SMTP-Server zu kommunizieren (E-Mail senden). Zweitens die TIdMessage kümmert sich um das Speichern und Codieren der Nachrichten.

Wann die Nachricht erstellt wird (wann TIdMessage wird mit Daten "gefüllt"), die E-Mail wird mit dem an einen SMTP-Server zugestellt TIdSMTP.

Quellcode des E-Mail-Absenders

Ich habe ein einfaches Mail-Absender-Projekt erstellt, das ich unten erläutere. Den vollständigen Quellcode können Sie hier herunterladen.

Hinweis: Dieser Link ist ein direkter Download in die ZIP-Datei für das Projekt. Sie sollten es problemlos öffnen können, aber wenn Sie es nicht können, verwenden Sie es 7-Zip um das Archiv zu öffnen, damit Sie die Projektdateien (die in einem Ordner namens gespeichert sind) extrahieren können SendMail).

Wie Sie auf dem Screenshot zur Entwurfszeit sehen können, senden Sie eine E-Mail mit dem TIdSMTP Komponente müssen Sie mindestens den SMTP-Mailserver (Host) angeben. Für die Nachricht selbst müssen die regulären E-Mail-Teile ausgefüllt werden, z Von, Zu, Gegenstand, etc.

Hier ist der Code, der das Senden einer E-Mail mit einem Anhang behandelt:

Verfahren TMailerForm.btnSendMailClick (Absender: TObject); Start StatusMemo. Klar; // SMTP einrichten SMTP.Host: = ledHost. Text; SMTP.Port: = 25; // Mail-Nachricht einrichten MailMessage. Von. Adresse: = ledFrom. Text; MailMessage. Empfänger. EMailAddresses: = ledTo. Text + ',' + ledCC.Text; MailMessage. Betreff: = ledSubject. Text; MailMessage. Körper. Text: = Körper. Text; wenn FileExists (ledAttachment. Text) dann TIdAttachment. Erstellen (MailMessage. MessageParts, ledAttachment. Text); // Mail sendenVersuchenVersuchen SMTP.Connect (1000); SMTP.Send (MailMessage); außerauf E: Ausnahme tun. StatusMemo. Linien. Einfügen (0, 'FEHLER:' + E.Message); Ende; schließlichwenn SMTP.Connected dann SMTP.Disconnect; Ende; Ende; (* btnSendMail Click *)

Hinweis: Im Quellcode finden Sie zwei zusätzliche Prozeduren, mit denen die Werte von erstellt werden Wirt, Von, und Zu Bearbeitungsfelder bleiben bestehen und verwenden eine INI-Datei zum Speichern.