Computerwissenschaften

Senden von E-Mails mit Anhängen mit Delphi

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 die Daten per E-Mail senden (z. B. einen 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 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.

Bei einer anderen Technik werden Microsoft Outlook und OLE zum Senden der E-Mail verwendet, diesmal mit Unterstützung für Anhänge. Anschließend muss jedoch MS Outlook verwendet werden.

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-  Komponenten (Internet Direct) – eine großartige Internet-Komponentensuite, 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. Zunächst wird TIdSMTOP verwendet, um eine Verbindung herzustellen und mit einem SMTP-Server zu kommunizieren (E-Mails zu senden). Zweitens übernimmt die TIdMessage das Speichern und Codieren der Nachrichten.

Wenn die Nachricht erstellt wird (wenn TIdMessage  mit Daten „gefüllt“ ist), wird die E-Mail über TIdSMTP an einen SMTP-Server übermittelt .

 

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 Sie dies jedoch nicht können, öffnen Sie das Archiv mit 7-Zip. damit Sie die Projektdateien extrahieren können (die in einem Ordner namens SendMail gespeichert sind ).

Wie Sie dem Screenshot zur Entwurfszeit entnehmen können , müssen Sie zum Senden einer E-Mail mit der TIdSMTP- Komponente mindestens den SMTP-Mailserver (Host) angeben. Für die Nachricht selbst müssen die regulären E-Mail-Teile ausgefüllt werden, z. B. Von , Bis , Betreff usw.

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

 procedure TMailerForm.btnSendMailClick(Sender: TObject) ;
beginStatusMemo.Clear;//setup SMTPSMTP.Host := ledHost.Text;SMTP.Port := 25;//setup mail messageMailMessage.From.Address := ledFrom.Text;MailMessage.Recipients.EMailAddresses := ledTo.Text + ',' + ledCC.Text;MailMessage.Subject := ledSubject.Text;MailMessage.Body.Text := Body.Text;if FileExists(ledAttachment.Text) then TIdAttachment.Create(MailMessage.MessageParts, ledAttachment.Text) ;//send mailtry  trySMTP.Connect(1000) ;SMTP.Send(MailMessage) ;  except on E:Exception doStatusMemo.Lines.Insert(0, 'ERROR: ' + E.Message) ;  end;finally  if SMTP.Connected then SMTP.Disconnect;end;
end; (* btnSendMail Click *) 

Hinweis:  Im Quellcode finden Sie zwei zusätzliche Prozeduren, mit denen die Werte der Felder Host , From und To mithilfe einer INI-Datei zum Speichern dauerhaft bleiben .

Similar Posts

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.