Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Indy10, SSLPalin, SMTP, "Authentification required" (https://www.delphipraxis.net/174509-indy10-sslpalin-smtp-authentification-required.html)

hoika 26. Apr 2013 11:11

Indy10, SSLPalin, SMTP, "Authentification required"
 
Hallo #,

ich beziehe mich mit meiner Frage auf folgenden Thread

Der Fehler heisst "Authentication error", nicht wie es oben steht.

http://www.delphipraxis.net/174452-x...nt-senden.html

Ich muss einem Mailserver über SSL (Plain) eine Mail schicken.
Code sieht so aus.
Man sieht am Code, ich probier verzweifelt alles aus ...

Delphi-Quellcode:
procedure TForm1.ButtonMailClick(Sender: TObject);
var
  SMTP: TIdSMTP;
  Msg: TIdMessage;
begin

  IdUserPassProvider1.Username := EditNutzerName.Text;
  IdUserPassProvider1.Password := EditPassWort.Text;

  IdSASLLogin1.UserPassProvider := IdUserPassProvider1;

  SMTP := TIdSMTP.Create(nil);
  Msg := TIdMessage.Create;
  try
    SMTP.PipeLine := True;



//    SMTP.AuthType := satDefault;
    SMTP.ValidateAuthLoginCapability := False;

    SMTP.IOHandler := CreateSSLHandler(SMTP); // siehe unten

//     SMTP.AuthType := satDefault;
    SMTP.AuthType := satSASL;

//    SMTP.SASLMechanisms.Add.SASL := IdSASLLogin1;

    SMTP.SASLMechanisms.Add.SASL := IdSASLPlain1;

    SMTP.UseTLS := utUseImplicitTLS;
    SMTP.Host := EditServer.Text;
    SMTP.Port := StrToInt(EditPortSMTP.Text);
    SMTP.Username := EditNutzerName.Text;
    SMTP.Password := EditPassWort.Text;
    SMTP.Connect;

    Msg.From.Address:= EditSourceMail.Text;
    with Msg.Recipients.Add do
    begin
      Address := EditTargetMail.Text;
    end;
    Msg.Subject:= 'Test';

    SMTP.Send(Msg); <<-- Exception

    SMTP.Disconnect;
  finally
    Msg.Free;
    SMTP.Free;
  end;
end;
Hangel ich mich durch den Code, komme ich hier hin

unit IdSMTPBase
Delphi-Quellcode:
procedure TIdSMTPBase.SendNoPipelining(AMsg: TIdMessage; const AFrom: String; ARecipients: TIdEMailAddressList);
var
  LCmd: string;
begin
  LCmd := MAILFROM_CMD + '<' + AFrom + '>';   {Do not Localize}
  if FUseVerp then begin
    if Capabilities.IndexOf(CAPAVERP) > -1 then begin
      LCmd := LCmd + ' VERP';                  {Do not Localize}
    end else begin
      LCmd := LCmd + ' XVERP';                 {Do not Localize}
    end;
    if FVerpDelims <> '' then begin
     LCmd := LCmd + '=' + FVerpDelims;         {Do not Localize}
    end;
  end;
  SendCmd(RSET_CMD);

//// hier knallts im SendCmd


  SendCmd(LCmd, MAILFROM_ACCEPT);
end;

function TForm1ClickTest.CreateSSLHandler(Owner: TComponent): TIdSSLIOHandlerSocketOpenSSL;
begin
  Result := TIdSSLIOHandlerSocketOpenSSL.Create(Owner);
  Result.OnVerifyPeer := SSLVerifyPeerEventHandler;
  Result.SSLOptions.Method := sslvSSLv3;
  Result.SSLOptions.VerifyMode := [sslvrfClientOnce];
end;

Das PerformSASLLogin ist bereits erfolgreich verlaufen.

Was kann ich noch tun ?

Danke


Heiko

sx2008 26. Apr 2013 13:52

AW: Indy10, SSLPalin, SMTP, "Authentification required"
 
Vor dem "FROM"-Command muss das Kommando "HELO" (ohne User/PW) bzw. "EHLO" (Anmeldung mit User + PW) stattgefunden haben.
In deinem Fall brauchst du "EHLO" = Extended Hello (erweiterte Anmeldung)

Setze mal einen Breakpoint auf das
Delphi-Quellcode:
Connect
und prüfe ob "EHLO" verwendet wird.
Es müsste auch das
Delphi-Quellcode:
Property UseEhlo
geben, das per default = True sein sollte. (so zumindest in Indy 9)

Nach deiner Beschreibung scheint die SSL-Verbindung korrekt aufgebaut zu sein, aber der Client ist nicht sauber am Mailserver angemeldet.
Ausserdem noch einen Breakpoint auf die Methode
Delphi-Quellcode:
Authenticate
setzen.
Dort müsstest du sehen wie der Befehl "AUTH LOGIN " mit UserName + Passwort den den Server geschickt wird.

hoika 26. Apr 2013 14:59

AW: Indy10, SSLPalin, SMTP, "Authentification required"
 
Hallo,

das UseEhlo ist True,
das PerformSASLLogin ist Teil des Authenticate und wird erfolgreich, also ohne Fehler durchlaufen.

Ich habe im ersten Eintrag das CreateSSLHandler noch eingetragen.

Fehler liegt bei hier knallts im SendCmd .


;(

Danke


Heiko

sx2008 26. Apr 2013 19:17

AW: Indy10, SSLPalin, SMTP, "Authentification required"
 
Wie schaut's denn aus, wenn du dich mit einem ausgereiften EMail - Client (Mozilla Thunderbird) mit dem SMTP-Server verbindest?

hoika 29. Apr 2013 07:46

AW: Indy10, SSLPalin, SMTP, "Authentification required"
 
Hallo,

Thunderbird geht.
Outlook nicht, das wollen sie noch ändern.

Mit Outlook sie ähnlich aus,
Connect (Verbindung) klappt
das Senden der Testmail war nicht erfolgreich.


Heiko

hoika 29. Apr 2013 08:06

AW: Indy10, SSLPalin, SMTP, "Authentification required"
 
Hallo,

Vor dem "FROM"-Command muss das Kommando "HELO" (ohne User/PW) bzw. "EHLO" (Anmeldung mit User + PW) stattgefunden haben.
In deinem Fall brauchst du "EHLO" = Extended Hello (erweiterte Anmeldung)

Ich habe jetzt EHLO=True und HeloName meinen Benutzernamen.
Den HeloName hatte ich glatt vergessen !.
Er meldet sich mit OK AUTH PLAIN.

Ich habe allerdings kein Passwort angegeben.
Laut Internet steht dort nur EHLO "Sender", Sender=Mail-Adresse.
Wie muss denn der String mit Nutzenamen und Passwort aussehen ?

Danke


Heiko

sx2008 29. Apr 2013 08:32

AW: Indy10, SSLPalin, SMTP, "Authentification required"
 
Zitat:

Zitat von hoika (Beitrag 1213319)
Er meldet sich mit OK AUTH PLAIN.

Der Client muss/darf sich dann mit
Code:
AUTH PLAIN xxxxxxxxxxxxxxxxxxxxxxxxxxxx=
anmelden.
Die xxxxxx stehen für Username und Passwort die mit BASE64 kodiert werden.
Genauere Info gibt es z.B. hier:
http://www.freebsdwiki.net/index.php...UTH_via_telnet

hoika 29. Apr 2013 09:50

AW: Indy10, SSLPalin, SMTP, "Authentification required"
 
Hallo,

ja genauso wird es gemacht.
Und der Server sagt auch OK.


Heiko


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:50 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