AW: SMTP über Strato
Aus https://www.delphipraxis.net/1456935-post3.html:
Delphi-Quellcode:
Das könnte hier helfen, um die aktuell verwendete Version von OpenSSL zu ermitteln.
{$IFDEF ANDROID}
IdOpenSSLSetLibPath(String.Empty); IdSSLOpenSSLHeaders.Load(); error:=IdSSLOpenSSLHeaders.WhichFailedToLoad(); if (length(error)>0) then begin IdOpenSSLSetLibPath(IncludeTrailingPathDelimiter(TPath.GetLibraryPath)); IdSSLOpenSSLHeaders.Load(); error:=IdSSLOpenSSLHeaders.WhichFailedToLoad(); if (length(error)>0) then begin IdOpenSSLSetLibPath(IncludeTrailingPathDelimiter(TPath.GetDocumentsPath)); IdSSLOpenSSLHeaders.Load(); log.d('SSL-Version(3): '+OpenSSLVersion); error:=IdSSLOpenSSLHeaders.WhichFailedToLoad(); if (length(error)>0) then begin log.d('SSL-Errors: '+error); end; end else begin log.d('SSL-Version(2): '+OpenSSLVersion); end; end else begin log.d('SSL-Version(1): '+OpenSSLVersion); end; {$ENDIF} Die Funktion OpenSSLVersion ist in der Indy-Unit Protocols/IdSSLOpenSSL enthalten. |
AW: SMTP über Strato
Also wenn die Firewall für den Port frei ist und es die 32Bit oder 64Bit DLL ist dann sollte es gehen. Verlangt Strato 1.2 TLS?
|
AW: SMTP über Strato
Zitat:
|
AW: SMTP über Strato
So wird es bei uns gemacht:
Delphi-Quellcode:
function SendSMTP(ESMTP:TSMTP;Von,An,CC,BCC,Body,ContentType:String):Boolean;
var I,J : Integer; RS,TS : TStringList; begin RESULT:=False; TS:=TStringList.Create; RS:=TStringList.Create; try IdMessage.ContentType:=ContentType; IdMessage.CCList.Clear; IdMessage.From.Address:=Von; TS.CommaText:=CC; For I:=0 to TS.Count-1 do begin IdMessage.CCList.Add.Address:=TS.Strings[i]; end; IdMessage.BccList.Clear; TS.CommaText:=BCC; For I:=0 to TS.Count-1 do begin IdMessage.BccList.Add.Address:=TS.Strings[i]; end; IdMessage.Recipients.Clear; RS.CommaText:=An; For J:=0 to RS.Count-1 do begin IdMessage.Recipients.Add.Address:=RS.Strings[J]; end; IDMessage.Body.Text:=Body; //-- IdSmtp.Host := ESMTP.Host; IdSmtp.Username := ESMTP.User; IdSmtp.Password := ESMTP.Passwort; IdSmtp.Port := ESMTP.Port; case ESMTP.Authen of 0: IdSmtp.AuthType := satDefault; 1: IdSmtp.AuthType := satNone; 2: IdSmtp.AuthType := satSASL; else end; //-- IdSmtp.Connect; IdSmtp.Send(IdMessage); RESULT:=True; Finally IdSmtp.Disconnect; FreeAndNil(TS); FreeAndNil(RS); end; end; |
AW: SMTP über Strato
Zitat:
Allerdings gibt es eine Exception "Die Verbindung wurde erfolgreich geschlossen" nach dem Versand der Mail:
Delphi-Quellcode:
Aber warum in drei Teufels Namen ... und wie verhindere ich das diese Exception angezeigt wird ?
try
MailForm.IdSMTP1.Send(MailForm.IdMessage1); except on E: Exception do begin result := false; Application.MessageBox (PChar(E.Message),'Verbindungsfehler Versand !',MB_OK); MailForm.IdSMTP1.Disconnect; exit; end; end; Hans |
AW: SMTP über Strato
Zitat:
Delphi-Quellcode:
except
on EIdSilentException do begin end; on E: Exception do begin result := false; Application.MessageBox (PChar(E.Message),'Verbindungsfehler Versand !',MB_OK); MailForm.IdSMTP1.Disconnect; exit; end; end; |
AW: SMTP über Strato
Zu Post 1.
Wer innerhalb einer Klasse (TMailForm) auf die "vermeintlich" richtige globale Variable (MailForm) zugreift, der gehört irgendwann mal dafür vollkommen zu Recht bestraft. -> Weglassen (sowas macht man niemals nicht) oder Self benutzen. Ja, nicht alle Exceptions will man sehen/ausgeben. Vor allem kein EAbort und Nachfahren, sowie andere "Silent"-Exceptions. Wer kennt es nicht, das berühmte "Vorgang erfolgreich beended" aka S_OK, NOERROR, bzw. Fehlercode 0. Wenn möglich diese Exceptions anhand des Types ausschließen, und falls sonst nichts hilft, dann (fehleranfällig) versuchen es über die Exception.Message zu machen. (scheitert z.B. gern, wenn andere Sprache eingestellt) Einige Exception-Klassen haben auch noch Zusatzinfos, wie z.B. einen nummerischen ErrorCode, welcher einfacher/sicherer vergleichbar ist, als wie die Message. |
AW: SMTP über Strato
Moin,
Zitat:
Das habe ich jetzt so versucht:
Delphi-Quellcode:
Da sagt der Compiler aber E2003: Undeklarierter Bezeichner :-( Ich bin mir sicher das ich irgendeine Unit noch einbinden muss damit ich das so abfangen kann - aber welche ?
try
IdSMTP1.Send(IdMessage1); except (* Wenn Verbindung erfolgreich geschlossen dann nix machen *) on EIdConnClosedGracefully do begin end; on E: Exception do begin Gruss Hans |
AW: SMTP über Strato
Der Kompiler sagt Dir bestimmt auch, welcher Bezeichner nicht gefunden wurde. Dann den Namen davon nehmen und bei der Suchmaschine Deiner Wahl eingeben.
Vermutlich handelt es sich hier um EIdSilentException. Ergibt bei der Suche mit der Suchmaschine meiner Wahl im ersten Ergebnis den entsprechenden Hinweis: EIdSilentException |
AW: SMTP über Strato
Hallo,
evtl. hilft's das 'MailForm.IdSMTP1.Disconnect;' im Try Except Block wegzulassen bzw. das Ereignis IdSMTP1Disconnected(Sender: TObject); der Komponente anzupassen. Wäre jetzt aber ein einfach ärgerlicher Fehler. Gruß |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz