segun esto del rfc1939 te pone una serie de pasos para echara trabajar un server pop, pero hay algo que me fall y no se lo que es,
aca les dejo la unit para que la repasen y prueben ustedes mismos con la ayuda de POPServer demo en indy 9..
ya he echo como veran que autentifique contra la db que esta en mysql server, y entrega el stat pero no pasa de ahi. pueden usar cualquier tipo de cliente email aunque recomiendo usar el maiclient demo que tambien se encuentra ahi. basicamente todos deben hacer lo mismo..
por favor echenme una mano sino de esta salgo loco jejeje.
Código Delphi
[-]
unit MainFrm;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, IdBaseComponent, IdComponent, IdTCPServer, IdPOP3Server, StdCtrls, IdMessage, ZSqlMonitor, DB, ZAbstractRODataset, ZAbstractDataset, ZDataset, ZConnection; type TfrmMain = class(TForm) btnExit: TButton; IdPOP3Server1: TIdPOP3Server;
Button1: TButton; Button2: TButton;
ZConnection1: TZConnection; ZQuery1: TZQuery;
DataSource1: TDataSource; ZSQLMonitor1: TZSQLMonitor; IdMessage1: TIdMessage;
alogs: TMemo; Button3: TButton; procedure btnExitClick(Sender: TObject);
procedure IdPOP3Server1Connect(AThread: TIdPeerThread);
procedure FormActivate(Sender: TObject);
procedure IdPOP3Server1CheckUser(AThread: TIdPeerThread; LThread: TIdPOP3ServerThread);
procedure IdPOP3Server1DELE(ASender: TIdCommand; AMessageNum: Integer);
procedure IdPOP3Server1Exception(AThread: TIdPeerThread AException: Exception);
procedure IdPOP3Server1LIST(ASender: TIdCommand; AMessageNum: Integer);
procedure IdPOP3Server1QUIT(ASender: TIdCommand);
procedure IdPOP3Server1RETR(ASender: TIdCommand; AMessageNum: Integer);
procedure IdPOP3Server1RSET(ASender: TIdCommand);
procedure IdPOP3Server1STAT(ASender: TIdCommand);
procedure IdPOP3Server1TOP(ASender: TIdCommand; AMessageNum, ANumLines: Integer);
procedure IdPOP3Server1UIDL(ASender: TIdCommand; AMessageNum: Integer);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure ZSQLMonitor1LogTrace(Sender: TObject; Event: TZLoggingEvent);
procedure IdPOP3Server1Disconnect(AThread: TIdPeerThread);
private
public
procedure ConectToMYSQLserver;
procedure DisConectToMYSQLserver;
end;
var frmMain: TfrmMain;
authuser,authpasw:string;
NewCount,SizeM :integer;
implementation
{$R *.DFM}
function GetLocalT: String;
var stSystemTime : TSystemTime;
begin
Windows.GetLocalTime( stSystemTime );
Result := DateTimeToStr( SystemTimeToDateTime( stSystemTime ) );
end;
procedure TfrmMain.ConectToMYSQLserver;
begin
try
ZConnection1.Disconnect;
ZConnection1.HostName := '127.0.0.1';
ZConnection1.Database := 'popserver';
ZConnection1.User := 'user';
ZConnection1.Password := 'pass';
ZConnection1.Port:=3306;
ZConnection1.Connect;
alogs.Lines.Add(GetLocalT+' conectado MYSQL Server');
except
alogs.Lines.Add(GetLocalT+' error to conect MYSQL Server');
next;
end;
end;
procedure TfrmMain.DisConectToMYSQLserver;
begin
try
if ZConnection1.Connected then
begin
ZConnection1.Disconnect;
alogs.Lines.Add(GetLocalT+' desconectado MYSQL Server');
end;
except
alogs.Lines.Add(GetLocalT+' error to disconect MYSQL Server');
next;
end;
end;
TfrmMain.btnExitClick(Sender: TObject);
begin
if IdPop3Server1.Active=True then
IdPop3Server1.Active:=False;
Application.Terminate;
end;
procedure TfrmMain.IdPOP3Server1Connect(AThread: TIdPeerThread);
begin
alogs.Lines.Add(GetLocalT+' POP3Server-CONECT');
end;
procedure TfrmMain.FormActivate(Sender: TObject);
begin
IdPop3Server1.Active:=True;
end;
procedure TfrmMain.IdPOP3Server1CheckUser(AThread: TIdPeerThread;
LThread: TIdPOP3ServerThread);
var
RC:integer;
begin
authuser :=LThread.Username;
authpasw :=LThread.Password;
alogs.Lines.Add(GetLocalT+' POP3Server-CHECKUSER');
alogs.Lines.Add(GetLocalT+' USER:'+authuser+' PASW:'+authpasw );
ZQuery1.Close; ZQuery1.Fields.Clear; ZQuery1.SQL.Text:='SELECT * FROM login WHERE user='''+authuser+''' AND pasw='''+authpasw+'''' ; ZQuery1.ExecSQL; ZQuery1.Open; ZQuery1.First; RC:=ZQuery1.RecordCount; if RC = 0 then begin alogs.Lines.Add(GetLocalT+ ' Authentication failed'); end else begin alogs.Lines.Add(GetLocalT+ ' Authentication OK'); LThread.State := Trans; end; ZQuery1.Close; end;