Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-04-2014
Avatar de FideRosado
FideRosado FideRosado is offline
Miembro
 
Registrado: jun 2010
Ubicación: Pinar del Rio Cuba
Posts: 146
Poder: 14
FideRosado Va por buen camino
Ayuda con este proyecto!!!

Hola amigos, aca estoy tratando de entender este proyecto jje. se trata nadamenos que de un servidor POP para mis clientes de la red, estoy pensando en usar tambien SMTP server.

aca estoy viendo algo parecido solo que no logro entender bien..
espero que alguno de ustedes se interesen en el, ya que es algo muy util..

POP server
http://www.devarticles.com/c/a/Delph...a-POP3-Server/

SMTP server
http://www.devarticles.com/c/a/Delph...n-SMTP-Server/
Responder Con Cita
  #2  
Antiguo 24-04-2014
Avatar de FideRosado
FideRosado FideRosado is offline
Miembro
 
Registrado: jun 2010
Ubicación: Pinar del Rio Cuba
Posts: 146
Poder: 14
FideRosado Va por buen camino
Base de datos

Pues tambien estoy pensando en vincular MySQL con dicha aplicacion, ya que es facil de trabajar y ademas , en la webclient uso php para recojer los datos, y solo la aplicacion hace su trabajo ejej..
Responder Con Cita
  #3  
Antiguo 24-04-2014
Avatar de FideRosado
FideRosado FideRosado is offline
Miembro
 
Registrado: jun 2010
Ubicación: Pinar del Rio Cuba
Posts: 146
Poder: 14
FideRosado Va por buen camino
IdPOP3

en el componente idpop3 se encuentra esta funccion

Código Delphi [-]
function TIdPOP3.CheckMessages: longint;
var
  s: string;
begin
  Result := 0;
  SendCmd('STAT', wsOk);    {Do not Localize}
  // Only gets here if exception is not raised
  s := LastCmdResult.Text[0];
  if Length(s) > 0 then begin
    Result := StrToInt(Copy(s, 1, IndyPos(' ', s) - 1));    {Do not Localize}
  end;
end;

pero que sucede pues que le envio este parametro en esta forma y sus posibles variantes y devuelve error

Código Delphi [-]
procedure TForm1.IdPOP3Server1STAT(ASender: TIdCommand);
begin
  ASender.Reply.SetReply( OK , IntToStr(40)+'  '+IntToStr(40) );// esta es una
  ASender.Reply.SetReply( 1 , IntToStr(40)+'  '+IntToStr(40) );// esta es la otra
end;

como veran, no me sale.. si keda con el OK me da error en el OK..
ahy alguien aca que sepa como es..
Responder Con Cita
  #4  
Antiguo 29-04-2014
Avatar de FideRosado
FideRosado FideRosado is offline
Miembro
 
Registrado: jun 2010
Ubicación: Pinar del Rio Cuba
Posts: 146
Poder: 14
FideRosado Va por buen camino
respuesta

hola necesito que ustedes me revisen estas lineas y me diga si estan correctas,pues creo que me falte algo porque no me funcionan.

procedure TfrmMain.IdPOP3Server1TOP(ASender: TIdCommand; AMessageNum, ANumLines: Integer);
begin
// Aquí es donde el client ha pedido a las líneas TOP X de una determinado Mensaje a ser enviado a ellos

if (AMessageNum > 0) AND (ANumLines > 0) then begin

ASender.Thread.Connection.WriteLn('+OK');
ASender.Thread.Connection.WriteLn('qFrom: raulrr91@gmail.com');
ASender.Thread.Connection.WriteLn('To: fiderosado@gmail.com ');
ASender.Thread.Connection.WriteLn('Subject: este es el top');
ASender.Thread.Connection.WriteLn('');
ASender.Thread.Connection.WriteLn('Message: de cojones');

end;
end;
Responder Con Cita
  #5  
Antiguo 29-04-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Recuerda poner los tags al código fuente, ejemplo:



Gracias
Responder Con Cita
  #6  
Antiguo 29-04-2014
Avatar de FideRosado
FideRosado FideRosado is offline
Miembro
 
Registrado: jun 2010
Ubicación: Pinar del Rio Cuba
Posts: 146
Poder: 14
FideRosado Va por buen camino
respuesta

ke sabes de este tema casimiro.
Responder Con Cita
  #7  
Antiguo 29-04-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
No sé exactamente qué estás haciendo, qué problema tienes, qué no te funciona, etc.
Responder Con Cita
  #8  
Antiguo 29-04-2014
Avatar de FideRosado
FideRosado FideRosado is offline
Miembro
 
Registrado: jun 2010
Ubicación: Pinar del Rio Cuba
Posts: 146
Poder: 14
FideRosado Va por buen camino
respuesta

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 [-]
{ $HDR$} 
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     { Private declarations }
     public     { Public declarations }
     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; 
 // CONECTAR SERVER MYSQL 
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   
// ACA ESTA EL RESULTADO   
alogs.Lines.Add(GetLocalT+' error to conect MYSQL Server');      
next;   
end; 
end;  
// DESCONECTAR SERVER MYSQL 
procedure TfrmMain.DisConectToMYSQLserver; 
begin 
try   
if ZConnection1.Connected then 
begin   
ZConnection1.Disconnect;   
alogs.Lines.Add(GetLocalT+' desconectado MYSQL Server');   
end;   
except   
// ACA ESTA EL RESULTADO   
alogs.Lines.Add(GetLocalT+' error to disconect MYSQL Server');     
 next;   
end; 
end;  
 //If user presses exit button close socket and exit procedure 
TfrmMain.btnExitClick(Sender: TObject);
begin  
if IdPop3Server1.Active=True then   
IdPop3Server1.Active:=False;  
Application.Terminate; 
end;  
procedure TfrmMain.IdPOP3Server1Connect(AThread: TIdPeerThread); 
begin  
// Cuando un clinet conecta a nuestro servidor, debemos responder con + OK o ERR- 
// Establezca esta vía Greeting.Text en tiempo de ejecución, o posiblemente en OnBeforeCommandHandler? 
// También se puede desear para inicializar algunas vars mundiales aquí, establezca el cuadro POP3 a estado de bloqueo, etc  
alogs.Lines.Add(GetLocalT+' POP3Server-CONECT'); 
end;  
//Activate the server socket when activating server main window. 
procedure TfrmMain.FormActivate(Sender: TObject);
 begin
  IdPop3Server1.Active:=True; 
