** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - visualizar correo enviado
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradovisualizar correo enviado

 Responder Responder Página  <123
Autor
Mensaje
valencianoblaugrana Ver desplegable
Asiduo
Asiduo


Unido: 20/Junio/2014
Localización: Alicante
Estado: Sin conexión
Puntos: 493
Enlace directo a este mensaje Enviado: 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




Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 13990
Enlace directo a este mensaje Enviado: 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.

Access Aplicaciones
Tecsys.es
Arriba
valencianoblaugrana Ver desplegable
Asiduo
Asiduo


Unido: 20/Junio/2014
Localización: Alicante
Estado: Sin conexión
Puntos: 493
Enlace directo a este mensaje Enviado: 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



Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 13990
Enlace directo a este mensaje Enviado: 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.




Editado por Mihura - 29/Agosto/2020 a las 18:34
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
valencianoblaugrana Ver desplegable
Asiduo
Asiduo


Unido: 20/Junio/2014
Localización: Alicante
Estado: Sin conexión
Puntos: 493
Enlace directo a este mensaje Enviado: 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

Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 13990
Enlace directo a este mensaje Enviado: 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.

Access Aplicaciones
Tecsys.es
Arriba
valencianoblaugrana Ver desplegable
Asiduo
Asiduo


Unido: 20/Junio/2014
Localización: Alicante
Estado: Sin conexión
Puntos: 493
Enlace directo a este mensaje Enviado: 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
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 13990
Enlace directo a este mensaje Enviado: 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).

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

Access Aplicaciones
Tecsys.es
Arriba
valencianoblaugrana Ver desplegable
Asiduo
Asiduo


Unido: 20/Junio/2014
Localización: Alicante
Estado: Sin conexión
Puntos: 493
Enlace directo a este mensaje Enviado: 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
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 13990
Enlace directo a este mensaje Enviado: 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.

Access Aplicaciones
Tecsys.es
Arriba
valencianoblaugrana Ver desplegable
Asiduo
Asiduo


Unido: 20/Junio/2014
Localización: Alicante
Estado: Sin conexión
Puntos: 493
Enlace directo a este mensaje Enviado: 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
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 13990
Enlace directo a este mensaje Enviado: 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.

Access Aplicaciones
Tecsys.es
Arriba
javier.mil Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 10/Agosto/2005
Localización: España
Estado: Sin conexión
Puntos: 4812
Enlace directo a este mensaje Enviado: 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


 



Editado por javier.mil - 01/Septiembre/2020 a las 13:33
Arriba
valencianoblaugrana Ver desplegable
Asiduo
Asiduo


Unido: 20/Junio/2014
Localización: Alicante
Estado: Sin conexión
Puntos: 493
Enlace directo a este mensaje Enviado: 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
Arriba
 Responder Responder Página  <123
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable