![]() |
Problem mit Email-Versand Indy
Hallo zusammen,
Seit heute habe ich die neueste Indy (5459) installiert. Ich wollte eigentlich nur, und das erstmal unverschlüsselt, Emails versenden. Allerdings kriege ich eine Schutzverletzung.
Code:
Es knallt beim smtp.send (m).
unit Main;
{SSL ist zwar schon da, aber noch auskommentiert.} interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, idSmtp, idMessage, idSSLOpenSSL, StdCtrls; type TForm1 = class(TForm) Button2: TButton; procedure FormCreate(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } smtp: TIdSmtp; SSLHandler: TIdSSLIOHandlerSocketOpenSSL; public { Public declarations } end; var Form1: TForm1; implementation uses idGlobal, idExplicitTLSClientServerBase, idAttachmentFile, idUserPassProvider, IdSASL_CRAM_MD5, IdSASL_CRAM_SHA1, idSASLPlain, idSASLLogin, idSASLSKey, idSASLOTP, idSASLAnonymous, idSASLExternal; {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject); var IdUserPassProvider: TIdUserPassProvider; IdSASLCRAMMD5: TIdSASLCRAMMD5; IdSASLCRAMSHA1: TIdSASLCRAMSHA1; IdSASLPlain: TIdSASLPlain; IdSASLLogin: TIdSASLLogin; IdSASLSKey: TIdSASLSKey; IdSASLOTP: TIdSASLOTP; IdSASLAnonymous: TIdSASLAnonymous; IdSASLExternal: TIdSASLExternal; begin smtp := TIdSmtp.Create (Application); (* SSLHandler := TIdSSLIOHandlerSocketOpenSSL.Create(smtp); SSLHandler.MaxLineAction := maException; SSLHandler.SSLOptions.Method := sslvSSLV23; SSLHandler.SSLOptions.Mode := sslmClient; SSLHandler.SSLOptions.VerifyMode := []; SSLHandler.SSLOptions.VerifyDepth := 0; smtp.IOHandler := SSLHandler; IdUserPassProvider := TIdUserPassProvider.Create(SMTP); IdUserPassProvider.Username := 'web454p1'; IdUserPassProvider.Password := 'LittleJamy16'; IdSASLCRAMSHA1 := TIdSASLCRAMSHA1.Create(SMTP); IdSASLCRAMSHA1.UserPassProvider := IdUserPassProvider; IdSASLCRAMMD5 := TIdSASLCRAMMD5.Create(SMTP); IdSASLCRAMMD5.UserPassProvider := IdUserPassProvider; IdSASLSKey := TIdSASLSKey.Create(SMTP); IdSASLSKey.UserPassProvider := IdUserPassProvider; IdSASLOTP := TIdSASLOTP.Create(SMTP); IdSASLOTP.UserPassProvider := IdUserPassProvider; IdSASLAnonymous := TIdSASLAnonymous.Create(SMTP); IdSASLExternal := TIdSASLExternal.Create(SMTP); IdSASLLogin := TIdSASLLogin.Create(SMTP); IdSASLLogin.UserPassProvider := IdUserPassProvider; IdSASLPlain := TIdSASLPlain.Create(SMTP); IdSASLPlain.UserPassProvider := IdUserPassProvider; SMTP.SASLMechanisms.Add.SASL := IdSASLCRAMSHA1; SMTP.SASLMechanisms.Add.SASL := IdSASLCRAMMD5; SMTP.SASLMechanisms.Add.SASL := IdSASLSKey; SMTP.SASLMechanisms.Add.SASL := IdSASLOTP; SMTP.SASLMechanisms.Add.SASL := IdSASLAnonymous; SMTP.SASLMechanisms.Add.SASL := IdSASLExternal; SMTP.SASLMechanisms.Add.SASL := IdSASLLogin; SMTP.SASLMechanisms.Add.SASL := IdSASLPlain; *) smtp.host := 'webbox222.server-home.org'; smtp.port := 25; //587; smtp.username := 'Bla'; smtp.password := 'Bla'; smtp.authtype := satDefault; // satSASL // smtp.UseTLS := utUseImplicitTLS; smtp.connect; end; procedure TForm1.Button2Click(Sender: TObject); var m: TIdMessage; begin m := TIdMessage.create (Application); m.clear; m.from.name := 'Marco'; m.from.address := 'info@l-becker.de'; M.Recipients.EMailAddresses := 'mo@stonesbrook-ranch.de'; m.subject := 'Testmail'; m.body.text := 'This is a very great test mail!'; // if fDateiname <> '' then // TIdAttachmentFile.Create (m.MessageParts, fDateiname); if smtp.connected then smtp.send (m); m.free; end; end. Hab ich was falsch gemacht, oder woran könnte es sonst liegen? Herzliche Grüße Marco |
AW: Problem mit Email-Versand Indy
Knallt heißt genau was?
|
AW: Problem mit Email-Versand Indy
knallt heißt:
Schutzverletzung 04bb-bla lesen von Adresse 044 usw. |
AW: Problem mit Email-Versand Indy
Ich bin ein bißchen weiter.
in
Code:
wird
procedure TIdSMTP.InternalSend(AMsg: TIdMessage; const AFrom: String; ARecipients: TIdEMailAddressList);
Code:
aufgerufen und Mailagent ist
AMsg.ExtraHeaders.Values[XMAILER_HEADER] := MailAgent;
inaccessible sagt mein Delphi... Irgendwelche Ideen... Viele Grüße Marco |
AW: Problem mit Email-Versand Indy
Also zum einen würde ich das smtp.connect nicht schon im FormCreate machen.
Dafür könntest du dir eine function (z.B. ConnectSMTP) anlegen, in der auch alle Werte, die jetzt im FormCreate stehen, gesetzt werden. Mir fallen nur sehr wenige Fälle ein, in denen es Sinn machen würde die SMTP-Verbindung während der ganzen Programmlaufzeit aufrecht zu halten. (Von den Problemen mal ganz abgesehen, wenn den Provider die zwischendurch kappt). Diese Funktion sollte dann als Rückgabewert ein Boolean zurückgeben, je nachdem ob connected werden konnte oder nicht. Zum anderen würde ich TIdMessage nicht mit Owner Application erzeugen. Und die ButtonClick-Routine sollte dann so aussehen:
Delphi-Quellcode:
Das hilft dir jetzt zwar nicht bei deinem Problem, ist aber sinnvoller.
procedure ButtonClick(Sender: TObject);
var m: TIdMessage; begin if connectSMTP then Try m:=TIdMessage.Create(nil); //mit nil als Owner erzeugen. . . . SMTP.send(m); finally SMTP.disconnect; //oder SMTP.Connected:=false; das weiß ich jetzt aus dem Kopf nicht. m.free; end; end; |
AW: Problem mit Email-Versand Indy
Hi Hobbycoder,
;-) stimmt natürlich. Das Zeugs stammt aus einem weitaus größeren Projekt, wo ich das genauso mache, wie du es vorgeschlagen hast. Das hier ist nur die quick-and-dirty-version, um den Laufzeitfehler zu finden. Viele Grüße Marco |
AW: Problem mit Email-Versand Indy
Zitat:
|
AW: Problem mit Email-Versand Indy
Hallo zusammen,
falls nochmal jemand darüber fällt... Es gibt einen Bug in D5, das overload-Prozeduren mit offenen Array-Parametern eine Schutzverletzung verursachen. Als Workarround mit abgeschalteter Optimierung und eingeschalteten Stackframes kompilieren, dann läuft's. Ja, ja, ;-) oder auf eine vernünftige Delphi-Version wechseln, wenn man die nur mit Screenreadern bedienen könnte... Herzliche Grüße Marco |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:56 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