end;  
// This is where you validate the user/pass credentials of the user logging in 
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 );  
// ConectToMYSQLserver;      
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;  // This is where the client program issues a delete command for a particular message procedure TfrmMain.IdPOP3Server1DELE(ASender: TIdCommand;   AMessageNum: Integer); begin  // Si se ha eliminado el mensaje, y luego volver un comando éxito de la siguiente manera; // ASender.Thread.Connection.Writeln ('+ OK - Mensaje' + IntToStr (AMessageNum) + 'borrado') // De lo contrario, si se produjo un error en eliminar el mensaje o el número de mensaje // No existió en el primer lugar, y luego devolver el siguiente: // ASender.Thread.Connection.Writeln ('-ERR - Mensaje' + IntToStr (AMessageNum) + 'no se eliminan porque .... [razón]') // Por lo general, los mensajes se eliminan después de ser recuperada desde el servidor pop3 // Esto se hace cuando senta cliente DELE comando después de recibirlo Comando // Cliente es algo así como DELE 1 lo que significa eliminar el mensaje 1 // Tenga en cuenta, usted no debe realmente borrar el mensaje en este momento, sólo lo marca como eliminado. // Las supresiones se debe manejar en el evento SALIR.   alogs.Lines.Add(GetLocalT+' POP3Server-DELE');  ASender.Thread.Connection.WriteLn('+OK message 1 deleted'); end;  procedure TfrmMain.IdPOP3Server1Exception(AThread: TIdPeerThread;   AException: Exception); begin // Handle any exceptions given by the thread here alogs.Lines.Add(GetLocalT+' POP3Server-exceptions'); end;  procedure TfrmMain.IdPOP3Server1LIST(ASender: TIdCommand;   AMessageNum: Integer); begin // antes de la recuperación de mensajes, el cliente solicita una lista de mensajes // El servidor responde con un + OK seguido por el número de entrega // mensajes y longitud de los mensajes en bytes. // Después de esto una separada lista de cada mensaje y su longitud se envía al cliente. // aquí sólo tenemos un mensaje, pero podemos continuar con el mensaje número y su longitud, una por línea y, // finalmente, un '.' carácter. // Formato de comandos del cliente es LISTA   alogs.Lines.Add(GetLocalT+' POP3Server-LIST');  ASender.Thread.Connection.WriteLn('OK 1 messages 40 octets');  ASender.Thread.Connection.WriteLn('1 40');  ASender.Thread.Connection.WriteLn('.');  // The trailing . line is IMPORTANT!! end;  procedure TfrmMain.IdPOP3Server1QUIT(ASender: TIdCommand); begin  // Este evento se dispara en un cliente SALIR (una desconexión correcta) // Aquí se debería eliminar los mensajes que se han marcado con el DELE.  alogs.Lines.Add(GetLocalT+' POP3Server-QUIT'); // NOTE: The +OK response is AUTOMATICALLY sent back to the client, and the connect dropped. end;  procedure TfrmMain.IdPOP3Server1RETR(ASender: TIdCommand;   AMessageNum: Integer); begin   // Cliente inicia la recuperación de cada mensaje mediante la emisión de un comando RETR  // Al servidor. Servidor responderá + OK y continuará enviando  // Mensaje en sí mismo. Cada mensaje se guarda en una base de datos a la llegada uppon  // Por servidor smtp y ahora se entrega al agente de correo de usuario por el servidor pop3.  // Aquí no leemos el correo de un almacenamiento, sino que entregamos una muestra  // Mail desde el programa en su interior. Podemos entregar múltiples mails usando  // Este método. Formato del comando RETR es algo así como  // RETR 1 o 2 RETR etc   alogs.Lines.Add(GetLocalT+' POP3Server-RETR');    ASender.Thread.Connection.WriteLn('+OK 40 octets');  ASender.Thread.Connection.WriteLn('From: demo@projectindy.org');  ASender.Thread.Connection.WriteLn('To: you@yourdomain.com ');  ASender.Thread.Connection.WriteLn('Subject: Hello ');  ASender.Thread.Connection.WriteLn('');  ASender.Thread.Connection.WriteLn('Hello world! This is email body.');  ASender.Thread.Connection.WriteLn('.'); end;  procedure TfrmMain.IdPOP3Server1RSET(ASender: TIdCommand); begin // Aquí es donde el cliente desea restablecer el estado actual // Esto se puede utilizar para restablecer una lista de eliminaciones pendientes, etc alogs.Lines.Add(GetLocalT+' POP3Server-RSET'); end;  procedure TfrmMain.IdPOP3Server1STAT(ASender: TIdCommand); var  RC,I:integer; begin // Aquí es donde el cliente ha solicitado el Estatuto del buzón // Cuando el cliente pide una estadística del servidor de mensajes contestará // enviando un + OK seguido por el número de mensajes y la duración de los // Formato de mensaje del cliente es STAT    NewCount:=0;   SizeM   :=0;   alogs.Lines.Add(GetLocalT+' POP3Server-STAT');    ZQuery1.Close;   ZQuery1.Fields.Clear;   ZQuery1.SQL.Text:='SELECT * FROM `email` WHERE `to` = '''+authuser+'''';   ZQuery1.ExecSQL;   ZQuery1.Open;    ZQuery1.First;   RC:=ZQuery1.RecordCount;   NewCount:=RC;   alogs.Lines.Add(GetLocalT+' POP3Server-STAT-RC: '+IntToStr(NewCount));   if RC > 0 then begin    try        ZQuery1.First;       while not ZQuery1.EOF do       begin          for I := 0 to RC -1 do         begin             SizeM:=StrToInt(ZQuery1.Fields[0].AsString);             alogs.Lines.Add(GetLocalT+' POP3Server-STAT-SizeM: '+ IntToStr(SizeM) );             ZQuery1.Next;         end;        end;      // envia el numero de ensajes y el tama'no del buzon        alogs.Lines.Add(GetLocalT+ format(' POP3Server-STAT +OK %d %d ',[ NewCount, SizeM ]) );        ASender.Thread.Connection.WriteLn( format('+OK %d %d ',[ NewCount , SizeM ]) );     except       next;     end;      //  alogs.Lines.Add(GetLocalT+ format(' +OK %d %d ',[IntToStr(1), IntToStr(30)]) );     //   ASender.Thread.Connection.WriteLn( format('+OK %d %d ',[IntToStr(1), IntToStr(30)]) );     end;    // ASender.Thread.Connection.WriteLn('+OK 1 40');  end;  procedure TfrmMain.IdPOP3Server1TOP(ASender: TIdCommand; AMessageNum,  ANumLines: Integer); begin // Aquí es donde el cleint ha pedido a las líneas TOP X de una determinada // Mensaje a ser enviado a ellos      alogs.Lines.Add(GetLocalT+' POP3Server-TOP X');      alogs.Lines.Add(GetLocalT+' POP3Server-TOP X-AMessageNum '+IntToStr(AMessageNum) );      alogs.Lines.Add(GetLocalT+' POP3Server-TOP X-ANumLines '+IntToStr(AMessageNum) );        if (AMessageNum > 0) AND (ANumLines > 0) then begin          ASender.Thread.Connection.WriteLn('+OK 40');         ASender.Thread.Connection.WriteLn('Date: Tue, 4 Feb 2014 10:14:05 -0600');         ASender.Thread.Connection.WriteLn('To: user@dominio.com ');         ASender.Thread.Connection.WriteLn('From: user@dominio.com ');         ASender.Thread.Connection.WriteLn('Subject: hola mundo');         ASender.Thread.Connection.WriteLn('Message-ID: <0a0c6429937f41ba6s56a5sd@dominio.com>');         ASender.Thread.Connection.WriteLn('.');       end; end;  procedure TfrmMain.IdPOP3Server1UIDL(ASender: TIdCommand;   AMessageNum: Integer); begin  // Aquí es donde el cliente ha solicitado el identificador único (UIDL) de cada // Mensaje, o un mensaje particular para ser enviado a ellos.   alogs.Lines.Add(GetLocalT+' POP3Server-UIDL'); end;  procedure TfrmMain.Button1Click(Sender: TObject); begin    ConectToMYSQLserver; end;  procedure TfrmMain.Button2Click(Sender: TObject); begin DisConectToMYSQLserver; end;  procedure TfrmMain.ZSQLMonitor1LogTrace(Sender: TObject;   Event: TZLoggingEvent); begin alogs.Lines.Add(GetLocalT+' '+Event.AsString); end;  procedure TfrmMain.IdPOP3Server1Disconnect(AThread: TIdPeerThread); begin alogs.Lines.Add(GetLocalT+' POP3Server-DISCONECT'); end;  end.

