![]() |
Funktion für E-Mail Versand
aloah zusammen,
ich weiß über das aussehen von source code kann man sich streiten... in diesem falle gehts mir auch nicht dadrum wie schön ich meinen source code formatiert habe (ect.) sonder mir geht es darum ob jemand fehler in der funktionalität sieht... mit der beigefügten funktion soll man e-mails verschicken können: edit: zum versand der e-mails verwende ich die indy komponenten
Delphi-Quellcode:
folgende frage(n) hätte ich hierzu:
unit AS_Globals;
interface uses Dialogs, Forms, SysUtils, Windows, StdCtrls, Classes, Clipbrd, IdMessage, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdExplicitTLSClientServerBase, IdMessageClient, IdSMTPBase, IdSMTP; type TIdSMPTP = class(TIdSMTPBase); //Functions function fnSendEMail(sHost, sUsername, sPassword, sFrom, sSenderEMail, sReceipt, sSubject : String; strlBody : TStrings; iPort : Integer) : Boolean; implementation //****************************************************************************** // * // F U N C T I O N S * // * //****************************************************************************** //****************************************************************************** // fnSendEMail --> Send E-Mail * // Parameter --> sHost = E-Mail Server * // sUsername = E-Mail User Account * // sPassword = E-Mail User Account Password * // sFrom = From Text * // sSenderEMail = E-Mail Adress from Sender * // sReceipt = Receipt E-Mail Adress * // sSubject = E-Mail Subject * // strlBody = E-Mail Text * // iPort = E-Mail Server Port * // Return --> Boolean (True/False) * //****************************************************************************** function fnSendEMail(sHost, sUsername, sPassword, sFrom, sSenderEMail, sReceipt, sSubject : String; strlBody : TStrings; iPort : Integer) : Boolean; var SMTP : TIdSMTP; idMessage : TIdMessage; begin Result := True; //Create TIdSMTP and TIdMessage Componente SMTP := TIdSMTP.Create(); idMessage := TIdMessage.Create(); //Configure SMPTP SMTP.Host := sHost; SMTP.Username := sUsername; SMTP.Password := sPassword; SMTP.Port := iPort; //Configure idMessage idMessage.From.Text := sFrom; idMessage.Sender.Text := sSenderEMail; idMessage.Recipients.EMailAddresses := sReceipt; idMessage.Subject := sSubject; idMessage.Body.Clear; idMessage.Body := strlBody; //Send E-Mail Try SMTP.Connect; SMTP.Send(idMessage); SMTP.Disconnect; Except Result := False; If SMTP.Connected = True Then Begin Try SMTP.Disconnect; Except MessageDlg('Could not disconnect from the E-Mail Server: ' + sHost, mtError, [mbOK], 0); End; End; MessageDlg('Could not send E-Mail to: ' + sReceipt, mtError, [mbOk], 0); End; //Destroy TIdSMTP and TIdMessage Componente SMTP.Free; idMessage.Free; end; 1) ist das komponenten erstellen und entfernen so korrekt oder erzeuge ich mir hier speicherlecks? 2) ich erzeuge ja am anfang der unit einen type... muss ich denn auch wieder entsorgen? die frage(n) mögen vielleicht für manchen zu einfach oder doof klingen, aber ich hab noch nie wirklich funktionen programmiert die keine form zur verfügung hatten und auf dennen man hätte die komponenten ablegen können... über antworten würde ich mich freuen... |
Re: Funktion für E-Mail Versand
Ich habe den Source nur überflogen, aber Du solltest das grundsätzlich so machen:
Delphi-Quellcode:
Somit sollten die Objekte auch bei Exceptions immer freigegeben werden. Und die Typdeklaration ist ja nur die Beschreibung einer Klasse und keine Instanz. Da gibt es somit nichts freizugeben.
Obj := TKlasse.Create;
try MachWasMitObj(); finally Obj.Free; end; |
Re: Funktion für E-Mail Versand
Also ich weis nicht ..
ich regele meine eMail-Versendungen immer über IdHTTP zusammen mit einem PHP-Script. IdHTTP geht per GET an das Script und regelt alles ohne IE, FF oder sonstwas. Vorteile: Man ist nicht Login-Daten-bezogen. Zwar kann der Server off sein, dann geht beides nicht mehr, aber ich verwende der unkompliziertheit halber lieber ein PHP-Script. ( Stichwort, PHP:Mail() ) |
Re: Funktion für E-Mail Versand
Zitat:
|
Re: Funktion für E-Mail Versand
@deddyh
danke für den tipp... ich habs versenden nun so abgeändert:
Delphi-Quellcode:
@michallinden
//Send E-Mail
Try Try SMTP.Connect; SMTP.Send(idMessage); SMTP.Disconnect; Except Result := False; If SMTP.Connected = True Then Begin Try SMTP.Disconnect; Except MessageDlg('Could not disconnect from the E-Mail Server: ' + sHost, mtError, [mbOK], 0); End; End; MessageDlg('Could not send E-Mail to: ' + sReceipt, mtError, [mbOk], 0); End; Finally //Destroy TIdSMTP and TIdMessage Componente SMTP.Free; idMessage.Free; End; danke für dein anmerkung... aber warum sollte ich mir hier jetzt noch die arbeit machen und ein php script schreiben? für meinen e-mail versand brauch ich auch keinen IE oder FF oder sonst irgend nen i-explorer... und login daten brauch ich hierfür auch nicht einmal... die sind nur zur vollständigkeit drinne... |
Re: Funktion für E-Mail Versand
"und login daten brauch ich hierfür auch nicht einmal"
Nicht? Die Funktion fnSendEMail connected sich doch da mit irgentwas? Oder, da müssen doch zumindest Logindaten in der SMTP-Komponente stehen. |
Re: Funktion für E-Mail Versand
Zitat:
Die Adresse des Scripts kennt wohl niemand. Natürlich könnte man die irgentwie während der Laufzeit meiner Anwendung abzweigen, aber wird wohl nicht so sein. |
Re: Funktion für E-Mail Versand
Zitat:
|
Re: Funktion für E-Mail Versand
OneTimeKeys muss man mir wohl erst erklären :roll:
|
Re: Funktion für E-Mail Versand
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:20 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz