Imprimir página | Cerrar ventana

visualizar correo enviado

Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y VBA
Descripción del foro: Foro de programacion en Access (Con código y sin código)
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=85448
Fecha de impresión: 26/Marzo/2026 a las 17:27


Tema: visualizar correo enviado
Publicado por: valencianoblaugrana
Asunto: visualizar correo enviado
Fecha de publicación: 19/Agosto/2020 a las 15:02
Buenas tardes,
Tengo una BBDD en la que en un formulario envío correos electrónico a través de outlook. Luego de enviados puedo con un botón en ese formulario visualizarlo referenciando su "entryID". Todo me funcionaba a las mil maravillas hasta que me he cambiado de ordenador y reinstalé outlook, y ha dejado de funcionar.

El código es el siguiente:
           
DoCmd.OpenForm "enviando", , , , , acDialog
                               
               ' bucle para esperar que se actualice la carpeta enviados
               ' cuando notemos que el nº de mensajes cambie, salimos del bucle
               Do While MensajesEnviados = f.Items.Count
               DoEvents
               Loop
               ' referenciamos el último mail de la carpeta enviados
               Set Msg2 = f.Items(f.Items.Count)
               
               Me.ID_txt = Msg2.EntryID
               Call Guardar_Click
                
Cual puede ser el fallo.

Muchas gracias de antemano



Respuestas:
Publicado por: xavi
Fecha de publicación: 19/Agosto/2020 a las 15:40
A mi ese bucle Do..While me da un miedo tremendo. Sospecho que se queda ahí dentro "ad infinitum"

-------------
Xavi, un minyó de Terrassa

http://www.llodax.com" rel="nofollow - Mi web


Publicado por: Mihura
Fecha de publicación: 19/Agosto/2020 a las 19:52
Además, al abrir el formulario en Modal (acdialog) el código que sigue a la apertura del mismo no se ejecuta hasta que no se cierra el formulario abierto, por lo que ese bucle de espera no tiene sentido.




-------------
Jesús Mansilla Castells.
Saludos desde Móstoles.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: valencianoblaugrana
Fecha de publicación: 20/Agosto/2020 a las 09:06
Antes de cambiar de ordenador y reinstalar el office, me funcionaba sin problemas. Es posible que los "entryID", de los mensajes enviados haya cambiado?

Muchas gracias


Publicado por: valencianoblaugrana
Fecha de publicación: 20/Agosto/2020 a las 09:27
Un dato mas,

Al ir a visualizar el correo enviado en outlook, a través del botón en formulario cuyo código es

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
Dim strSQL As String

strSQL = "SELECT * FROM Tdatos WHERE Not Isnull(EntryID)"

    Set OutLookApp = CreateObject("Outlook.Application")
     
    Set Ns = OutLookApp.GetNamespace("MAPI")
    
    Set rs = CurrentDb.OpenRecordset(strSQL)
    
    Set f = Ns.GetDefaultFolder(olFolderSentMail)
         
          
     While Not rs.EOF
    
       ' Debug.Print rs("EntryID")
        
     
           If ID_txt = rs("EntryID") Then
           Debug.Print rs("EntryID")
            Set Msg2 = Ns.GetItemFromID(rs("EntryID")) AQUI ES DONDE SE PARA
            ' visualizamos el correo
            Msg2.Display
            Exit Sub
           Else
           rs.MoveNext
           End If
                
     Wend
   
End Sub

El error que me sale es:

se ha producido el error -2147220991(80040201) en tiempo de ejecución
Error en la operación. Se produjo un error desconocido en las interfaces de mensajes. Si el problema persiste reinicie outlook.

Saludos



Publicado por: pitxiku
Fecha de publicación: 20/Agosto/2020 a las 15:04
¿Has probado a recorrer la colección de elementos de la carpeta de Outlook que estás controlando y ver su propiedad EntryId? Microsoft dice que el valor puede cambiar:

- https://docs.microsoft.com/es-es/office/vba/api/outlook.mailitem.entryid

Eso, por un lado. Por otro, tú puedes cambiar los mensajes de carpeta y después no encontrarlos. De hecho, yo tengo una serie de carpetas y dejo mis mensajes agrupados por tema, incluyendo los que yo he enviado.


Publicado por: valencianoblaugrana
Fecha de publicación: 21/Agosto/2020 a las 09:42
Buenos días,

Acabo de comprobar la posible causa del error. 
Normalmente estoy enviando los correos desde una cuenta predeterminada que tiene mas de 400 mensajes en la carpeta de enviados. Lo he comprobado con otra cuenta que tiene 1 correo en la carpeta de enviados y ha funcionado perfectamente. Es posible que el bucle que tengo programado para extraer el último "EntryID" de la carpeta "enviados"  se quede "ad infinitum" como bien me comentaba Xavi.

La única solución es borrar correos de la carpeta enviados. Ven alguna otra solución?

Muchas gracias


Publicado por: xavi
Fecha de publicación: 21/Agosto/2020 a las 10:40
Estaria bien saber el objetivo del conjunto de acciones. Voy a suponer:

- envías correo por automatización
- abres correo
- guardas el correo en disco

Si es así, lo que debes hacer es un .SaveAs del objeto MailItem antes del .Send

Si no es así... explica lo que pretendes que el sistema haga.

Un saludo


-------------
Xavi, un minyó de Terrassa

http://www.llodax.com" rel="nofollow - Mi web


Publicado por: valencianoblaugrana
Fecha de publicación: 21/Agosto/2020 a las 11:08
Buenos días Xavi,

Lo que pretendo es que una vez enviado el correo por automatización, el "EntryID" se guarde en el correspondiente registro de la tabla "correos enviados" con la finalidad de que más adelante, cuando se requiera, desde el  mismo registro  y a través de un formulario con un botón "visualizar", poder recuperar el correo que envió Outlook, consultar el adjunto que llevaba y demás.

Muchas gracias


Publicado por: Mihura
Fecha de publicación: 21/Agosto/2020 a las 13:35
Para lo que tú quieres hacer no te puedes basar en el EntryID ya que puede cambiar sin previo aviso.

Lo suyo es que abras la carpeta de correo (por automatización) y muestres los correos existentes al usuario, para ello conviene tener o un muy buen árbol de carpetas o una identificación que te permita individualizar el mensaje, se suele utilizar una clave en el asunto.




-------------
Jesús Mansilla Castells.
Saludos desde Móstoles.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: valencianoblaugrana
Fecha de publicación: 22/Agosto/2020 a las 13:21
Muchas gracias por la aportación.

Entiendo que poner una clave en el asunto para identificarlo como único, significa que la persona que reciba ese correo la va a ver. Por eso lo del EntryID

Muchas gracias


Publicado por: Mihura
Fecha de publicación: 22/Agosto/2020 a las 13:33
Si te fijas, en los correos que cambias con empresas en el asunto llevan una clave (un nº de asunto, un Id, algo ....) que además te piden que no lo cambies.

Por esa clave es por dónde después se buscan los correos en la empresa.




-------------
Jesús Mansilla Castells.
Saludos desde Móstoles.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: valencianoblaugrana
Fecha de publicación: 22/Agosto/2020 a las 13:38
Pues la verdad es que no me he fijado. Algun ejemplo ilustrativo?

Muchas gracias


Publicado por: Mihura
Fecha de publicación: 22/Agosto/2020 a las 17:36
¿No has dado / seguido nunca un parte del seguro por correo?
¿O un ticket con un servidor de internet?


-------------
Jesús Mansilla Castells.
Saludos desde Móstoles.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: valencianoblaugrana
Fecha de publicación: 22/Agosto/2020 a las 18:04
Se trata de poner un número distintivo en el asunto del correo y luego buscarlo en la carpeta de enviados tal y como lo tengo yo montado pero en vez del entryID, identificar el numero de asunto. Seria asi?


Publicado por: Mihura
Fecha de publicación: 22/Agosto/2020 a las 18:20
Si.

