Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-02-2004
Avatar de X-JABS
X-JABS X-JABS is offline
Miembro
 
Registrado: may 2003
Ubicación: Ometepec, Gro. Mexico
Posts: 26
Poder: 0
X-JABS Va por buen camino
Smtp Indy

hola a todos, tengo una duda con el componente idSMTP de las indy que viene en Delphi6, el problema mas que nada es con un progressbar.. por que deseo que el usuario tenga a la vista graficamente el envio del mail con los archivos adjuntos.. ya probe los enventos onWORK, y OnBeginWork, pero no doy aun con nada, les agredesco desde ahora la información que me proporcionen .. nos vemos...
__________________
'seY sbaJ, K28D4! 52:11 - > Ok
Responder Con Cita
  #2  
Antiguo 12-02-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Pues vas por buen camino...

OnWorkBegin:

Cita:
Empezado por Indy Help
OnWorkBegin is an event of type TWorkBeginEvent as implemented in TIdComponent. OnWorkBegin is used in conjunction with BeginWork to notify Indy components and classes when buffered read or write operations are initiated. OnWorkBegin is generally used to control the update of progress indicators or GUI components.

AWorkMode indicates the operation performed and the notification sent to OnWorkBegin. AWorkMode can contain one of the following values:

wmRead - The component is reading data from the peer.
wmWrite - The component is sending data to the peer.


AWorkCountMax indicates the maximum number of bytes expected for the operation sent to OnWorkBegin, or 0 when the number of bytes not known.
OnWork:

Cita:
Empezado por Indy Help
OnWork is the event handler for the event TWorkEvent. OnWork is used in conjunction with DoWork to notify Indy components and classes when buffered read or write operations are invoked. OnWork is generally used to control the update of progress indicators or GUI components.

AWorkMode indicates the operation performed and the notification sent to OnWork. AWorkMode can be contain one of the following values:

wmRead - The component is reading data from the peer.
wmWrite - The component is sending data to the peer.


AWorkCount indicates the number of bytes affected by the operation sent to OnWork
OnWorkEnd:

Cita:
Empezado por Indy Help
OnWorkEnd is an event of type TWorkEndEvent as implemented in TIdComponent. OnWorkEnd is used in conjunction with EndWork to notify Indy components and classes when buffered read or write operations are concluded.

AWorkMode indicates the operation performed and the notification sent to OnWork. AWorkMode can contain one of the following values:

wmRead - The component is reading data from the peer.
wmWrite - The component is sending data to the peer.


AWorkCount contains the number of bytes affected by the operation.
Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #3  
Antiguo 12-02-2004
Avatar de DarkByte
DarkByte DarkByte is offline
Miembro
 
Registrado: sep 2003
Ubicación: Desconocido
Posts: 1.322
Poder: 22
DarkByte Va por buen camino
Este es el código de un mailer anónimo que estube haciendo hace tiempo, cuando me pregunté cómo funcionarían estos:
Código:
         SMTP1.UserID := PalabraAleatoria (6);
         Estado1.Caption := 'Conectando...';
            try SMTP1.Connect Except
                ShowMessage ('Error al conectar con el servidor SMTP');
            end;
         Estado1.Caption := 'Enviando datos...';
         Progreso1.Position := 30;
         SMTP1.PostMessage.FromAddress := PalabraAleatoria (7)+'@'+ PalabraAleatoria (5)+'.'+PalabraAleatoria (3);
         SMTP1.PostMessage.FromName := PalabraAleatoria (8);
         SMTP1.PostMessage.ToAddress.Text := ePara.Text;
         SMTP1.PostMessage.Body.Text := eMensaje.Text;
         SMTP1.PostMessage.Subject := eAsunto.Text;
         Estado1.Caption := 'Enviando correo...';
         Progreso1.Position := 70;
         SMTP1.SendMail;
         Progreso1.Position := 100;
         Estado1.Caption := 'Desconectando...';
         SMTP1.Disconnect;
