Ir al contenido


Foto

[RESUELTO] Copia de email enviado con Indy


  • Por favor identifícate para responder
9 respuestas en este tema

#1 Ayla

Ayla

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 98 mensajes

Escrito 18 noviembre 2010 - 05:55

Hola,

Existe alguna manera de guardar un email enviado con los componentes indy. Un estilo a lo que hace el Outlook  'elementos enviados'.

El proceso es el siguiente. Genero mi email (con los datos, documentos, ect... que necesito), se envia por email (lo hace perfectamente) pero quiero de alguna manera, saber lo que se ha enviado. No tengo constancia ninguna de lo que se ha enviado.

¿Se puede guardar con Indy una copia del email enviado? ¿Se os ocurre alguna alternativa? :undecided:

Thanks.
  • 0

#2 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 18 noviembre 2010 - 06:44

Saludos.

De momento, el INDY permite enviar copias osea CC y puedes enviarla al correo del emisor.
  • 0

#3 Marc

Marc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.484 mensajes
  • LocationMallorca

Escrito 18 noviembre 2010 - 06:51

Hola Nuria.

Yo hago lo que comenta Rolphy, envío una copia a una cuenta mía, y además en el momento de enviarlo guardo copia del mail en una tabla de la base de datos.

Saludos.
  • 0

#4 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 18 noviembre 2010 - 10:41

Pues, yo lo hago con los correos recibos de la siguiente manera:



delphi
  1. //Guarda el mensaje
  2. Function TFrmMainform.ProcesaCorreo(PiNumCorreo: Integer): String;
  3. Var
  4.   LiNumMsgParts: Integer;        // Número de bloques del correo
  5.   LStlCuerpoCorreo: TStringList;  // contenido del mensaje
  6.   LStlcorreo: TStringList;  // Correo por almacenar
  7.   LIdmMensaje: TIdMessage;        // Instancia del mensaje
  8. Begin
  9.   Result := 'Nada';
  10.   Try
  11.     Try
  12.       LStlCuerpoCorreo := TStringList.Create;
  13.       LStlcorreo := TStringList.Create;
  14.       LIdmMensaje := TIdMessage.Create(self);
  15.       LIdmMensaje.ContentType := 'text/plain';
  16.       PopCorreo.Retrieve(PiNumCorreo,LIdmMensaje);
  17.       If LIdmMensaje.MessageParts.Count = 0 Then
  18.         LStlCuerpoCorreo.AddStrings(LIdmMensaje.Body)
  19.       Else
  20.         For LiNumMsgParts := 0 To Pred(LIdmMensaje.MessageParts.Count) - 1 Do
  21.           If LIdmMensaje.MessageParts.Items[LiNumMsgParts] Is TIdText Then
  22.             LStlCuerpoCorreo.AddStrings(TIdText(LIdmMensaje.MessageParts.Items[LiNumMsgParts]).Body);
  23.       Result := BorraCorreo(PiNumCorreo);
  24.       If Result = 'Nada' then
  25.         Begin
  26.           LStlcorreo.Add('-----------------------DATOS DE ENVIO-------------------');
  27.           LStlcorreo.Add('Enviado por: ' + LIdmMensaje.From.Text);
  28.           LStlcorreo.Add('Destinatarios: ' + LIdmMensaje.Recipients.EmailAddresses);
  29.           LStlcorreo.Add('CC: ' + LIdmMensaje.CCList.EMailAddresses);
  30.           LStlcorreo.Add('-----------------------TERMINA---------------------------');
  31.           LStlcorreo.AddStrings(LStlCuerpoCorreo);
  32.           LStlcorreo.SaveToFile(STR_BANDENT + FormatDateTime('yyyymmddhhsszzz',now) + '.txt');
  33.         End;
  34.     Finally
  35.       LStlCuerpoCorreo.Free;
  36.       LStlcorreo.Free;
  37.       LIdmMensaje.Free;
  38.     End;
  39.   Except
  40.     On Error: Exception Do
  41.       Result := 'Ha ocurrido un error al guardar el mensaje. Error: ' + Error.message;
  42.   End;
  43. End;


  • 0

#5 Ayla

Ayla

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 98 mensajes

Escrito 19 noviembre 2010 - 03:14


Yo hago lo que comenta Rolphy, envío una copia a una cuenta mía, y además en el momento de enviarlo guardo copia del mail en una tabla de la base de datos.


Ya había pensado lo de Rolphy, pero a mí lo que realmente me interesa en guardarme una copia del email en una tabla de la base de datos. Eso es lo que no se como gestionarlo. ¿Cómo lo haces Marc?

Poliburro, ¿cómo sé el número de correo que acabo de enviar/recibir? ¿De ese modo también se puede guardar o referenciar los ficheros adjuntos que van en el email?

Muchas gracias chicos.  ;)

  • 0

#6 Ayla

Ayla

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 98 mensajes

Escrito 19 noviembre 2010 - 04:03


Bueno creo que tengo ya la solución.

A la hora de generar el email, guardo el email en un fichero .eml con (TidMessage.SaveToFile ) y ese archivo es el que guardo en mi base de datos. De esta manera en cualquier momento podría acceder al email enviado. Voy a ello a ver si consigo lo que quiero.  (h)

Gracias a todos. (y)
  • 0

#7 Marc

Marc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.484 mensajes
  • LocationMallorca

Escrito 19 noviembre 2010 - 04:33

Hola Nuria.

Yo en la tabla de Mails tengo todos los campos involucrados : DE , PARA, FECHA, ASUNTO, MENSAJE (este es Blob). De manera que cuando guardo el mensaje, guardo la persona que lo envía, a quienes se envía, el asunto y el mensaje (y así se pueden hacer búsquedas).

En realidad solo necesito lanzar la correspondiente consulta parametrizada :
INSERT INTO MAILS (ID, DE, PARA, ...) VALUES (GEN_ID(MAILS_GEN, 1), :DE, :PARA, ...)

Toda esa información ya la tienes en el momento de enviar el mensaje, ¿ con que campo tienes problemas ?.

NOTA: Incluso tengo una tabla relacionada de ADJUNTOS, por si se envían Adjuntos con el Mail.

Saludos.
  • 0

#8 Ayla

Ayla

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 98 mensajes

Escrito 19 noviembre 2010 - 04:57

Hola Marc,

No tenía problemas con ningún campo específico. Mi problema era que quería guardar todo el email en un fichero. Hasta que me he dado cuenta que el componente TIdMessage tiene una propiedad SaveToFile.

Los emails, los monto yo más o menos, utilizo plantillas para sustituir  datos, adjunto ficheros, cabeceras, pies, etc. Entonces cuando quisieran acceder al email  no quería volver a montar todo de nuevo. Hacer trabajo doble por así  decirlo.

De esta manera lo único que guardaré en mi base de datos es el nombre del fichero que me he generado. Si quieren acceder a el, lo abro por medio del Outlook y fuera lios. Ven el email tal cual ha sido enviado, con acceso a los datos adjuntos. Lo malo de esta opción es que obligo a que tengan instalado el outlook.

No sé si me he explicado...  ^o|

Saluditos.




  • 0

#9 Marc

Marc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.484 mensajes
  • LocationMallorca

Escrito 19 noviembre 2010 - 05:09

Hola Nuria.

Hola Marc,

No tenía problemas con ningún campo específico. Mi problema era que quería guardar todo el email en un fichero. Hasta que me he dado cuenta que el componente TIdMessage tiene una propiedad SaveToFile.

Los emails, los monto yo más o menos, utilizo plantillas para sustituir  datos, adjunto ficheros, cabeceras, pies, etc. Entonces cuando quisieran acceder al email  no quería volver a montar todo de nuevo. Hacer trabajo doble por así  decirlo.

De esta manera lo único que guardaré en mi base de datos es el nombre del fichero que me he generado. Si quieren acceder a el, lo abro por medio del Outlook y fuera lios. Ven el email tal cual ha sido enviado, con acceso a los datos adjuntos. Lo malo de esta opción es que obligo a que tengan instalado el outlook.

No sé si me he explicado...  ^o|

Saluditos.


Bien pensado. Voy a considerar añadir ese campo a la tabla y guardar también los Mails ya montados.

Aunque igualmente me gusta tener todos los campos por separado. De esta forma en el Histórico de Mails puedo buscar los mails por fecha, por persona, por asunto, etc. ...
  • 0

#10 Ayla

Ayla

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 98 mensajes

Escrito 19 noviembre 2010 - 05:31

Aunque igualmente me gusta tener todos los campos por separado. De esta forma en el Histórico de Mails puedo buscar los mails por fecha, por persona, por asunto, etc. ...


Eso está bien. Yo me guardo un histórico de movimientos y muestro los datos en un dbgrid, la fecha, si se ha enviado por email/fax/impresora/editado, documento (si tiene documento picha dos veces en el campo y se abre para que pueda verlo), ect, sólo me falta mostrar el email que tiene muchos más datos, mi idea es que el grid de histórico si se ha enviado le aparezca un sobre y pinchando en el se abra el email completo.  (h)

  • 0




IP.Board spam blocked by CleanTalk.