Estos son los asuntos de varios correos de 1&1:

RE: Prórroga del periodo de validez de su(s) dominio(s), C835607418
RE: C278148624 Re: CSCF_ES_info(CSCF_ES_info)
Re: RE: Attacks originating from your 1&1 Server [Ticket AB40583151]

Como ves son respuestas, y lo remarcado es el 'código' único del hilo de correos.




-------------
Jesús Mansilla Castells.
Saludos desde Móstoles.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: valencianoblaugrana
Fecha de publicación: 22/Agosto/2020 a las 20:04
Buenas tardes
Acabo de poner el siguiente codigo en el botón de visualizar el mensaje identificando el asunto del mismo.

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
Dim strSQL As String

strSQL = "SELECT * FROM Tdatos"

    Set OutLookApp = CreateObject("Outlook.Application")
     
    Set Ns = OutLookApp.GetNamespace("MAPI")
    
    Set rs = CurrentDb.OpenRecordset(strSQL)
    
    Set f = Ns.GetDefaultFolder(olFolderSentMail)
    
                
     While Not rs.EOF
    
       ' Debug.Print rs("EntryID")
        
     
           If Me.txtAsunto_vis = rs!txtAsunto Then
           Debug.Print rs!txtAsunto
            Set Msg2 = Ns.GetItemFromID(rs!txtAsunto)
            ' visualizamos el correo
            Msg2.Display
            Exit Sub
           Else
           rs.MoveNext
           End If
        
        
     Wend
   
End Sub

Me da el error de que  no puede abrir el elemento, a pesar de identificarlo correctamente.

Muchas gracias


Publicado por: Mihura
Fecha de publicación: 22/Agosto/2020 a las 22:03
No creo que lo estés identificando correctamente, estás recuperando un correo usando el asunto, no el Id del mismo.




-------------
Jesús Mansilla Castells.
Saludos desde Móstoles.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: valencianoblaugrana
Fecha de publicación: 23/Agosto/2020 a las 11:37
Buenos días,

Cual seria el método correcto. Estoy buscando dentro de las alternativas de los método de outlook y no encuentro la adecuada.

Muchas gracias


Publicado por: Mihura
Fecha de publicación: 23/Agosto/2020 a las 12:51
El método correcto es ese ... pero no le pasas el valor adecuado.

-------------
Jesús Mansilla Castells.
Saludos desde Móstoles.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: valencianoblaugrana
Fecha de publicación: 23/Agosto/2020 a las 15:10
Buenas tardes
Cuál sería el valor adecuado?
Llevo mirando todas las propiedades y métodos del objeto y no lo encuentro. De ahí mi consulta

Gracias


Publicado por: Mihura
Fecha de publicación: 23/Agosto/2020 a las 15:45
Échale un vistazo a esto:

https://docs.microsoft.com/es-es/office/vba/outlook/how-to/items-folders-and-stores/working-with-entryids-and-storeids" rel="nofollow - https://docs.microsoft.com/es-es/office/vba/outlook/how-to/items-folders-and-stores/working-with-entryids-and-storeids


-------------
Jesús Mansilla Castells.
Saludos desde Móstoles.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: valencianoblaugrana
Fecha de publicación: 23/Agosto/2020 a las 16:18
Muchas gracias
Pero quiero que busque por el asunto, no por el entryID, así es como lo tenía montado antes.
Saludos


Publicado por: Mihura
Fecha de publicación: 23/Agosto/2020 a las 17:50
Por eso te he pasado ese enlace. Tienes que abrir directamente la carpeta de correos de Outlook y hacer un barrido de los correos hasta que encuentres el que necesitas. No te vale guardar el EntryID en un recorset propio porque cambia con las distintas acciones que realizas en el correo (p.ej. cuando cambias el correo de una carpeta a otra).

Y por cierto, para entendernos, estás intentando abrir un registro del fichero de clientes buscando en el campo código del mismo usando el nombre y los apellidos, eso no podría funcionar nunca.




-------------
Jesús Mansilla Castells.
Saludos desde Móstoles.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: valencianoblaugrana
Fecha de publicación: 27/Agosto/2020 a las 20:29
He puesto el siguiente codigo pero  me sigue dando error de bloque with
Private Sub Visualizar_Click()
Dim f As Outlook.Folder
Dim Msg2 As Object
Dim rs As DAO.Recordset
Dim Ns As Outlook.NameSpace
Dim OutLookApp  As Outlook.Application
Dim strSQL As String

strSQL = "SELECT * FROM Tdatos"

    Set OutLookApp = CreateObject("Outlook.Application")
     
    Set Ns = OutLookApp.GetNamespace("MAPI")
    
    Set rs = CurrentDb.OpenRecordset(strSQL)
    
    
    Set f = Ns.GetDefaultFolder(olFolderSentMail)
    
   
     
          
     While Not rs.EOF
    
If Me.txtAsunto_vis = rs!txtAsunto Then
           
            Set Msg2.Subject = rs!txtAsunto
            ' visualizamos el correo
            Msg2.Display
            Exit Sub
           Else
           rs.MoveNext
End If
        
 Wend
 
  
End Sub

Muchas gracias


Publicado por: Mihura
Fecha de publicación: 27/Agosto/2020 a las 21:41
Es el mismo código del otro día ¿no?


... por cierto, analicemos el código que has escrito (repetido del otro día)

    Set OutLookApp = CreateObject("Outlook.Application")
... abres una app Outlook, bien
     
    Set Ns = OutLookApp.GetNamespace("MAPI")
... abres el espacio de trabajo, bien     
    
    Set rs = CurrentDb.OpenRecordset(strSQL)
... abres el recordset con los mensajes, vale    
    
    Set f = Ns.GetDefaultFolder(olFolderSentMail)
... seleccionas la carpeta de correos enviados, bien (si es ahí dónde quieres buscar)     

If Me.txtAsunto_vis = rs!txtAsunto Then
           
            Set Msg2.Subject = rs!txtAsunto
            ' visualizamos el correo
            Msg2.Display
            Exit Sub
           Else
           rs.MoveNext
End If
        
 Wend
- Haces un bucle en el recordset, hasta que encuentras un registro con el campo asunto igual que un campo de texto llamado asunto, vale (hay otras formas de hacerlo más eficiente)
- una vez encontrado, creas un objeto igual al campo asunto del recordset y le dices que lo muestre (suponiendo que tuviera el método Display)
    - lo que has hecho es decir que el objeto Msg2 es un campo de texto (probablemente, no me atrevería a jurarlo, porque eso del Msg2.Subject a saber como se lo va a tomar access)
    - no tiene ninguna relación con nada de lo declarado perteneciente a Outlook
    - y por cierto, para hacer eso te valdría con hacer:
          Set Msg2.Subject = me.txtAsunto_vis
      y te ahorras el recordset y el bucle

La verdad es que para mi no tiene ni pies ni cabeza, vamos, que estas copiando trozos de código de varios sitios, poniéndolos juntos y a ver si funciona.

Empecemos de nuevo:
  - ¿Te has mirado el enlace que te puse el otro día?




-------------
Jesús Mansilla Castells.
Saludos desde Móstoles.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: valencianoblaugrana
Fecha de publicación: 28/Agosto/2020 a las 13:10
Buenos días,

Si me estuve mirando el enlace, donde venia un ejemplo de como buscar un determinado mensaje de correo a través de su EntryID. Así es como lo tenia yo montado desde un principio y me funcionaba hasta que volví a reinstalar Outlook y perdió su funcionalidad ya que los EntryID cambian. Ahora lo que deseo es hacer es la búsqueda del mensaje a través del ASUNTO tal y como me comentaste.

Un saludo


Publicado por: Mihura
Fecha de publicación: 28/Agosto/2020 a las 13:59
Perfecto, en el enlace que te he puesto hay un ejemplo de como barrer una carpeta de outlook buscando 'algo'.

¿ Puedes poner aquí lo que has hecho basándote en ese ejemplo ?


-------------
Jesús Mansilla Castells.
Saludos desde Móstoles.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: valencianoblaugrana
Fecha de publicación: 28/Agosto/2020 a las 19:34
Buenas tardes,
He probado con el ejemplo que me pusiste, copiándolo en un módulo para intentar hacerlo funcionar y seguirlo para ver cada cosa que es. Pero me esta dando error constantemente. Seguramente hay variables que declarar o cosas que faltan, alguna referencia. Me supera, comprendo que es algo complejo para mi lo que pretendo hacer y no me gustaría alargar el hilo de manera indefinida sin llegar a una solución.

Muchas gracias

Saludos


Publicado por: Mihura
Fecha de publicación: 28/Agosto/2020 a las 20:17
Pues con los datos que das bien poco podemos hacer desde aquí ...



-------------
Jesús Mansilla Castells.
Saludos desde Móstoles.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: valencianoblaugrana
Fecha de publicación: 29/Agosto/2020 a las 11:38
Buenos dias 
Aqui esta el ejemplo que trato de hacer funcionar

Sub OutlookEntryID()

 Dim Application As Outlook.Application
 Dim olns As Outlook.NameSpace
 ' If there are more than 500 contacts, change the following line:
 Dim MyEntryID(500) As String
 Dim StoreID As String
 Dim EntryID As String
 Dim objFolder As Folder
 
 Set olns = Application.GetNamespace("MAPI")
 Set objFolder = olns.GetDefaultFolder(olFolderContacts)
 ' Get the StoreID, which is a property of the folder.
 StoreID = objFolder.StoreID
 ' Set objAllContacts equal to the collection of all contacts.
 Set AllContacts = objFolder.Items
 i = 0
 ' Loop to get all of the EntryIDs for the contacts.
 
 For Each item In AllContacts
 i = i + 1
 MyEntryID(i) = item.EntryID
 Next
 ' Randomly choose the 2nd contact to retrieve.
 Set item = olns.GetItemFromID(MyEntryID(2), StoreID)
 
 item.Display

End Sub

trato de hacerlo funcionar y seguirlo para comprenderlo pero me sale bloque with no establecido, esta copiado del enlace que me pasaste.

Saludos






Publicado por: Mihura
Fecha de publicación: 29/Agosto/2020 a las 12:41
La verdad es que los chicos de M$ se han lucido con el ejemplo, faltan un montón de declaraciones de variables. Prueba con este:

Private Sub Cmd_prueba_contactos_Click()
    ' If there are more than 500 contacts, change the following line:
    Dim MyEntryID(500) As String
    Dim StoreID As String
    Dim EntryID As String
    
    Dim ObjApp As Outlook.Application
    Dim ObjNs As Outlook.NameSpace
    Dim ObjFolder As Outlook.Folder
    Dim ObjMail As Outlook.MailItem
    Dim ObjAtt As Outlook.Attachments
    
    Dim AllContacts As Outlook.Items
    Dim Item As Object
    
    Set ObjApp = CreateObject("Outlook.Application")
    Set ObjNs = ObjApp.GetNamespace("MAPI")
    
    Set ObjFolder = ObjNs.GetDefaultFolder(olFolderContacts)
    ' Get the StoreID, which is a property of the folder.
    StoreID = ObjFolder.StoreID
    ' Set objAllContacts equal to the collection of all contacts.
    Set AllContacts = ObjFolder.Items
    i = 0
    ' Loop to get all of the EntryIDs for the contacts.
    For Each Item In AllContacts
        i = i + 1
        MyEntryID(i) = Item.EntryID
    Next Item
 
    ' Randomly choose the 2nd contact to retrieve.
    Set Item = ObjNs.GetItemFromID(MyEntryID(2), StoreID)
    Item.Display

End Sub

Hay ya alguna variable declarada que vas a usar después.

Hazlo 'rular' y con puntos de parada entiende los pasos que da. Analiza Item sus métodos y propiedades porque es lo que vas a tener que usar cuando cambies a la carpeta de mensajes (usa F1 que la ayuda es muy completa).


-------------
Jesús Mansilla Castells.
Saludos desde Móstoles.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: valencianoblaugrana
Fecha de publicación: 29/Agosto/2020 a las 16:07
Buenas tardes
el código me funciona perfectamente, pero me surge la duda de que tengo dos cuentas en outlook, una pop3 y otra imap. Siempre me recupera desde la cuenta pop3. Con lo cual he modificado el código a este nuevo teniendo en cuenta eso pero sigue recuperando de la cuenta pop3.

Sub Cmd_prueba_contactos_Click()
    ' If there are more than 500 contacts, change the following line:
    Dim MyEntryID(500) As String
    Dim StoreID As String
    Dim EntryID As String
    Dim cuenta As String
    
    Dim oAccount As Outlook.Account
    Dim ObjApp As Outlook.Application
    Dim ObjNs As Outlook.NameSpace
    Dim ObjFolder As Outlook.Folder
    Dim ObjMail As Outlook.MailItem
    Dim ObjAtt As Outlook.Attachments
    Dim AllContacts As Outlook.Items
    Dim Item As Object
    
 
     
       Set ObjApp = CreateObject("Outlook.Application")
       Set ObjNs = ObjApp.GetNamespace("MAPI")

For Each oAccount In Session.Accounts

    Select Case (oAccount.AccountType)
    
    Case Outlook.OlAccountType.olImap
    
           Set ObjFolder = ObjNs.GetDefaultFolder(olFolderSentMail)
           ' Get the StoreID, which is a property of the folder.
           StoreID = ObjFolder.StoreID
           ' Set objAllContacts equal to the collection of all contacts.
           Set AllContacts = ObjFolder.Items
           i = 0
     
     
           ' Loop to get all of the EntryIDs for the contacts.
               For Each Item In AllContacts
                   i = i + 1
                   MyEntryID(i) = Item.EntryID
               Next Item
        
           ' Randomly choose the 2nd contact to retrieve.
           Set Item = ObjNs.GetItemFromID(MyEntryID(2), StoreID)
           Item.Display
    End Select

Next

End Sub





Publicado por: Mihura
Fecha de publicación: 29/Agosto/2020 a las 18:33
Lo de recuperar correos de un archivo (Almacen) Outlook u otro es un charco que ya pisaremos más adelante, cuando seamos capaces de elegir un correo de la carpeta enviados y visualizarlo.

Como dijo nuestro amigo Jack el destripador, por partes  LOL.

Lo primero vamos a quitar ese almacenamiento de los items en una tabla -que no necesitamos- y a analizar un item, para no liarnos sería bueno cambiar el nombre a la variable AllContacts por AllItems, viendo sus propiedades y métodos. En uno de ellos veremos el campo asunto y a partir de ahí podremos buscar el que necesitamos.




-------------
Jesús Mansilla Castells.
Saludos desde Móstoles.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: valencianoblaugrana
Fecha de publicación: 29/Agosto/2020 a las 19:53
Buenas tardes
El siguiente código me abre el mensaje de la bandeja de elementos enviados cuyo asunto es "prueba"

Sub Cmd_prueba_contactos_Click()
           
    Dim ObjApp As Outlook.Application
    Dim ObjNs As Outlook.NameSpace
    Dim ObjFolder As Outlook.Folder
    Dim AllItems As Outlook.Items
    Dim Item As Object
    
      
       Set ObjApp = CreateObject("Outlook.Application")
       Set ObjNs = ObjApp.GetNamespace("MAPI")

    
           Set ObjFolder = ObjNs.GetDefaultFolder(olFolderSentMail)
           
          
           Set AllItems = ObjFolder.Items
               
      
           Set Item = AllItems.Item("prueba")
           
           Item.Display
   

End Sub

No hace falta hacer el barrido con el bucle, no? directamente de esta forma de abre el mensaje con un asunto determinado. Es correcto?

Saludos



Publicado por: Mihura
Fecha de publicación: 29/Agosto/2020 a las 22:00
Si te lo abre es correcto .... Wink

Ahora bien, yo le veo una pega y un engorro ...

La pega es como tengas dos correos con el mismo asunto ... y el engorro que tienes que mantener una tabla en Access con todos los correos que quieras.

Pero si esa solución te vale, .... pues no hay nada más que hablar.




-------------
Jesús Mansilla Castells.
Saludos desde Móstoles.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: valencianoblaugrana
Fecha de publicación: 29/Agosto/2020 a las 22:08
El asunto se puede codificar de alguna manera para evitar duplicados y respecto a la tabla, la voy almacenando cuando envío los correos.
La cuestión de antes que formulada sobre tener dos cuentas de correo en outlook y que abra de una cuenta o de otra?

Gracias


Publicado por: Mihura
Fecha de publicación: 30/Agosto/2020 a las 10:50
No se abre una cuenta u otra, lo que buscas es en las distintas carpetas de los distintos archivos (almacenes)  que tengas configurado en Outlook.

Las carpetas se llaman:
\\Outlook\Bandeja de Entrada
\\micuenta@hotmail.com\Bandeja de Salida
\\micuenta@hotmail.com\Archivo

... pero no se pueden acceder directamente por nombre (esto sólo se puede hacer con las carpetas estándard de Outlook).

Mírate este enlace, (los ejemplos tendrás que buscarlos en extranjero), por lo menos a mí no me ha salido ninguno en cristiano).

https://www.extendoffice.com/documents/outlook/4508-outlook-search-by-folder-name.html" rel="nofollow - https://www.extendoffice.com/documents/outlook/4508-outlook-search-by-folder-name.html


-------------
Jesús Mansilla Castells.
Saludos desde Móstoles.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: valencianoblaugrana
Fecha de publicación: 30/Agosto/2020 a las 12:44
Muchas gracias por el ejemplo,

La pregunta es porque siempre, con el método que hemos utilizado anteriormente y que me has explicado, me muestra el correo utilizando la misma cuenta?.
 
Tiene que ver con que sea la cuenta predeterminada dentro del programa.
 Es por ser pop3, Imap..etc

Un saludo


Publicado por: Mihura
Fecha de publicación: 30/Agosto/2020 a las 13:28
Al mostrar un correo te muestra los campos De: Para: CC: Asunto:   propios del correo. No muestra nada más.

... o yo no sé ver lo que te refieres ... Geek

Si acaso cuelga una imágen.




-------------
Jesús Mansilla Castells.
Saludos desde Móstoles.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: valencianoblaugrana
Fecha de publicación: 30/Agosto/2020 a las 13:45
Tengo dos cuentas de correo gestionadas dentro de Outlook, 
jaimesor@telefonica.net
jaimesor42@gmail.com


Al buscar  el correo y mostrarlo por entryID, por ejemplo, en la carpeta de enviados (ejemplo que muy bien me has explicado y esta funcionando), siempre me los recupera de la cuenta: 
jaimesor@telefonica.net. el código siempre acude a ella.

porque el código tiene ese comportamiento?

Y si quiero que me los recupere de la bandeja de enviados de la otra cuenta?

Saludos


Publicado por: Mihura
Fecha de publicación: 30/Agosto/2020 a las 14:00
O bien cambias de cuenta predeterminada o bien buscas la carpeta por código, como te decía más arriba cada carpeta tiene una dirección absoluta dependiendo del archivo pst (ost) del que cuelga:

\\Outlook\Bandeja de Entrada
\\micuenta@hotmail.com\Bandeja de Salida
\\micuenta@hotmail.com\Archivo



-------------
Jesús Mansilla Castells.
Saludos desde Móstoles.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: javier.mil
Fecha de publicación: 01/Septiembre/2020 a las 13:11
Publicado originalmente por valencianoblaugrana valencianoblaugrana escribió:


porque el código tiene ese comportamiento?

Y si quiero que me los recupere de la bandeja de enviados de la otra cuenta?



Buenas , el comportamiento es el normal ,..... en OutLook siempre tiene una cuenta por defecto asignada,......... asi que es  normal ese comportamiento    y que te devuelva el resultado de tu cuenta de email por defecto (principal) ....  Puedes cambiar "a mano" la cuenta por defecto (principal) por otra,...... y veras otros resultados ........ También lo puedes hacer por código  ........... adapta lo según tus necesidades


Pon el siguiente código en un MODULO standard


Public Function funAsignarCuentaOutLook(PonCuentaEmail As String) As Boolean
'---------------------------------------------------------------------------------------
' Procedimiento: funAsignarCuentaOutLook
' Autor: Javier Gomez ("Javier.Mil")
' WEB: www.accessdemo.info
' Proposito: Asignar cuenta por defecto (principal) de OutLook
'---------------------------------------------------------------------------------------
    On Error GoTo Err_Local



    Const cMailItem As Byte = 0
    Dim objOutlook As Object
    Dim objEmail As Object
    Dim objAccounts As Object
    Dim objAccountNew As Object
    Dim objAccountTemp As Object
    Dim booFoundAccount As Boolean


    funAsignarCuentaOutLook = False


    Set objOutlook = CreateObject("Outlook.Application")
    Set objEmail = objOutlook.CreateItem(cMailItem)



    Rem ******* INICIO ASIGNO LA CUENTA DE OULOOK POR DEFECTO (PRINCIPAL)  **********************************
    Rem la cuenta que tengas por defecto en tu outlook funciona mejor perooooo
    Rem tambien se puede enviar desde cualquier otra cuenta que tengas en tu outlook


    Set objAccounts = objEmail.Session.Accounts



    Rem busca la cuenta nueva
    For Each objAccountTemp In objAccounts
        DoEvents

        If objAccountTemp.smtpAddress = PonCuentaEmail Then
            Rem Se ha encontrado la cuenta
            Set objAccountNew = objAccountTemp
            booFoundAccount = True

'  Debug.Print objEmail.Application.Session.Accounts(objAccountTemp.smtpAddress).DisplayName
'  MsgBox objEmail.Application.Session.Accounts(objAccountTemp.smtpAddress).DisplayName

            Exit For
        End If

    Next objAccountTemp


    If booFoundAccount = False Then
        MsgBox "No se ha podido encontrar la cuenta  " & PonCuentaEmail & "  En tu Outlook" & vbNewLine & vbNewLine & _
               "Deberias configurar esta cuenta en tu OutLook", vbExclamation, "Email"


        MsgBox "Aviso: Ahora el programa se cerrara", vbExclamation, "Aviso"

        Access.Application.DoCmd.Quit acQuitSaveAll
        Exit Function

    End If


    objEmail.SendUsingAccount = objAccountNew
    Rem *********** FIN ASIGNO LA CUENTA DESDE DONDE SE ENVIA EL EMIAL ***********************************



Close_Local:
    '    objOutlook.Quit ' << No poner esta instruccion

    Set objOutlook = Nothing
    Set objEmail = Nothing

    Set objAccounts = Nothing
    Set objAccountNew = Nothing
    Set objAccountTemp = Nothing



    funAsignarCuentaOutLook = True



Exit_Local:
    On Error GoTo 0
    Exit Function


Err_Local:
    funAsignarCuentaOutLook = False

    Debug.Print Err.Description, vbCritical, "Error N°:  " & Err.Number
    MsgBox Err.Description, vbCritical, "Error N°:  " & Err.Number

    Resume Exit_Local
End Function


 



-------------
https://www.accessdemo.info" rel="nofollow - https://www.accessdemo.info





Publicado por: valencianoblaugrana
Fecha de publicación: 12/Septiembre/2020 a las 13:11
Muchísimas gracias por vuestras aportaciones y paciencia conmigo, al fin lo he logrado hacer funcionar.
 
Se puede cerrar el hilo

Reciban un cordial saludo



Imprimir página | Cerrar ventana