Autor |
Beitrag |
oldprofiprog
Beiträge: 35
Erhaltene Danke: 1
|
Verfasst: Fr 10.03.17 13:16
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
|
|
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 10.03.17 13:26
- Nachträglich durch die Entwickler-Ecke gelöscht -
|
|
haentschman
Beiträge: 285
Erhaltene Danke: 33
DX10 Berlin Professional
|
Verfasst: Fr 10.03.17 13:43
Moin...
...da wirst du auch noch einen IdSSLIOHandler... brauchen.
|
|
oldprofiprog
Beiträge: 35
Erhaltene Danke: 1
|
Verfasst: 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
|
|
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 10.03.17 15:39
- Nachträglich durch die Entwickler-Ecke gelöscht -
|
|
Narses
Beiträge: 10182
Erhaltene Danke: 1255
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: 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. 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. 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.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
oldprofiprog
Beiträge: 35
Erhaltene Danke: 1
|
Verfasst: 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
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
Beiträge: 35
Erhaltene Danke: 1
|
Verfasst: 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
|
|
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 21.03.17 19:18
- Nachträglich durch die Entwickler-Ecke gelöscht -
|
|
delnu
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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.
Für diesen Beitrag haben gedankt: Narses
|
|
jaenicke
Beiträge: 19286
Erhaltene Danke: 1743
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 04.04.17 08:45
oldprofiprog hat folgendes geschrieben : | Keine Antwort war irgendwie zielführend. |
Nun ja, wenn du mit dem Stichwort nicht weiterkommst, könntest du ja nachfragen.
Die Suche in der Delphi Dokumentation liefert eine schöne Seite:
DOCWIKI IDSSLIOHANDLER
docwiki.embarcadero...._Network_Connections
Und wenn ich mal nach dem Stichwort in der zweiten Antwort in Kombination mit deiner Anfrage (es geht ja um Delphi und SMTP) suche:
DELPHI SMTP IDSSLIOHANDLER
Dann findet sich dort einiges, z.B. als erstes:
www.delphipraxis.net...-ssl-mit-indy10.html
Und dort unter anderem neben Infos ein Link auf eine Klasse zur Kapselung:
mikejustin.wordpress...delphi-applications/
Die macht genau was du nun gemacht hast:
Zitat: | Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TSSLEmail.AddSSLHandler; var SSLHandler: TIdSSLIOHandlerSocketOpenSSL; begin SSLHandler := TIdSSLIOHandlerSocketOpenSSL.Create(SMTP); SSLHandler.SSLOptions.Method := sslvSSLv23; SSLHandler.SSLOptions.Mode := sslmClient; SSLHandler.SSLOptions.VerifyMode := []; SSLHandler.SSLOptions.VerifyDepth := 0; SMTP.IOHandler := SSLHandler; end; | |
|
|
oldprofiprog
Beiträge: 35
Erhaltene Danke: 1
|
Verfasst: 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.
|
|
Klaus Müller
Beiträge: 58
Erhaltene Danke: 1
W2000,XP,W2k2S,W2k3S,S2k7S
Delphi XP
|
Verfasst: Sa 15.04.17 11:48
Hallo,
Habe leider das gleich Problem.
Ein altes Proramm welches eine Benutzermaske hat wo der User Daten eingibt.
Diese werden dann per email gesendet.
Habe nun wie von oldprofiprog beschrieben:
1. Die Kasse: mikejustin.wordpress...delphi-applications/
2. Die DLLs: docwiki.embarcadero...._Network_Connections
geholt und installirt.
Bekomme jetzt die Fehlemelddung:
"Die Verbindung wurde erfolgreich geschossen."
leider komme ich hier nicht mehr weiter, da ich mit dieser Fehlermeldung nicht anfangen kann.
Kennt das jemand?
Zuletzt bearbeitet von Klaus Müller am Sa 15.04.17 19:06, insgesamt 1-mal bearbeitet
|
|
jaenicke
Beiträge: 19286
Erhaltene Danke: 1743
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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
Beiträge: 58
Erhaltene Danke: 1
W2000,XP,W2k2S,W2k3S,S2k7S
Delphi XP
|
Verfasst: Sa 15.04.17 19:33
Hallo Sebastian,
Hier noch mal die Source:
Habe nun wie von oldprofiprog beschrieben:
1. Die Kasse: mikejustin.wordpress...delphi-applications/
2. Die DLLs: docwiki.embarcadero...._Network_Connections
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
Beiträge: 58
Erhaltene Danke: 1
W2000,XP,W2k2S,W2k3S,S2k7S
Delphi XP
|
Verfasst: 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:
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
Beiträge: 16
|
Verfasst: Do 04.05.17 10:17
Klaus Müller hat folgendes geschrieben : | Hallo,
Habe leider das gleich Problem.
Ein altes Proramm welches eine Benutzermaske hat wo der User Daten eingibt.
Diese werden dann per email gesendet.
Habe nun wie von oldprofiprog beschrieben:
1. Die Kasse: mikejustin.wordpress...delphi-applications/
2. Die DLLs: docwiki.embarcadero...._Network_Connections
geholt und installirt.
Bekomme jetzt die Fehlemelddung:
"Die Verbindung wurde erfolgreich geschossen."
leider komme ich hier nicht mehr weiter, da ich mit dieser Fehlermeldung nicht anfangen kann.
Kennt das jemand? |
Habe das gleiche Problem. Keiner ne Lösung?
|
|