Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Authentifiziertes SMTP (https://www.delphipraxis.net/154679-authentifiziertes-smtp.html)

Jerry 21. Sep 2010 10:26

Authentifiziertes SMTP
 
Hallo zusammen
Habe ein kleines Testprogramm erstellt, das ein Mailaccount testet.
Ich möchte das Programm mit authifiziertem SMTP erweitern.
Ich habe nun in meinem Programm folgende Code eingebaut:
Delphi-Quellcode:
    if chkb_Auth.Checked then
    begin
      IdSMTP1.Authenticate;
    end;
Jetzt erscheint immer die Meldung:
Connection Closes Gracefully.

Der ganze Code sieht so aus:
Delphi-Quellcode:
procedure Tfrm_POP3SMTPTester.btn_SendMailClick(Sender: TObject);
var
  m: TIdMessage;
begin
  try
    if IdSMTP1.Connected then
      IdSMTP1.Disconnect;
    IdSMTP1.Port := StrToInt(edt_SMTPPort.Text);
    IdSMTP1.Host := edt_SMTPHost.Text;
    if chkb_Auth.Checked then
    begin
      IdSMTP1.Authenticate;
    end;
    IdSMTP1.Username := edt_SMTPUser.Text;
    IdSMTP1.Password := edt_SMTPPassWort.Text;
    IdSMTP1.Connect; // (4000);
    if IdSMTP1.Connected = True then
    begin
      m := TIdMessage.Create(self);
      m.From.Text := edt_from.Text;
      m.Recipients.Add.Text := edt_to.Text;
      m.Subject := 'TestMail from SMTP Checker';
      m.Body.Text := 'Dieses Mail wurde zu Testzwecken versendet';
      IdSMTP1.Send(m);
      IdSMTP1.Disconnect;
      showmessage('Das Mail wurde erfolgreich versendet!');
    end;
  except
    on E: EIdTextInvalidCount do
      Writeln(E.Message);
    on E: EIdMessageCannotLoad do
      Writeln(E.Message);
    on E: EIdPOP3Exception do
      Writeln(E.Message);
    on E: EIdTextInvalidCount do
      Writeln(E.Message);
    on E: EIdMessageCannotLoad do
      Writeln(E.Message);
    on E: EIdDoesNotSupportAPOP do
      Writeln(E.Message);
    on E: EIdUnrecognizedReply do
      Writeln(E.Message);
    on E: EIdTLSClientException do
      Writeln(E.Message);
    on E: EIdTLSClientSSLIOHandlerRequred do
      Writeln(E.Message);
    on E: EIdTLSClientCanNotSetWhileConnected do
      Writeln(E.Message);
    on E: EIdTLSClientTLSNotAvailable do
      Writeln(E.Message);
    on E: EIdTLSClientTLSNegCmdFailed do
      Writeln(E.Message);
    on E: EIdTLSClientTLSHandShakeFailed do
      Writeln(E.Message);
    on E: EIdTLSServerException do
      Writeln(E.Message);
    on E: EIdTLSClientCanNotSetWhileActive do
      Writeln(E.Message);
  end;
  if IdSMTP1.Connected then
    IdSMTP1.Disconnect;
end;
Weiss jemand rat, wie man sich richtig Authentifiziert?

Vielen Dank.

DeddyH 21. Sep 2010 10:29

AW: Authentifiziertes SMTP
 
Müsste man nicht Usernamen und Passwort setzen, bevor man sich authentifiziert?

P.S.: Nimm bitte den Vergleich auf true raus, das schmerzt in meinen Augen.

[edit] P.P.S.: http://www.indyproject.org/KB/index....entication.htm [/edit]

himitsu 21. Sep 2010 10:33

AW: Authentifiziertes SMTP
 
Ich denk mal da hat jemand Recht
Zitat:

Zitat von Authenticate - Description:
Verifies whether the given user name and password are valid in the specified context.


Jerry 21. Sep 2010 10:37

AW: Authentifiziertes SMTP
 
Vielen Dank. Auch das mit dem True... :-)

Habs geändert, respektive es war schon drin, geht aber immer noch nicht:
Delphi-Quellcode:
procedure Tfrm_POP3SMTPTester.btn_SendMailClick(Sender: TObject);
var
  m: TIdMessage;
begin
  try
    if IdSMTP1.Connected then
      IdSMTP1.Disconnect;
    IdSMTP1.Port := StrToInt(edt_SMTPPort.Text);
    IdSMTP1.Host := edt_SMTPHost.Text;
    IdSMTP1.Username := edt_SMTPUser.Text;
    IdSMTP1.Password := edt_SMTPPassWort.Text;
    if chkb_Auth.Checked then
    begin
      IdSMTP1.Authenticate;
    end;
    IdSMTP1.Connect;
    if IdSMTP1.Connected then
    begin
      m := TIdMessage.Create(self);
      m.From.Text := edt_from.Text;
      m.Recipients.Add.Text := edt_to.Text;
      m.Subject := 'TestMail from SMTP Checker';
      m.Body.Text := 'Dieses Mail wurde zu Testzwecken versendet';
      IdSMTP1.Send(m);
      IdSMTP1.Disconnect;
      showmessage('Das Mail wurde erfolgreich versendet!');
    end;
  except
    on E: EIdTextInvalidCount do
      Writeln(E.Message);
    on E: EIdMessageCannotLoad do
      Writeln(E.Message);
    on E: EIdPOP3Exception do
      Writeln(E.Message);
    on E: EIdTextInvalidCount do
      Writeln(E.Message);
    on E: EIdMessageCannotLoad do
      Writeln(E.Message);
    on E: EIdDoesNotSupportAPOP do
      Writeln(E.Message);
    on E: EIdUnrecognizedReply do
      Writeln(E.Message);
    on E: EIdTLSClientException do
      Writeln(E.Message);
    on E: EIdTLSClientSSLIOHandlerRequred do
      Writeln(E.Message);
    on E: EIdTLSClientCanNotSetWhileConnected do
      Writeln(E.Message);
    on E: EIdTLSClientTLSNotAvailable do
      Writeln(E.Message);
    on E: EIdTLSClientTLSNegCmdFailed do
      Writeln(E.Message);
    on E: EIdTLSClientTLSHandShakeFailed do
      Writeln(E.Message);
    on E: EIdTLSServerException do
      Writeln(E.Message);
    on E: EIdTLSClientCanNotSetWhileActive do
      Writeln(E.Message);
  end;
  if IdSMTP1.Connected then
    IdSMTP1.Disconnect;
end;

Danke für weitere Tipps.

DeddyH 21. Sep 2010 10:39

AW: Authentifiziertes SMTP
 
Erst verbinden, dann authentifizieren (siehe auch den Link in meinem Edit).

Die Muhkuh 21. Sep 2010 12:06

AW: Authentifiziertes SMTP
 
Zitat:

Zitat von Jerry (Beitrag 1050916)
Delphi-Quellcode:
procedure Tfrm_POP3SMTPTester.btn_SendMailClick(Sender: TObject);
var
  m: TIdMessage;
begin
  try
  [ Gedöns ]
  except
    on E: EIdTextInvalidCount do
      Writeln(E.Message);
    on E: EIdMessageCannotLoad do
      Writeln(E.Message);
    on E: EIdPOP3Exception do
      Writeln(E.Message);
    on E: EIdTextInvalidCount do
      Writeln(E.Message);
    on E: EIdMessageCannotLoad do
      Writeln(E.Message);
    on E: EIdDoesNotSupportAPOP do
      Writeln(E.Message);
    on E: EIdUnrecognizedReply do
      Writeln(E.Message);
    on E: EIdTLSClientException do
      Writeln(E.Message);
    on E: EIdTLSClientSSLIOHandlerRequred do
      Writeln(E.Message);
    on E: EIdTLSClientCanNotSetWhileConnected do
      Writeln(E.Message);
    on E: EIdTLSClientTLSNotAvailable do
      Writeln(E.Message);
    on E: EIdTLSClientTLSNegCmdFailed do
      Writeln(E.Message);
    on E: EIdTLSClientTLSHandShakeFailed do
      Writeln(E.Message);
    on E: EIdTLSServerException do
      Writeln(E.Message);
    on E: EIdTLSClientCanNotSetWhileActive do
      Writeln(E.Message);
  end;
  if IdSMTP1.Connected then
    IdSMTP1.Disconnect;
