Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Socket Error # 10022 (https://www.delphipraxis.net/100105-socket-error-10022-a.html)

T.E. 22. Sep 2007 11:20


Socket Error # 10022
 
Hallo!

Ich bin gerade dabei ein kleines Email Versende Prog zu schreiben. Dazu benutze ich die Indys und als ich nun mein Programm compilieren wollt bekam ich folgende Meldung zurück...

---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Register.exe ist eine Exception der Klasse EIdSocketError aufgetreten. Meldung: 'Socket Error # 10022
Invalid argument.'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
---------------------------
OK Hilfe
---------------------------


Ich hab dann auf Ok geklickt und mit einzelnem schritt vorwärts weitergemacht...und bekam dann folgende Meldung:

---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Register.exe ist eine Exception der Klasse EIdCouldNotBindSocket aufgetreten. Meldung: 'Could not bind socket. Address and port are already in use.'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
---------------------------
OK Hilfe
---------------------------

Welche bei erneutem Fortsetzen ... mit der Meldung:
---------------------------
Register
---------------------------
Could not bind socket. Address and port are already in use.
---------------------------
OK
---------------------------
"belohnt" wurde...

Woran liegt das??

Sowohl meine E-Mailadresse als auch der Port ist richtig...

wicht 22. Sep 2007 11:58

Re: Socket Error # 10022
 
Das ließt sich erstmal so als ob du versuchen würdest, einen Indy-Server zu aktivieren.
Beim Client Host und Port gesetzt? Mehr fällt mir so auch nicht ein.. Ein bisschen Code wäre vielleicht auch nicht schlecht.

T.E. 22. Sep 2007 13:54

Re: Socket Error # 10022
 
also hier ist der code für das senden...

Delphi-Quellcode:
unit SendUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, XPMan, ComCtrls, StdCtrls, IdMessage, IdTCPConnection,
  IdTCPClient, IdExplicitTLSClientServerBase, IdMessageClient, IdSMTPBase,
  IdSMTP, IdIOHandler, IdIOHandlerSocket, IdIOHandlerStack, IdSSL, IdSSLOpenSSL,
  IdBaseComponent, IdComponent, IdServerIOHandler, IdAntiFreezeBase,
  IdAntiFreeze, Menus, IdIPWatch, IdVCard, IdUserPassProvider;

type
  TSend = class(TForm)
    Send: TButton;
    msg: TMemo;
    ListBox1: TListBox;
    IdSMTP1: TIdSMTP;
    IdMessage1: TIdMessage;
    IdAntiFreeze1: TIdAntiFreeze;
    procedure SendClick(Sender: TObject);
    procedure BackClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure CancelClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure smtpSendMailStatus(ASender: TObject;
      const AStatus: TIdStatus; const AStatusText: String);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    procedure Status(AMsg: string);
  end;

var
  Send: TSend;

implementation

uses
  commctrl, OtherOptionsUnit, RegisterUnit;
{$R *.dfm}

procedure TSend.FormShow(Sender: TObject);
var
  r: TRect;
begin
Msg.text := 'Hallo:' +  #13#10 + Hallo.text;
end;

procedure TSend.SendClick(Sender: TObject);
var s : string;
begin
 Send.Enabled := False; try
    with idmessage1 do begin
      Clear;
      From.Text := Trim('Bsp@bsp.de');     {Absender}
      Recipients.Add.Text := Trim('Hallo@Tschüß.de');   {Empfänger}
      Subject := Trim('Ich habe leider keinen Betreff'); {Betreff}
      Body.Assign(msg.Lines); {Hier kommt die Nachricht hinein}
    end;
    with IDSmtp1 do begin                
      Username := Trim('Bsp');
      Password := Trim('BspPasswort');
      Host := Trim('BspHost');
      Port := 25;                      
      Connect; try
      Send(idmessage1);
      finally Disconnect; end;
    end;
    Status('Completed');
  finally Send.Enabled := True; end;
    s := 'Die Nachricht wurde an den EMpfänger versendet!';
  ShowMessage(s);
  close;
Application.terminate;
end;

procedure TSend.smtpSendMailStatus(ASender: TObject;
  const AStatus: TIdStatus; const AStatusText: String);
begin
  Status(AStatusText);
end;

procedure TSend.Status(AMsg: string);
begin
  ListBox1.ItemIndex := ListBox1.Items.Add(AMsg);
  Application.ProcessMessages;
  Application.ProcessMessages;
  Application.ProcessMessages;
end;

end.
Also wie dem einen oder anderen vllt. schon aufgeffallen ist, ist es bei diesem Code nicht möglich den Absender oder Empfänger zu ändern (es seiden mann besitzt den quellcode... aber naja...

Das sind die wichtigsten codezeilen (ganauer gesagt sind das die seit denen ich das Projekt nicht mehr Fhlerfrei ausführen kann...)

Eine allgemeine Info ist noch: Das Prog hat insgesamt 4 Formulare... wovon eins hier ja zu sehen ist und das andere nur ein paar edits enthält, deren inhalt die nachricht ist...

wicht 24. Sep 2007 14:59

Re: Socket Error # 10022
 
Hi!

Also, diese TIdSMTP und TIdMessage habe ich noch nie benutzt. Weiß also nicht, was da für Dinge passieren können :?
Um das Connect würde ich noch ein try...except drumbauen. Der Host auch? (Frage die dumme Frage, weil du oben nur geschrieben hast der Port passt)..
Sorry, so richtig kann ich dir nicht helfen.. Vielleicht teste ich das ganze aber selbst später mal und melde mich dann nochmal..

Edit: Also, ich habe deinen Code mal getestet. Bei mir sieht das jetzt so aus:

Delphi-Quellcode:
    with idmessage1 do
    begin
      Clear;
      From.Text := Trim('meine@email.de');     {Absender}
      Recipients.Add.Text := Trim('meine@email.de');   {Empfänger}
      Subject := Trim('Ich habe leider keinen Betreff'); {Betreff}
      Body.Assign(msg.Lines); {Hier kommt die Nachricht hinein}
    end;

    with IDSmtp1 do
    begin
      Host := Trim('smtp.email.de');
      Port := 25;
      try
        Connect;
        Send(idmessage1);
      except
        on e: Exception do
        begin
          ShowMessage(e.Message + e.ClassName);
        end;
      end;
    end;
Das Funktioniert hier einfach nur. Den Benutzernamen und das Passwort habe ich rausgemacht, im IdSMTP1 AutoType auf atNone gesetzt. Ich muss halt vorher mein Konto abfragen, dann ist es für x Minuten zum Mail senden freigeschaltet. Liegt da eventuell bei dir der Fehler? Das try...except könnte dir auch weiterhelfen. So, das wars von mir :)

T.E. 24. Sep 2007 15:25

Re: Socket Error # 10022
 
Also Port ist in der Regel ja immer 25 und deshalb hab ich den weg gelassen... un die restlichen Infos wären... bei eneme Web.de emailkonto nur der server (smtp.web.de) und der rest ist ja klar....usrename, passwort, emailadressen....

Aber zurück zu mienem problem ... vielleicht können das ja ein paar mal testen...


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