AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Problem mit Email-Versand Indy

Problem mit Email-Versand Indy

Ein Thema von Marco Steinebach · begonnen am 15. Mai 2018 · letzter Beitrag vom 16. Mai 2018
Antwort Antwort
Marco Steinebach

Registriert seit: 4. Aug 2006
418 Beiträge
 
Delphi 5 Standard
 
#1

Problem mit Email-Versand Indy

  Alt 15. Mai 2018, 14:55
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:
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.
Es knallt beim smtp.send (m).
Hab ich was falsch gemacht, oder woran könnte es sonst liegen?

Herzliche Grüße
Marco
Marco Steinebach
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
1.808 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#2

AW: Problem mit Email-Versand Indy

  Alt 15. Mai 2018, 15:04
Knallt heißt genau was?
  Mit Zitat antworten Zitat
Marco Steinebach

Registriert seit: 4. Aug 2006
418 Beiträge
 
Delphi 5 Standard
 
#3

AW: Problem mit Email-Versand Indy

  Alt 15. Mai 2018, 15:53
knallt heißt:
Schutzverletzung 04bb-bla lesen von Adresse 044 usw.
Marco Steinebach
  Mit Zitat antworten Zitat
Marco Steinebach

Registriert seit: 4. Aug 2006
418 Beiträge
 
Delphi 5 Standard
 
#4

AW: Problem mit Email-Versand Indy

  Alt 15. Mai 2018, 16:20
Ich bin ein bißchen weiter.
in
Code:
procedure TIdSMTP.InternalSend(AMsg: TIdMessage; const AFrom: String; ARecipients: TIdEMailAddressList);
wird
Code:
  AMsg.ExtraHeaders.Values[XMAILER_HEADER] := MailAgent;
aufgerufen und Mailagent ist
inaccessible
sagt mein Delphi...

Irgendwelche Ideen...

Viele Grüße
Marco
Marco Steinebach
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
592 Beiträge
 
#5

AW: Problem mit Email-Versand Indy

  Alt 15. Mai 2018, 17:10
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:
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;
Das hilft dir jetzt zwar nicht bei deinem Problem, ist aber sinnvoller.
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
Marco Steinebach

Registriert seit: 4. Aug 2006
418 Beiträge
 
Delphi 5 Standard
 
#6

AW: Problem mit Email-Versand Indy

  Alt 15. Mai 2018, 17:27
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
Marco Steinebach
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
592 Beiträge
 
#7

AW: Problem mit Email-Versand Indy

  Alt 15. Mai 2018, 17:48
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
Quick-And-Dirty macht einem aber gerade die Fehlersuche manchmal etwas schwer, bzw. man baut sich damit gerne neue Fehler ein.
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
Marco Steinebach

Registriert seit: 4. Aug 2006
418 Beiträge
 
Delphi 5 Standard
 
#8

AW: Problem mit Email-Versand Indy

  Alt 16. Mai 2018, 11:02
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
Marco Steinebach
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2018 by Daniel R. Wolf