Última edición por marcoszorrilla fecha: 02-05-2014 a las 22:15:37.
Responder Con Cita
  #9  
Antiguo 29-04-2014
Avatar de FideRosado
FideRosado FideRosado is offline
Miembro
 
Registrado: jun 2010
Ubicación: Pinar del Rio Cuba
Posts: 146
Poder: 14
FideRosado Va por buen camino
respuesta

aca les pongo el proy. adjunto
Archivos Adjuntos
Tipo de Archivo: zip POP3Server.zip (19,3 KB, 5 visitas)
Responder Con Cita
  #10  
Antiguo 30-04-2014
Avatar de FideRosado
FideRosado FideRosado is offline
Miembro
 
Registrado: jun 2010
Ubicación: Pinar del Rio Cuba
Posts: 146
Poder: 14
FideRosado Va por buen camino
respuesta

he usado estas lineas para el RETR, pero me sigue dando un error
que dice :

//////////////////////////////////////////////////////////////////
/// Unrecognized POP3 Responce Header: ///
/// " ///
/// " ///
/////////////////////////////////////////////////////////////////


Código Delphi [-]
procedure TfrmMain.IdPOP3Server1RETR(ASender: TIdCommand; AMessageNum: Integer);
var
menssage:TStringList;
begin

 // Cliente inicia la recuperación de cada mensaje mediante la emisión de un comando RETR
 // Al servidor. Servidor responderá + OK y continuará enviando
 // Mensaje en sí mismo. Cada mensaje se guarda en una base de datos a la llegada uppon
 // Por servidor smtp y ahora se entrega al agente de correo de usuario por el servidor pop3.
 // Aquí no leemos el correo de un almacenamiento, sino que entregamos una muestra
 // Mail desde el programa en su interior. Podemos entregar múltiples mails usando
 // Este método. Formato del comando RETR es algo así como
 // RETR 1 o 2 RETR etc

 menssage:= TStringList.Create;
 menssage.LoadFromFile(ExtractFilePath(Application.ExeName)+ '\1.msg');

        with ASender.Thread.Connection do begin
          WriteLn('+OK '+ IntToStr(Length(menssage.Text))+ ' octets');
          WriteLn(menssage.Text);
          WriteLn('.');
        end;
        menssage.Free;

end;
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Ayuda con proyecto peiopirata Conexión con bases de datos 4 14-02-2011 13:33:13
!!Ayuda con proyecto Programación Reinaldo08 C++ Builder 5 10-10-2008 00:01:50
Ayuda con proyecto cientifico oregon Varios 43 21-06-2007 08:00:12
Sugieranme algun rumbo en este Proyecto AzidRain Varios 2 25-02-2007 04:34:06
ayuda proyecto alex_jf Varios 5 29-04-2006 01:43:48


La franja horaria es GMT +2. Ahora son las 04:23:03.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi