Senden Sie E-Mail-Nachrichten (und Anhänge) 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 anfangen, ü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 die im Folgenden beschriebene Vorgehensweise müssen Sie die Daten in eine externe Datei exportieren und anschließend mit einem E-Mail-Client senden.

Senden von E-Mails aus Delphi

Es gibt viele Möglichkeiten, eine E-Mail direkt von Delphi aus zu senden. Am einfachsten ist es jedoch, die ShellExecute-API zu verwenden. 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, aber MS Outlook muss dann verwendet werden.

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

Die hier diskutierte Technik verwendet Indy-Komponenten (Internet Direct) - eine großartige Suite von Internetkomponenten, die aus gängigen Internetprotokollen besteht, die in Delphi geschrieben wurden und auf blockierenden 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 Ablegen einer oder zweier Komponenten in einem Formular, das Festlegen einiger Eigenschaften und das Klicken auf eine Schaltfläche.

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

Wenn die Nachricht erstellt wird (wenn TIdMessage "gefüllt" mit Daten), wird die E-Mail mit dem an einen SMTP-Server übermittelt 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. Wenn dies nicht möglich ist, öffnen Sie das Archiv mit 7-Zip, damit Sie die Projektdateien (die in einem Ordner mit dem Namen gespeichert sind) extrahieren können SendMail).

Wie Sie aus dem Design-Time-Screenshot ersehen können, senden Sie eine E-Mail mit dem TIdSMTP müssen Sie mindestens den SMTP-Mail-Server (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 Anhang behandelt:

 Verfahren TMailerForm.btnSendMailClick (Absender: TObject); Start   StatusMemo.Clear;   // SMTP einrichten   SMTP.Host: = ledHost.Text; SMTP.Port: = 25;   // E-Mail-Nachricht einrichten   MailMessage.From.Address: = ledFrom.Text; MailMessage.Recipients.EMailAddresses: = ledTo.Text + ',' + ledCC.Text; MailMessage.Subject: = ledSubject.Text; MailMessage.Body.Text: = Body.Text;   wenn FileExists (ledAttachment.Text) dann TIdAttachment.Create (MailMessage.MessageParts, ledAttachment.Text);   // Mail senden   Versuchen     Versuchen       SMTP.Connect (1000); SMTP.Send (MailMessage);     außer auf E: Ausnahme do StatusMemo.Lines.Insert (0, 'ERROR:' + E.Message);     Ende;   schließlich     wenn 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 werden mit einer INI-Datei gespeichert.