![]() |
SMTP über Strato
Moin,
bisher habe ich Emails immer über einen eigenen Mailserver verschickt - jetzt würde ich das gerne aber direkt bei Strato machen. Mit folgender function hatte das bisher geklappt:
Delphi-Quellcode:
Wobei es mit:
function TMailForm.SendeMail(MailEmpfaenger, CCListe, Betreff, Anhang :string; Body :TStringList; MailAbsender, MailPasswort, MailServer: String; MailPort: Integer) : boolean;
var iAttachment : TIdAttachment; Erfolg: Boolean; begin (* Connect mit Server *) MailForm.IdSMTP1.AuthType := satDefault; // simpler Login ohne Authentifizierung MailForm.IdSMTP1.Host := MailServer; MailForm.IdSMTP1.Port := MailPort; MailForm.IdSMTP1.UseTLS := utUseRequireTLS; // mit SSL -> Port dann in aller Regel 587 MailForm.IdSMTP1.Username := MailAbsender; // Benutzername MailForm.IdSMTP1.Password := MailPasswort; // Passwort // Verbinden mit Server try MailForm.IdSMTP1.Connect; except on E: Exception do begin result := false; Application.MessageBox (PChar(E.Message),'Verbindungsfehler Connect !',MB_OK); MailForm.IdSMTP1.Disconnect; exit; end; end; (* Mail erstellen *) MailForm.IdMessage1.ContentType := 'multipart/*'; // mit Anhang! iAttachment := TIdAttachmentFile.Create(MailForm.IdMessage1.MessageParts, Anhang) ; MailForm.IdMessage1.Body.Assign(Body); // der eigentliche eMail -Text aus einem TMemo MailForm.IdMessage1.Priority := TIdMessagePriority(2); // Priorität MailForm.IdMessage1.Recipients.EMailAddresses := MailEmpfaenger; // Empfängeradresse MailForm.IdMessage1.ReplyTo.EMailAddresses := MailAbsender; // Anwortadresse MailForm.IdMessage1.From.Text := MailAbsender; // Absenderadresse MailForm.IdMessage1.Subject := Betreff; 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; result := true; MailForm.IdSMTP1.Disconnect; end; MailAbsender = h.bothur@beispiel.de MailPasswort = 123456789ABC MailServer = 192.168.20.5 MailPort = 465 MailEmpfaenger=hans@beispiel.de immer - wenn man im entsprechendem Netzwerk war - funktioniert hat. Wenn ich es jetzt aber direkt bei Strato versuchen will: MailAbsender = h.bothur@beispiel.de MailPasswort = 123456789ABC MailServer = smtp.strato.de MailPort = 465 MailEmpfaenger=hans@beispiel.de dann bekomme ich bei
Delphi-Quellcode:
eine Fehlermeldung:
MailForm.IdSMTP1.Send(MailForm.IdMessage1);
Im Projekt MailVersand.exe ist eine Exception der Klasse EidOSSLUnderlyingCryptoError mit der Meldung "Fehler beim erbinden mit SSL. error: 1409442E:SSL3_READ_BYTES:tlsv 1 alert protocol version" aufgetreten. Delphi ist Embarcadero® Delphi 10.4 Version 27.0.40680.4203 ssleay32.dll und libeay32.dll liegen im Programmverzeichnis. Kann mir das jemand erklären was ich da falsch mache ? Gruss Hans |
AW: SMTP über Strato
ohne SSL wird es wohl bei Strato nicht funktionieren.
procedure TfeMailKonto.bTestClick(Sender: TObject); var smtp : TIdSMTP; Msg: TIdMessage; begin screen.Cursor := crHourGlass; smtp := TIdSMTP.Create(nil); msg := TIdMessage.Create(); try try Msg.From.Address:= eEmail.Text; Msg.Recipients.EMailAddresses:= eEmail.Text; Msg.Subject := 'Test eMail'; Msg.ReceiptRecipient.Text := eEmail.Text; if eBCC.Text <> '' then Msg.BCCList.Add.Text := eBCC.Text; with TIdText.Create(msg.MessageParts) do begin Body.Add('Test eMail'); ContentType := 'text/html; charset=utf-8;'; end; // with SMTP.Host:= eSMTP.Text; SMTP.Username:= eKontoname.Text; SMTP.Password := ePasswort.Text; SMTP.Port := strtoint(eSMTPPort.Text); SMTP.IOHandler := indySSL; SMTP.USETLS := TIdUseTLS(cbTLS.ItemIndex); SMTP.ConnectTimeout := 1000; try SMTP.Connect(); SMTP.Authenticate; SMTP.Send(Msg); showMessage('eMail erfolgreich versendet'); finally SMTP.Disconnect; end; // try except on E: Exception do showMessage(E.Message); end; // try finally msg.Free; smtp.Free; screen.Cursor := crDefault; end; // try end; |
AW: SMTP über Strato
Das hilft jetzt nicht, weil du auf mehrere Bezeichner deiner Form zugreifst, die der TE nicht hat.
Eigentlich musst du nur deinen TIdSSLIOHandlerSocketOpenSSL erstellen, Protokoll auf TLS 1.2 stellen und den IOHandler zuweisen. UseTLS allein reicht nicht. |
AW: SMTP über Strato
Sorry - vielleicht hätte ich das gleich schreiben sollen:
ich habe auf der Form: IdMessage1 IdSMTP1 IOHandlerSocketOpenSSL1 IOHandlerSocketOpenSSL1.Method = sslvTLSv1_2 Damit habe ich doch schon SSL auf die V1.2 gestellt . denn zu min. lt. Website müsste das bei Strato reichen. Oder muss ich in IdSMTP1.UseTLS auch noch was einstellen _OBWOHL_ ich den IOHändler auf IOHandlerSocketOpenSSL1 gesetzt habe ? Gruss Hans |
AW: SMTP über Strato
Zitat:
Das könnte die Fehlermeldung erklären, wenn die zum Beispiel bereits durch vorher gestartete Prozesse geladen werden. In Indy gibt es m.W. eine Methode mit der sich Informationen zur aktiven OpenSSL DLL ermitteln lassen. |
AW: SMTP über Strato
Zitat:
im Office16\odbc-Verzeichns im Embarcader/Studio(21-Verzeichnis im AusweisApp2-Verzeichnis ... und und und Und natürlich alle mit unterschiedlichen Daten. Wie kann man denn feststellen weklche Version geladen worden ist ? Gruss Hans |
AW: SMTP über Strato
Zitat:
|
AW: SMTP über Strato
Zitat:
Und wie ermittle ich den die Version ? gruss Hans |
AW: SMTP über Strato
Delphi-Quellcode:
unit CheckOpenSSLUnit;
interface uses WinApi.Windows, System.SysUtils, vcl.Dialogs; procedure CheckOpenSSL; implementation procedure CheckOpenSSL; var ssleay32, libeay32: HMODULE; ModulePath: array[0..MAX_PATH] of Char; VerInfoSize: Cardinal; VerInfo: Pointer; VerValueSize: Cardinal; VerValue: PVSFixedFileInfo; sPathSsleay32: string; sPathLibeay32: string; sVerInfoSsleay32: String; sVerInfoLibeay32: String; Dummy: Cardinal; begin ssleay32 := LoadLibrary('ssleay32.dll'); if ssleay32 <> 0 then begin Dummy := ssleay32; GetModuleFileName(ssleay32, ModulePath, length(ModulePath)); sPathSsleay32 := String(ModulePath); //-- VerInfoSize := GetFileVersionInfoSize(PChar(sPathSsleay32), Dummy); GetMem(VerInfo, VerInfoSize); GetFileVersionInfo(PChar(sPathSsleay32), 0, VerInfoSize, VerInfo); VerQueryValue(VerInfo, '\', Pointer(VerValue), VerValueSize); sVerInfoSsleay32 := 'Version '+IntToStr(VerValue^.dwFileVersionMS shr 16); sVerInfoSsleay32 := sVerInfoSsleay32 + '.' + IntToStr(VerValue^.dwFileVersionMS and $FFFF); sVerInfoSsleay32 := sVerInfoSsleay32 + '.' + IntToStr(VerValue^.dwFileVersionLS shr 16); sVerInfoSsleay32 := sVerInfoSsleay32 + '.' + IntToStr(VerValue^.dwFileVersionLS and $FFFF); end; libeay32 := LoadLibrary('libeay32.dll'); if libeay32 <> 0 then begin Dummy := libeay32; GetModuleFileName(libeay32, ModulePath, length(ModulePath)); sPathLibeay32 := String(ModulePath); //-- VerInfoSize := GetFileVersionInfoSize(PChar(sPathLibeay32), Dummy); GetMem(VerInfo, VerInfoSize); GetFileVersionInfo(PChar(sPathLibeay32), 0, VerInfoSize, VerInfo); VerQueryValue(VerInfo, '\', Pointer(VerValue), VerValueSize); sVerInfoLibeay32 := 'Version '+IntToStr(VerValue^.dwFileVersionMS shr 16); sVerInfoLibeay32 := sVerInfoLibeay32 + '.' + IntToStr(VerValue^.dwFileVersionMS and $FFFF); sVerInfoLibeay32 := sVerInfoLibeay32 + '.' + IntToStr(VerValue^.dwFileVersionLS shr 16); sVerInfoLibeay32 := sVerInfoLibeay32 + '.' + IntToStr(VerValue^.dwFileVersionLS and $FFFF); end; Showmessage(sPathSsleay32+' - '+sVerInfoSsleay32+#10+sPathLibeay32+' - '+sVerInfoLibeay32); end; end. |
AW: SMTP über Strato
Zitat:
aus dem richtigen Verzeichnis (Programmverzeichnis) Und Version ist 1.0.2.21 Und wie komme ich jetzt weiter ? Hans |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:03 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