Como siempre, confío en mis compañeros de clubdelphi para que me corrijan
__________________
:)
Responder Con Cita
  #4  
Antiguo 13-02-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Evidentemente este trozo de código no tiene nada que ver con la pregunta original, pues simplemente "asume" los porcentajes de avance del proceso de enviar un email... sin archivos adjuntos...

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #5  
Antiguo 13-02-2004
Avatar de DarkByte
DarkByte DarkByte is offline
Miembro
 
Registrado: sep 2003
Ubicación: Desconocido
Posts: 1.322
Poder: 22
DarkByte Va por buen camino
Okz, lo siento. En caso de los archivos adjuntos puedes poner otra barra de progreso en la que Max := total de bytes del adjunto y Position := los bytes que lleva
__________________
:)
Responder Con Cita
  #6  
Antiguo 13-02-2004
Avatar de X-JABS
X-JABS X-JABS is offline
Miembro
 
Registrado: may 2003
Ubicación: Ometepec, Gro. Mexico
Posts: 26
Poder: 0
X-JABS Va por buen camino
Hola Foro, pues he investigado lo siguiente pero con el componente de FTP:

procedure TMainForm.IdFTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCountMax: Integer);
begin
if AWorkCountMax > 0 then
ProgressBar1.Max := AWorkCountMax
else
ProgressBar1.Max := BytesToTransfer;
End;

procedure TMainForm.IdFTP1Work(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCount: Integer);
Begin
ProgressBar1.Position := AWorkCount;
End;

Cuando la Variable BytesToTransfer anteriormente lo toma de

BytesToTransfer := IdFTP1.Size(Name);

Cuando ese dato en SMTP, no se de donde tomarlo ya que no tiene la misma propiedad
__________________
'seY sbaJ, K28D4! 52:11 - > Ok
Responder Con Cita
  #7  
Antiguo 13-02-2004
Avatar de DarkByte
DarkByte DarkByte is offline
Miembro
 
Registrado: sep 2003
Ubicación: Desconocido
Posts: 1.322
Poder: 22
DarkByte Va por buen camino
Si la ruta del archivo adjunto está en un edit, puedes usar el siguiente truco de trucomanía:
Código:
procedure TForm1.Button1Click(Sender: TObject);
  function cuantosbytes(archivo: string): string;
  var 
    FHandle: integer;
  begin 
    FHandle := FileOpen(archivo, 0);
    try
      Result := floattostr(getfilesize(FHandle,nil));
    finally
      FileClose(FHandle);
    end; 
  end; 
var
bytestotales:integer;
begin 
  bytestotales:=strtoint(cuantosbytes(eDireccionAdjunto.text));
end;
Siendo eDireccionAdjunto el Edit donde está escrita la dirección. No se si el código funiconará (lo he hecho sobre la marcha), pero si no funciona, vete al truco 515 de trucomanía
__________________
:)
Responder Con Cita
  #8  
Antiguo 13-02-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Hay que tener en cuenta que el tamaño del mail a enviar no es solamente el tamaño del archivo adjunto, que si es binario estará codificado con algún algoritmo, y que además contendrá cabeceras, body, etc.

Creo que al final, podes simplemente sumar las longitudes de las siguientes propiedades del objeto idMessage que estas enviando (conste que no lo he probado, y el valor seguramente será un aproximado...)

From.Address
Recipients
CCList
BccList
Headers,
Body, (si tiene varias líneas, tenes que sumar los bytes que representa la secuencia crlf)
Los attachments, ya codificados (mas unos 60 bytes por attachment de boundaries)
Unos 30 bytes de comandos de control

En fin... creo que al usuario debiera bastarle con ver un mensaje que diga... x bytes escritos, pero si queres darte a la tarea de hacerlo, podes darte una mejor idea trazando el método Send del TidSMTP.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
Respuesta



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


La franja horaria es GMT +2. Ahora son las 00:06:50.


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