Entwickler-Ecke
Internet / Netzwerk - Indy email Versand
oldprofiprog - Fr 10.03.17 13:16
Titel: Indy email Versand
Hallo,
ich versende emails über Indy IdSMTP.
Das funktioniert bei einem reinen Smtp Server (pop3) problemlos.
Jetzt möchte ich email über Tonline Server versenden.
Ich gehe davon aus, dass der Versand auch über SMTP erfolgt.
Der Postausgangsserver ist securesmtp.t-online.de.
Das funktioniert aber so nicht nicht.
Die Fehlermeldung verlangt ein StartTLS Command.
Hat wer einen Tip wie ich das hinbekomme?
Für einen Tip dankbar.
Gruß Peter
Delete - Fr 10.03.17 13:26
- Nachträglich durch die Entwickler-Ecke gelöscht -
haentschman - Fr 10.03.17 13:43
Moin... :P
...da wirst du auch noch einen IdSSLIOHandler... brauchen. :wink:
oldprofiprog - Fr 10.03.17 14:36
Mit Port 587 habe ich mal probiert Fehler ist unveränderd.
Ich habe wie in Outlook dann Port 465 eingestellt.
Hier ist der StartTLS Fehler weg.
Das Programm bleibt beim Connect längere Zeit hängen.
Im except wird "Connect erfolgreich geschlossen" angezeigt.
Im idSMTP habe ich utNoTLSSupport eingestellt.
Ich möchte eigentlich nur email über t-online versenden.
Am Liebsten wäre mir, wenn ich irgendwo ein Stück Code für diese Aufgabe finde.
Gruß Peter
Delete - Fr 10.03.17 15:39
- Nachträglich durch die Entwickler-Ecke gelöscht -
Narses - Fr 10.03.17 16:43
Moin!
oldprofiprog hat folgendes geschrieben : |
Im idSMTP habe ich utNoTLSSupport eingestellt. |
Kurz zur Erläuterung: Die Fehlermeldung vom T-Online-SMTP bedeutet, dass dieser nur verschlüsselt mit dir sprechen möchte. :think: Das ist auch gut so, denn wir wollen ja keine Spammer unterstützen und ihnen das Leben unnötig leicht machen. ;)
Wenn du also explizit der Indy-Komponente das TLS-Protokoll verbietest, dann wird das nie klappen. :nixweiss: Aber auch wenn du es erlaubst, klappt das nur dann, wenn Indy die SSL-Bibliothek, die dafür nötig ist, nutzen kann. Dazu ist der IdSSLIOHandler da (und die SSL-DLLs brauchst du natürlich auch). Such mal danach, dann kommst du weiter. :les:
cu
Narses
oldprofiprog - Fr 10.03.17 19:05
Frühlingsrolle hat folgendes geschrieben : |
Wer suchet der findet auch. Oder du zeigst uns dein bisheriges Beispiel |
Das ist wohl das kleinste Problem,
hier ist der Quellcode.
Schade ich hatte gehofft, hier schneller eine brauchbare Lösung zu finden.
Dann werde ich mich mal auf die Suche machen.
Vielen Dank
Peter
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43:
| function TDataModMail.SendEmail(Recipient, CCList, sSubject: string; Body: TStrings; Anlage: string): boolean; var plainText: TIdText; begin idMessage.MessageParts.Clear; idSMTP.Host := Host; idSMTP.Username := User; idSMTP.Password := Password; idSMTP.Port := Port;
idMessage.From.text := emailAbsender; idMessage.Sender.text:= idMessage.From.text;
idMessage.Recipients.EMailAddresses:= Recipient; idMessage.CCList.EMailAddresses := CCList; idMessage.Subject := sSubject; plainText := TIdText.Create(IdMessage.MessageParts, nil); plainText.Body.Text := Body.Text; plainText.ContentType := 'text/plain'; plainText.CharSet := 'ISO-8859-1'; plainText.ContentTransfer := 'BASE64'; plainText.ContentDisposition := 'inline';
if length(Trim(Anlage)) > 0 then TIdAttachmentFile.Create(idMessage.MessageParts, Anlage );
try idSMTP.Connect; idSMTP.Send(idMessage); idSMTP.Disconnect; result:=True; except on E : Exception do begin showmessage(E.ToString);
if idSMTP.connected then try idSMTP.disconnect; except end; result := false; end; end; idMessage.MessageParts.Clear; end; |
oldprofiprog - Di 21.03.17 19:04
So das Problem ist gelöst.
Diese Variante funktioniert.
1. Port 465 verwenden.
2. SSL - Dll (für die richtige Indy Version) finden und in den gleichen Ordner wie das Programm kopieren.
3. SSL Handler initialisieren
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| SSLHandler := TIdSSLIOHandlerSocketOpenSSL.Create(SMTP); SSLHandler.SSLOptions.Method := sslvSSLv23; SSLHandler.SSLOptions.Mode := sslmClient; SSLHandler.SSLOptions.VerifyMode := []; SSLHandler.SSLOptions.VerifyDepth := 0; SMTP.IOHandler := SSLHandler; if edSMTPPort = 587 then SMTP.UseTLS := utUseExplicitTLS else SMTP.UseTLS := utUseImplicitTLS; |
Ich frage mich aber echt wo eigentlich noch Sinn und Nutzen dieses Forums liegt.
Keine Antwort war irgendwie zielführend.
Eine Antwort sinngemäß Ich weiß wie es geht, verrate das aber nicht.
(
Zitat: |
IdSSLIOHandler da (und die SSL-DLLs brauchst du natürlich auch). Such mal danach, dann kommst du weiter. |
)
Zitat: |
...da wirst du auch noch einen IdSSLIOHandler... brauchen. |
Ein Sammler der den Quellcode haben wollte.
Zitat: |
Wer suchet der findet auch. Oder du zeigst uns dein bisheriges Beispiel. |
Sorry ist nicht böse gemeint.
Früher war es in den Foren kommunikativer.
Es ist wohl langsam Zeit, meinen Acount hier zu löschen. (Wie geht das eigentlich?)
Gruß
Peter
Delete - Di 21.03.17 19:18
- Nachträglich durch die Entwickler-Ecke gelöscht -
Delete - Di 04.04.17 03:24
Ich habe dieses Thema eigentlich nur zufällig angeklickt und finde die letzte Antwort von oldprofiprog ziemlich irritierend.
Klar gibt es einerseits Leute, die in Foren Komplettlösungen erwarten und andererseits auch welche, die solche Lösungen hätten, aber nicht verraten wollen. Hier kann ich das so nicht entdecken. Es ist aber nun mal so, daß eine bloße Problembeschreibung ohne auch nur einen Fetzen Quellcode jeden im Dunklen läßt, der helfen will.
Mir beispielsweise genügen meist Lösungsansätze, die sich auf das Wesentliche konzentrieren. Es ist nämlich grundsätzlich besser, dann damit rauszufinden, wie es geht und es für die Zukunft zu wissen, statt an einer Komplettlösung zu verzweifeln, der man inhaltlich nicht folgen und sie entsprechend auch nicht den eigenen Vorstellungen anpassen kann.
Insofern finde ich es doch eher schön, daß oldprofiprog seine Lösung hier anderen mit einem ähnlichen Problem verfügbar macht, statt daß er so reagiert hätte, wie es in vielen anderen Foren zu finden ist. Da steht dann oft einfach nur, jemand hätte nun selbst eine Lösung gefunden, verschweigt sie aber. Und all die Ratlosen, die z.B. googlen und auf solche Beiträge stoßen, die dann auch noch als "gelöst" hingelogen werden, sind nicht klüger als vorher.
Ganz anders als oldprofiprog offenbar bin ich mit diesem Forum hier weitgehend zufrieden. Es kommt eben immer drauf an, welche Ansprüche man hat bzw. wie genügsam man ist. Mich stört beispielsweise manchmal ein Überangebot an Ratschlägen eher als eine karge, aber zielführende Antwort. Besonders schlimm empfinde ich z.B. solche Sachen wie zig Stellungnahmen der Art "iframes und frames sind doch sowas von out" usw., mit denen entsprechend speziell zu solchem Thema Ratsuchenden überhaupt nicht geholfen ist.
oldprofiprog - Mi 05.04.17 10:35
Nun lasst es gut sein, das Problem ist ja gelöst.
Es ging darum in einem Freeware-Programm, welches ich vor 15 Jahren geschrieben habe,
die email Übertragung (Teilnahmebestätigung) auf SSL zu ändern.
Letztendlich ging es nur um die richtige Komponente, deren Parameter Versorgung,
sowie die benötigten dll.
Mit dem richtigen Stichwort oder Link hätte ich eine Lösung halt schneller gefunden.
Meine Delphi-Version ist XE2 und auf diesem Stand werde ich auch in Zukunft bleiben.
Jenseits des aktiven Berufslebens, sind meine Ambitionen weniger bei Programmierung und Delphi,
sondern eher bei Photoshop und Garten angesiedelt.
jaenicke - Sa 15.04.17 13:09
Das ist normalerweise kein Fehler, sondern lediglich eine Benachrichtigung, dass die Verbindung planmäßig geschlosen wurde. Wo passiert denn das und wie sieht dazu der Code aus?
Klaus Müller - Sa 15.04.17 19:33
Hallo Sebastian,
Hier noch mal die Source:
Habe nun wie von oldprofiprog beschrieben:
1. Die Kasse:
https://mikejustin.wordpress.com/2014/07/27/send-secured-smtp-email-from-delphi-applications/
2. Die DLLs:
http://docwiki.embarcadero.com/RADStudio/XE8/en/Securing_Indy_Network_Connections
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35:
| Function Sende_Email(RegKey:string;Mode:Byte):Boolean; Var Mail: TSSLEmail; VSubject:String; VBody:TStringlist; Begin
VBody:= TStringlist.Create; GibBody(VBody,VINI,RegKey);
Try Mail := TSSLEmail.Create(C_Host, 465,C_Username, C_Password);
try Mail.edSenderName := 'Setup'; Mail.edSenderEmail := Vini.Email; Mail.edToEmail := C_Recipient; Mail.edSubject := VSubject; Mail.edBody := VBody;
Mail.SendEmail; finally Mail.Free; end; Finally VBody.Clear; VBody.Free; End; End; |
Leider kommt die Meldung nach der ausführung der Funktion (Sende_Email) und im Debug modus pasiert nichts?
Moderiert von Christian S.: Delphi-Tags hinzugefügt
Klaus Müller - So 16.04.17 10:44
Hallo Sebastian,
Habe mich noch mal eingehend mit dem Problem beschäftigt und einen anderen Ansatz genommenen.
Das Problem ist wahrscheinlich das die Objekte nicht alle initialisiert waren.
Hier meiner Sourcecode der Funktioniert:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58:
|
Function Sende_Email(RegKey:string;Mode:Byte):Boolean; Var VSubject:String; VBody:TStringlist; VIdSMTP:TIdSMTP; VIdMessage: TIdMessage; Begin Result:= False;
case Mode of 1: VSubject := C_Bestellung; 2: VSubject := C_Registrierung; end;
VBody:= TStringlist.Create; VIdSMTP:= TIdSMTP.Create; VIdMessage:= TIdMessage.Create;
try GibBody(VBody,VINI,RegKey);
VIdSMTP.AuthType := TIdSMTPAuthenticationType.satDefault;
VIdSMTP.Username := C_Username; VIdSMTP.Password := C_Password;
VIdSMTP.Host := C_Host; VIdSMTP.Port := 25;
VIdSMTP.Connect; Try VIdMessage.From.Address := VINI.Email; VIdMessage.Recipients.EMailAddresses := C_Recipient; VIdMessage.Subject := VSubject; VIdMessage.Body := VBody; VIdSMTP.Send(VIdMessage); Result:= True; Finally VIdSMTP.Disconnect; End; finally VIdSMTP.Free; VIdMessage.Free; VBody.Free; end; End; |
Moderiert von Christian S.: Delphi-Tags hinzugefügt
Daniel_DT - Do 04.05.17 10:17
Habe das gleiche Problem. Keiner ne Lösung?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!