Mails mit Anhang in Delphi über Indy Smtp versenden
Um Mails in Delphi zu versenden, kann man die Indy-Komponenten verwenden. Diese beinhalten TIdSMTP und TIdMessage, welche wir hierzu verwenden werden.
Als Anhang (Attachment) wollen wir eine CSV-Datei generieren, welche wir aber nur on-the-fly im Speicher erstellen und gleich direkt an die Mail anhängen. Somit ersparen wir uns das Erstellen einer (temporären) Datei.
Zu Beginn geben wir eine TIdSMTP-Komponente auf unsere Form (IdSmtp1). Diese müssen wir entsprechend dem verwendeten Mail-Server konfigurieren. Die meisten Eigenschaften sind selbsterklärend, benötigt der Mail-Server aber speziellere Einstellungen, kann es etwas schwieriger werden bis es funktioniert.
2 Tipps haben uns hier geholfen:
- um den Datenverkehr mit dem Mailserver mitzulesen, gebt eine TIdLogfile-Komponente auf die Form und wählt diese in der Eigenschaft „Intercept“ aus. Dann gibt man der TIdLogfile noch an, in welcher Datei der Datenverkehr mitgelogt werden soll und stellt „Active“ auf „true“.
- Um SSL zu benutzen, kann es nötig sein, folgende dll´s zu installieren: http://docwiki.embarcadero.com/RADStudio/Tokyo/de/OpenSSL#32-Bit-_und_64-Bit-Windows
Folgende Funktion sendet eine Mail mit Anhang:
procedure TForm1.sendMail(FromAddress: String; ToAddress: String; Subject: String; Body: String; csvData: TStrings; filename: String); var MemStrm : TMemoryStream; att: TIdAttachment; msg: TIdMessage; begin msg := TIdMessage.Create(nil); MemStrm := TMemoryStream.Create; csvData.SaveToStream(MemStrm); MemStrm.Position := 0; att := TIdAttachmentMemory.Create(msg.MessageParts, MemStrm); att.ContentType := 'text/csv'; att.FileName := filename; msg.ContentType := 'multipart/mixed'; msg.From.Address := FromAddress; msg.Recipients.Clear; msg.Recipients.Add.Address := toAddress; msg.Subject := Subject; msg.Body.Text := Body; try IdSmtp1.Connect; IdSmtp1.Send(msg); finally IdSmtp1.Disconnect; end; end;
Die Funktion kann dann folgendermaßen verwendet werden:
var csvData: TStrings; begin csvData := TStringList.create; csvData.add('col1;col2;col3'); csvData.add('1;2;3'); self.sendMail('[email protected]', '[email protected]', 'your csv file', 'Hello, ' + chr(10) + chr(13) + 'attached the actual list.', csvData, 'the_list_' + formatdatetime('YYYY_mm_dd', date) + '__' + formatdatetime('hh_nn', time) + '.csv'); end;
Schreibe einen Kommentar
Du musst angemeldet sein, um einen Kommentar abzugeben.