![]() |
SMTP SSL mit Indy10
Hallo zusammen,
der Tatsache geschuldet, dass nun immer mehr E-Mail-Provider dazu übergehen, ausschließlich SSL-verschlüsselte Mails anzunehmen, muss ich meinen E-Mail-Versand im Programm anpassen. Dafür habe ich mich nun zum ersten Mal mit SSL beschäftigt. Ich bekomme in meinen Testprojekt die E-Mails erfolgreich versandt. Dazu verwende ich die Komponenten - TIdSMTP - TIdSSLIOHandlerSocketOpenSSL und - TIdMessage Auf meiner Oberfläche kann man aktuell wählen, ob - SSL genutzt werden soll oder nicht - und wenn SSL verwendet werden soll, welcher "UseTLS"-Typ genommen werden soll (utUseExplicitTLS, utUseImplicitTLS, utUseRequireTLS) Nun ergibt sich dazu eine Frage: In den mir bekannten Programmen muss der User nicht zwischen den "UseTLS"-Typen entscheiden. Hier vor möchte ich meine Anwender eigentlich auch bewahren. Daher möchte ich gerne herausfinden, welchen Typ ich verwenden muss. Doch leider habe ich hierzu bisher nichts hilfreiches gefunden. Hat jemand eine Ahnung?
Code:
procedure TfrmMain.InitSendMail;
begin // Komponenten erzeugen if not Assigned(IndySMTP) then IndySMTP := TIdSMTP.Create(Application); if not Assigned(IndyMessage) then IndyMessage := TIdMessage.Create(Application); if not Assigned(IndySSLHandler) then IndySSLHandler := TIdSSLIOHandlerSocketOpenSSL.Create(Application); if not cbSSL.Checked then begin IndySMTP.IOHandler := nil; // nicht benötigt IndySMTP.UseTLS := utNoTLSSupport; end else begin // SSLHandler inititlisieren IndySSLHandler.MaxLineAction := maException; IndySSLHandler.SSLOptions.Method := sslvTLSv1; IndySSLHandler.SSLOptions.Mode := sslmUnassigned; IndySSLHandler.SSLOptions.VerifyMode := []; IndySSLHandler.SSLOptions.VerifyDepth := 0; IndySMTP.IOHandler := IndySSLHandler; end; // Verbindungsdaten setzen IndySMTP.Host := edtHost.Text; IndySMTP.Port := StrToInt(edtPort.Text); if cbSSL.Checked then begin // https://forums.embarcadero.com/message.jspa?messageID=528772 if cbbSSLType.Text = 'Explicit' then IndySMTP.UseTLS := utUseExplicitTLS; if cbbSSLType.Text = 'Implicit' then IndySMTP.UseTLS := utUseImplicitTLS; if cbbSSLType.Text = 'Require' then IndySMTP.UseTLS := utUseRequireTLS; end; if (edtUser.Text = '') and (edtPassword.Text = '') then IndySMTP.AuthType := satNone else begin IndySMTP.AuthType := satDefault; IndySMTP.Username := edtUser.Text; IndySMTP.Password := edtPassword.Text; end; end; function TfrmMain.SendMail: String; begin Result := ''; Screen.Cursor := crHourGlass; try with IndyMessage do begin Clear; From.Name := edtSender.Text; From.Address := edtSenderAdress.Text; Recipients.EMailAddresses := edtRecipient.Text; Subject := edtSubject.Text; ContentType := 'Multipart/Alternative'; Body := mmMessage.Lines; end; // mit SMTP verbinden IndySMTP.Connect; if IndySMTP.Connected then begin IndySMTP.Send(IndyMessage); IndySMTP.Disconnect; MessageDlg('Die E-Mail wurde erfolgreich versandt.', mtInformation, [mbOK], 0); end; except on E: Exception do begin Result := E.Message; if IndySMTP.Connected then IndySMTP.Disconnect; end; end; Screen.Cursor := crDefault; end; Kleine Nebenfrage dazu: Laut den Dokumentationen müssen entsprechende DLLs von Indy mit benutzt werden. Hierfür gibt es aber 32- und 64-Bit DLLs. Orientiert sich die benötigten Bit-Version in diesem Fall am Betriebssystem oder an der Bit-Version meiner Anwendung? Ich danke euch für eure Unterstützung. Viele Grüße, bemano |
AW: SMTP SSL mit Indy10
gleiche Frage, immer mehr Provider stellen auf SSL um (z.B. 1und1). Was muss man machen auch in Hinsicht auf Multiplattform App, da geht ja bekanntlich keine DLL!
|
AW: SMTP SSL mit Indy10
Die Unterscheidung der Einstellungen kann zum Teil schon über den gewählten Port (465 oder 587) geschehen:
Zitat:
![]() In einer (älteren) Indy Dokumentation wird auch noch auf die Capabilities Property hingewiesen: Zitat:
![]() |
AW: SMTP SSL mit Indy10
Sourcecode basierend auf zwei anderen Quellen habe ich hier ins Netz gestellt:
Use Indy to send secure SMTP email from Delphi apps ![]() Entwickelt und getestet mit Indy 10.6 und Delphi 2009 sowie Free Pascal / Lazarus. |
AW: SMTP SSL mit Indy10
Liste der Anhänge anzeigen (Anzahl: 1)
Hi, ich ziehe diesen Beitrag mal wieder hoch, das es a) um dieses Thema geht und b) auch um den von mjustin veröffentlichen Code.
Ich habe ein Projekt welches aus zwei Programmen besteht. Programm A ist der Server. Er soll per SMTP-Server E-Mails empfangen und diese auch per SMTP weiterleiten. Und ein Programm B, das ist der Client, welcher E-Mails an Programm A schicken soll. Folgender Fehler tritt auf: Wenn der Client eine E-Mail an der Server schicken soll, löst das SMTP.Connect die Fehlermeldung "10061-Verbindung abgebrochen" aus. Das wäre ansich jetzt erst mal ein Fehler meinerseits. Denn entweder ist in meinem SMTP-Server ein Fehler, oder eben der SMTP-Client, in dem ich die ![]() Nun ist es aber so, dass der Server problemlos E-Mail empfangen kann, die ich per Outlook an ihn sende und gleichermaßen der Client problemlos an den SMTP-Host von 1und1 senden kann, und ich somit keinen von beiden explizit als Fehlerhaft identifizieren kann. Ich habe mal den betreffenden Source und die von mir (wie gesagt leicht veränderte) IndySecureMailClient.pas angehängt. Der SMTPServer ist bewußt noch sehr rudimentär gehalten, weil ich auch erst mal ohne SSL an diesen senden will (was mit Outlook auch funktioniert). Vielleicht fällt einem von euch der Fehler auf, den ich gemacht habe. Denn ich fange grad erst an mich mit dem Indy-SMTP-Geraffel zu beschäftigen. Gruß Hobbycoder |
AW: SMTP SSL mit Indy10
Ich antworte mir mal selber ;-)
Wie sooft sitzt das Problem meist vorm Rechner :-D Ich war in der Annahme, dass der IdSMTPServer per Default sich auf 0.0.0.0 bindet. Ein Trugschluss. Im Code nachgeholt....schon geht's ;-) |
AW: SMTP SSL mit Indy10
Ich habe gerade gemäß Deinem Beispiel in meinem Programm einen TLS Mailversand programmiert. Das funktioniert auch so wie es soll. Es gibt aber einen Schönheitsfehler:
Wenn ich eine Mail schicke, ploppt eine Windowsmeldung auf, ich solle eine Smartcard wählen. Diese Aufforderung kommt mehrfach. Ich kann sie alle "Abbrechen" und die Mail wird verschickt. Im Code konnte ich feststellen, dass diese Meldungen nicht beim Connect sondern beim Send ausgelöst werden. Wie werde ich diese Meldungen los? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:58 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