end;

Warum nicht einfach gleich:


Delphi-Quellcode:
procedure Tfrm_POP3SMTPTester.btn_SendMailClick(Sender: TObject);
var
  m: TIdMessage;
begin
  try
  [ Gedöns ]
  except
    on E: Exception do
      WriteLn(E.Message);
  end;
  if IdSMTP1.Connected then
    IdSMTP1.Disconnect;
end;
?

Jerry 21. Sep 2010 12:27

AW: Authentifiziertes SMTP
 
Vielen Dank!!!! :-)
Funzt nun.

Den letzen Input zu "warum nicht gleich...."
Weil sonst nicht eine genaue Fehlermeldung ausgegeben werden würde...
Habe es probiert, bei allen Fehlern würde immer die gleiche Fehlermeldung ausgegeben werden.

Hier noch der Code falls jemand sich auch die Hörner abstossen muss..

Delphi-Quellcode:
procedure Tfrm_POP3SMTPTester.btn_SendMailClick(Sender: TObject);
var
  m: TIdMessage;
begin
  try
    if IdSMTP1.Connected then
      IdSMTP1.Disconnect;
    IdSMTP1.Port := StrToInt(edt_SMTPPort.Text);
    IdSMTP1.Host := edt_SMTPHost.Text;
    IdSMTP1.Username := edt_SMTPUser.Text;
    IdSMTP1.Password := edt_SMTPPassWort.Text;
    IdSMTP1.Connect;
    if chkb_Auth.Checked then
    begin
      IdSMTP1.Authenticate;
    end;
    if IdSMTP1.Connected then
    begin
      m := TIdMessage.Create(self);
      m.From.Text := edt_from.Text;
      m.Recipients.Add.Text := edt_to.Text;
      m.Subject := 'TestMail from SMTP Checker';
      m.Body.Text := 'Dieses Mail wurde zu Testzwecken versendet';
      IdSMTP1.Send(m);
      IdSMTP1.Disconnect;
      showmessage('Das Mail wurde erfolgreich versendet!');
    end;
  except
    on E: EIdTextInvalidCount do
      Writeln(E.Message);
    on E: EIdMessageCannotLoad do
      Writeln(E.Message);
    on E: EIdPOP3Exception do
      Writeln(E.Message);
    on E: EIdTextInvalidCount do
      Writeln(E.Message);
    on E: EIdMessageCannotLoad do
      Writeln(E.Message);
    on E: EIdDoesNotSupportAPOP do
      Writeln(E.Message);
    on E: EIdUnrecognizedReply do
      Writeln(E.Message);
    on E: EIdTLSClientException do
      Writeln(E.Message);
    on E: EIdTLSClientSSLIOHandlerRequred do
      Writeln(E.Message);
    on E: EIdTLSClientCanNotSetWhileConnected do
      Writeln(E.Message);
    on E: EIdTLSClientTLSNotAvailable do
      Writeln(E.Message);
    on E: EIdTLSClientTLSNegCmdFailed do
      Writeln(E.Message);
    on E: EIdTLSClientTLSHandShakeFailed do
      Writeln(E.Message);
    on E: EIdTLSServerException do
      Writeln(E.Message);
    on E: EIdTLSClientCanNotSetWhileActive do
      Writeln(E.Message);
    {on E: Exception do
      Writeln(E.Message); }
  end;
  if IdSMTP1.Connected then
    IdSMTP1.Disconnect;
end;

shmia 21. Sep 2010 15:53

AW: Authentifiziertes SMTP
 
Zitat:

Zitat von Jerry (Beitrag 1050941)
Den letzen Input zu "warum nicht gleich...."
Weil sonst nicht eine genaue Fehlermeldung ausgegeben werden würde...
Habe es probiert, bei allen Fehlern würde immer die gleiche Fehlermeldung ausgegeben werden.

Das kann nur ein Irrtum deinerseits sein.
Wenn du mit deiner Aussage richtig liegen würdest, würde das bedeuten das Delphi in Bezug auf Exceptions eine Fehlkonstruktion ist. (ist es aber nicht!)
Versuch mal:
Delphi-Quellcode:
except
  on E: Exception do
    Writeln(E.Classname+ ' - ' + E.Message);
end;


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