Tech-Ecke / Delphi Inhalt / IdMsgSend Komponente eMail |
|
IdMsgSend Komponente eMail
Vorab Die Indy-Komponentensammlung bietet zahlreiche Komponenten rund ums Internet, von HTTP über FTP bis hin zu POP3 und SMTP. Die hier gezeigten Codeschnipsel wurden für die Version 10.0.52 erstellt, sollten aber auch für andere Versionen gültig sein. Bei neueren Delphi-Versionen ist diese Komponentensammlung bereits enthalten, bei älteren Versionen kann man das Paket aber auch kostenlos im Internet bei indyproject downladen. Wie externe Komponenten eingebunden werden steht hier.
eMail versenden über IdMessage + IdSMTP
Zunächst müssen die beiden Komponenten IdMessage
und IdSMTP
auf die Form gezogen werden. Mit dem Server verbinden
eMail Daten aufnehmen und absenden
eMail-Anhänge möchte man einen Anhang mit der eMail versenden, so muss beim sammeln der eMail-Daten folgende Zeile hinzugefügt werden:
Damit der Anhang jedoch nicht als Binärcode in Text ankommt, muss der ContentType auf "multipart/*" gesetzt werden!
Progressbar Für eine Fortschrittsanzeige nutzt man die zwei Ereignisse vom IdSMTP OnWork und OnWorkEnd um eine ProgressBar zu füttern. Bevor man dies jedoch tut, muss man zuvor den ProgressBar.Max ermitteln, dieser entspricht dem Datenvolumen der kompletten eMail. Am einfachsten bekommt man dies, indem man die eMail vor dem senden als temporär als Filestream erzeugt. Das könnte dann wie folgt aussehen:
Nachdem alle Daten, auch die Anhänge der IdMessage zugeordnet wurden! var PufferStream: TFileStream;
2) OnWork Bei OnWork wird der aktuelle Fortschritt des Down bzw. Uploads als Integer übergeben
3) OnWorkEnd Bei OnWorkEnd wird die Prgressbar wieder auf null gesetzt
AntiFreeze
Wenn eine Indy-Komponenten aktiv im Internet ist, also wenn man z.B. über den FTP-Client Daten herunter- oder hochläd, dann "gefriert" das Fenster der Anwendung Anwendung ein und lässt sich nicht mehr bewegen oder aktualisieren, was sich bei Verwendung einer Progressbar denkbar ungünstig verhalten würde. Um diesen, wohl oft unerwünschten Effekt zu unterdrücken dient die Komponente AntiFreeze. Die Komponenten wird einfach auf die Form gezogen und im Objektinspektor die Eigenschaft OnlyWhenIdle auf False gesetzt, und gut is.
|
Die Option Drucken funktioniert erst ab Netscape V4.0 bzw. I-Explorer 5.0 !
[letzte Aktualisierung 07.01.2012]