Vincular correos Access Outlook |
Responder | Página 12> |
Autor | |
valencianoblaugrana
Asiduo Unido: 20/Junio/2014 Localización: Alicante Estado: Sin conexión Puntos: 493 |
Tema: Vincular correos Access Outlook Enviado: 14/Septiembre/2019 a las 17:13 |
Buenos días,
He creado una base de datos a través de la cual envío correos a través de Microsoft Outlook, todos los correos se me quedan almacenados en una tabla. ¿Hay alguna manera de vincular éstos registros de esta tabla con la bandeja de correos enviados de Outlook?, es decir, que yo pueda, con un enlace y con un clic, ir al correo que envié en su día en Outlook. Conectar la bandeja de enviados de Outlook y Access. Agradecería sugerencias o ejemplos. Muchas gracias de antemano Saludos |
|
jilo
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Colaborador Unido: 19/Diciembre/2004 Localización: TAFALLA Estado: Sin conexión Puntos: 959 |
Enviado: 15/Septiembre/2019 a las 08:40 |
Hola. Mira este codigo que te lista los asuntos de los emails de la bandeja enviados, por sí te sirve...
|
|
Espero te sirva !!!!!!
Iñaki |
|
happy
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Moderador Unido: 29/Enero/2005 Localización: España Estado: Sin conexión Puntos: 3192 |
Enviado: 15/Septiembre/2019 a las 11:36 |
Los mensajes de correo de Outlook tienen una propiedad llamada EntryID, que es un identificador único del elemento. A través de un objeto NameSpace puedes acceder a un elemento cualquiera a través con esa propiedad. Eso sí, primero deberás almacenar esa propiedad en tu tabla de mensajes y luego podrás a ese correo de nuevo Ejemplo simple de código para hacerlo:
Sustituye los nombres y el procedimiento según te convenga ... Otra cosa más: si los correos se mueven a otra ubicación u otra carpeta de Outlook esa propiedad EntryID cambiará, así que le perderás de nuevo el rastro ... pero supongo que ese es otro tema Editado por happy - 15/Septiembre/2019 a las 11:39 |
|
Saludos,
Juan M. Afan de Ribera |
|
valencianoblaugrana
Asiduo Unido: 20/Junio/2014 Localización: Alicante Estado: Sin conexión Puntos: 493 |
Enviado: 15/Septiembre/2019 a las 17:50 |
Muchas gracias Happy,
Pero el problema se presenta en como almaceno en el campo correspondiente de la tabla "ENVIADOS" el elemento "EntryID" al enviar un correo electrónico para posteriormente localizarlo a través del código de ejemplo que me indicas.
Saludos |
|
happy
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Moderador Unido: 29/Enero/2005 Localización: España Estado: Sin conexión Puntos: 3192 |
Enviado: 15/Septiembre/2019 a las 18:11 |
Cuando envias el correo supongo que utilizas un objeto MailItem de Outlook no? Pues una vez enviado y antes de que se destruya el objeto o se cree otra instancia referenciando un nuevo correo recuera la propiedad EntryID del objeto y lo almacenas en esa tabla junto con el resto de datos del mensaje enviado.
|
|
Saludos,
Juan M. Afan de Ribera |
|
valencianoblaugrana
Asiduo Unido: 20/Junio/2014 Localización: Alicante Estado: Sin conexión Puntos: 493 |
Enviado: 15/Septiembre/2019 a las 19:11 |
Perdona, pero mis conocimientos de vba son muy limitados. Lo estoy recuperando después de enviar el mensaje justo después de la propiedad msg.send pongo MSGBOX msg.entryID para que me muestre el indentificador pero me dice que que se eliminó y cambió de ubicación. Si lo pongo antes me dice que no se encuentra.
Gracias
|
|
happy
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Moderador Unido: 29/Enero/2005 Localización: España Estado: Sin conexión Puntos: 3192 |
Enviado: 15/Septiembre/2019 a las 20:18 |
Si, tienes razón. Se me había olvidado que funcionaba de otra manera. En realidad debes hacer una copia del MailItem original, guardar la copia y almacenar el EntryID de la copia. Luego ya te funcionará como se espera. Por ejemplo:
luego ya podrás acceder al EntryID almacenado y mostrar el mensaje o lo que sea. Recuerda que si el mensaje se mueve de carpeta, entonces el EntryID almacenado ya no será válido (Outlook habrá creado otro EntryID y ya no servirá el anterior)
|
|
Saludos,
Juan M. Afan de Ribera |
|
valencianoblaugrana
Asiduo Unido: 20/Junio/2014 Localización: Alicante Estado: Sin conexión Puntos: 493 |
Enviado: 15/Septiembre/2019 a las 22:08 |
Quieres decir si se mueve de la bandeja de enviados?.
|
|
happy
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Moderador Unido: 29/Enero/2005 Localización: España Estado: Sin conexión Puntos: 3192 |
Enviado: 15/Septiembre/2019 a las 22:57 |
Sí. Cuando mueves un mensaje de un lado para otro pierde ese EntryID. Me imagino que internamente no se "mueve" el mensaje, sino que se crea una copia y se coloca en la nueva ubicación. Esa copia será un nuevo elemento y por tanto tendrá un EntryID propio diferente del original. |
|
Saludos,
Juan M. Afan de Ribera |
|
happy
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Moderador Unido: 29/Enero/2005 Localización: España Estado: Sin conexión Puntos: 3192 |
Enviado: 15/Septiembre/2019 a las 23:55 |
Me he dado cuenta de que lo que te he dicho antes funcionar, funciona, pero creo que no es lo más correcto. Al hacer una copia del mensaje y no enviarlo, éste se queda en la bandeja de salida, y ese será el que luego almacenarás su EntryID. Creo que NO es una solución limpia. Lo que he pensado es que una manera "aproximada" de hacerlo sería básicamente enviar el correo e inmediatamente después ir a la bandeja de enviados y consultar el último mensaje enviado. De ese último mensaje, tomar el EntryID y ya lo tendríamos. Un ejemplo de código podría ser éste:
Esto creo que puede funcionar. Pero si estás enviando mensajes en un entorno multiusuario, con Exchange y desde una cuenta compartida, esta lógica podría tener algún punto débil, ya que otro usuarios podría enviar un mensaje de correo al mismo tiempo y "colarse" en el tiempo de espera mientras se actualiza la carpeta de enviados. Pero vamos, yo creo que es difícil que se de tanta casualidad. Aún así, puedes comprobar el asunto del mensaje de ese último mensaje enviado y si no lo fuera, seguir esperando la actualización hasta el siguiente mensaje. Espero explicarme bien ... Por cierto, el código que pongo aquí (y normalmente el que publico al dar alguna respuesta en general) NO tiene por qué ser completamente infalible. Funcionar suele funcionar, ya que normalmente lo pruebo. Pero no intento darlo todo hecho del todo. Suelen ser ideas y cosas en las que basarse para luego escribir el código que se adapte al entorno al que se dirija.
Editado por happy - 15/Septiembre/2019 a las 23:58 |
|
Saludos,
Juan M. Afan de Ribera |
|
valencianoblaugrana
Asiduo Unido: 20/Junio/2014 Localización: Alicante Estado: Sin conexión Puntos: 493 |
Enviado: 16/Septiembre/2019 a las 20:13 |
Hola Happy,
Es muy útil y funciona el último código,pero tarda mucho en ejecutar, puesto que si la carpeta enviados tiene mas de 300 correos, te obliga a tener el formulario abierto para que cuando el proceso termine copie el EntryID en el campo correspondiente para después enviarlo a la tabla al guardar. Si el usuario lo cierra antes de tiempo o le da al botón de guardar mientras el campo esta en blanco no se almacenaría. Saludos
|
|
happy
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Moderador Unido: 29/Enero/2005 Localización: España Estado: Sin conexión Puntos: 3192 |
Enviado: 17/Septiembre/2019 a las 00:37 |
No se si te entiendo. ¿Qué formulario es ese que comentas? ¿Qué tiene que ver con la rutina de ejemplo que he puesto? Lo que debes hacer es adecuarla bien al procedimiento que tengas y pulirla y pulir también el procedimiento hasta que consigas el mejor rendimiento posible. Lo de los 300 correos ... yo, las pruebas que hice para esa rutina de ejemplo, las he hecho con una carpeta de Enviados que tiene unos 9.000 correos almacenados. No creo que vaya por ahí. Ya te lo decía en mi anterior mensaje, es un código de ejemplo. NO pretendo escribir rutinas para otras personas, sólo darles pistas para que aprendan y les ayuden a que se trabajen sus propios proyectos |
|
Saludos,
Juan M. Afan de Ribera |
|
valencianoblaugrana
Asiduo Unido: 20/Junio/2014 Localización: Alicante Estado: Sin conexión Puntos: 493 |
Enviado: 21/Septiembre/2019 a las 11:45 |
Buenos días Happy
Estoy utilizando el siguiente código para visualizar el correo en cuestión: Private Sub Visualizar_Click() Dim f As Outlook.Folder Dim Msg2 As Outlook.MailItem Dim rs As DAO.Recordset Dim Ns As Outlook.NameSpace Dim OutLookApp As Outlook.Application Set OutLookApp = CreateObject("Outlook.Application") Set Ns = OutLookApp.GetNamespace("MAPI") Set rs = CurrentDb.OpenRecordset("TDatos") Set f = Ns.GetDefaultFolder(olFolderSentMail) While Not rs.EOF ' referenciamos el mensaje de correo mediante su EntryID Set Msg2 = Ns.GetItemFromID(rs("EntryID")) ' visualizamos el correo Msg2.Display rs.MoveNext Wend End Sub El caso es que la ejecución se para en la linea en rojo y me dice que no es posible valor nulo. Decir que lo estoy ejecutando desde un formulario a través de un botón llamado "visualizar" en dicho formulario recupero el registro del correo que luego quiero ver en outlook el campo "EntryID" en el formulario se llama "ID_Txt". Muchas gracias Saludos
|
|
happy
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Moderador Unido: 29/Enero/2005 Localización: España Estado: Sin conexión Puntos: 3192 |
Enviado: 21/Septiembre/2019 a las 13:21 |
Pero ¿has comprobado previamente el valor que viene en rs("EntryID")?. Evidentemente, si como te aparece en el error, ese campo tiene un valor nulo o una cadena vacía, no hay nada qué hacer. Pon algún punto de interrupción en el código (señala una línea para detener y pulsa F9) y haz un debug.print nombre variable o un msgbox nombre variable para ver qué hay dentro de los campos del recordset o en las variables (también sirve si por encima de la variable o lo que sea pasas el ratón y te aparecerá un tool tip con el valor de esa variable o campo).
En la tabla ¿has comprobado que realmente hayas guardado el valor de EntryID en cada registro?
|
|
Saludos,
Juan M. Afan de Ribera |
|
valencianoblaugrana
Asiduo Unido: 20/Junio/2014 Localización: Alicante Estado: Sin conexión Puntos: 493 |
Enviado: 21/Septiembre/2019 a las 13:30 |
Hola Happy
Si, en la tabla están almacenados los "entryID" correspondientes, solo en los últimos 5 registros desde que estoy haciendo estas pruebas, los demás registros están en blanco. Influye eso? Saludos |
|
Responder | Página 12> |
Tweet
|
Ir al foro | Permisos de foro Usted No puede publicar nuevos temas en este foro Usted No puede responder a temas en este foro Usted No puede borrar sus mensajes en este foro Usted No puede editar sus mensajes en este foro Usted No puede crear encuestas en este foro Usted No puede votar en encuestas en este foro |