[RESUELTO] Copia de email enviado con Indy
#1
Escrito 18 noviembre 2010 - 05:55
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?
Thanks.
#2
Escrito 18 noviembre 2010 - 06:44
De momento, el INDY permite enviar copias osea CC y puedes enviarla al correo del emisor.
#3
Escrito 18 noviembre 2010 - 06:51
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.
#4
Escrito 18 noviembre 2010 - 10:41
//Guarda el mensaje Function TFrmMainform.ProcesaCorreo(PiNumCorreo: Integer): String; Var LiNumMsgParts: Integer; // Número de bloques del correo LStlCuerpoCorreo: TStringList; // contenido del mensaje LStlcorreo: TStringList; // Correo por almacenar LIdmMensaje: TIdMessage; // Instancia del mensaje Begin Result := 'Nada'; Try Try LStlCuerpoCorreo := TStringList.Create; LStlcorreo := TStringList.Create; LIdmMensaje := TIdMessage.Create(self); LIdmMensaje.ContentType := 'text/plain'; PopCorreo.Retrieve(PiNumCorreo,LIdmMensaje); If LIdmMensaje.MessageParts.Count = 0 Then LStlCuerpoCorreo.AddStrings(LIdmMensaje.Body) Else For LiNumMsgParts := 0 To Pred(LIdmMensaje.MessageParts.Count) - 1 Do If LIdmMensaje.MessageParts.Items[LiNumMsgParts] Is TIdText Then LStlCuerpoCorreo.AddStrings(TIdText(LIdmMensaje.MessageParts.Items[LiNumMsgParts]).Body); Result := BorraCorreo(PiNumCorreo); If Result = 'Nada' then Begin LStlcorreo.Add('-----------------------DATOS DE ENVIO-------------------'); LStlcorreo.Add('Enviado por: ' + LIdmMensaje.From.Text); LStlcorreo.Add('Destinatarios: ' + LIdmMensaje.Recipients.EmailAddresses); LStlcorreo.Add('CC: ' + LIdmMensaje.CCList.EMailAddresses); LStlcorreo.Add('-----------------------TERMINA---------------------------'); LStlcorreo.AddStrings(LStlCuerpoCorreo); LStlcorreo.SaveToFile(STR_BANDENT + FormatDateTime('yyyymmddhhsszzz',now) + '.txt'); End; Finally LStlCuerpoCorreo.Free; LStlcorreo.Free; LIdmMensaje.Free; End; Except On Error: Exception Do Result := 'Ha ocurrido un error al guardar el mensaje. Error: ' + Error.message; End; End;
#5
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.
#6
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.
Gracias a todos.
#7
Escrito 19 noviembre 2010 - 04:33
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.
#8
Escrito 19 noviembre 2010 - 04:57
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...
Saluditos.
#9
Escrito 19 noviembre 2010 - 05:09
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...
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. ...
#10
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.