Imprimir página | Cerrar ventana

enviar email desde varios correos

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=86465
Fecha de impresión: 27/Marzo/2026 a las 05:09


Tema: enviar email desde varios correos
Publicado por: matmax1
Asunto: enviar email desde varios correos
Fecha de publicación: 15/Septiembre/2022 a las 18:56
Buenas tares, estoy intentando enviar un email con archivo adjunto (pdfs), desde varias direcciones de correo que tengo añadidas en el outlook y en la aplicación, según sea el correo de origen , es decir un email desde desde la cuenta correo1@gmail.com o la cuenta correo2@gmail.com. En el outlook tengo las 2 cuentas añadidas y una de ellas es predeterminada. Cuando intemto enviar un correo con la cuenta2, a la hora de ver el correo antes de enviarlo, las cuentas de coreo de origen están correctamente añadidas (correo2), pero al darle a enviar, se cambia a la cuenta predeterminada (cuenta1). Por ejemplo, si envió un email desde correo2@gmail.com, al darle a enviar y consultar si el email se envió desde la cuenta2, veo que lo envió desde la cuenta1. No se si es problema del código o del outlook. 
Este es el código que utilizo.
 
Private Sub enviarCorreo()
     Dim cRespu, ARCH, DAM2, cuerpo  'indice,
     Dim cCorreoOrigen, cCorreoDestino
        cRespu = MsgBox("DESEA ENVIAR ESTA VENTA (" & rsImpMovim("CAMPO2") & ") AL CORREO " & DLookup("E_MAIL", "MOVIM", "MOVIMIENTO= " & rsImpMovim("CAMPO2")), vbYesNo + vbInformation + vbDefaultButton2)
        If cRespu = vbYes Then
            ARCH = Dir("*.*")
            Set DAM2 = CreateObject("outlook.application").CreateItem(0)
            
    'correo empresas
            cCorreoOrigen = DLookup("EMAIL", "EMPRESA", "NOMBRE= '" & rsImpMovim("empresa") & "'")  
            DAM2.SentOnBehalfOfName = cCorreoOrigen ' o cuenta1 o cuenta2
            
    'correo cliente
            cCorreoDestino = DLookup("E_MAIL", "MOVIM", "MOVIMIENTO= " & rsImpMovim("correo")) Miguel@gmail.com
            DAM2.To = cCorreoDestino
            
      DAM2.Subject = Trim(rsImpMovim("asunto")) & "€"

            cuerpo = "Estimado cliente " & Chr(13) & _
            "Adjunto envio facturas pendientes que tendra que pagar a la mayor brevedad posible." 
            DAM2.Body = cuerpo         '"Cuerpo del mensaje"

            Do While ARCH <> ""
                DAM2.Attachments.Add mypath3 & "\" & ARCH
                ARCH = Dir()
            Loop
            DAM2.Display 'El correo se muestra
        End If
End Sub

¿Alguien me puede ayudar con este problema?, Gracias.



Respuestas:
Publicado por: lbauluz
Fecha de publicación: 16/Septiembre/2022 a las 09:39
Mira a ver...

https://www.slipstick.com/developer/code-samples/send-email-address-vba/

-------------
El Búho es un pajarraco


Publicado por: xavi
Fecha de publicación: 16/Septiembre/2022 a las 11:01
Hola,

Es un pelin distinto. Tu estás intentando el SentOnBehalfOnName (Enviar en nombre de) cuando lo que quieres es utilizar otra cuenta (SendUsingAccount)

El "problema" radica en como realizar la asignación de esa cuenta. La única forma que he encontrado es recorrer la colección de Accounts de la sesión de Outlook hasta encontrar la dirección que quieres utilizar y asignarla al SendUsingAccount del objeto Outlook.MailItem

Este pedazo de código esta copiado de una aplicación que tengo:

If uMailHeader.From <> "" Then
    For Each olkAccount In olkApp.Application.Session.Accounts
        If olkAccount.SmtpAddress = uMailHeader.From Then
            ' La asignación del SendUsingAccount varía si se utiliza la librería o no
            #If UseOL_OLK Then
                olkMail.SendUsingAccount = olkAccount
            #Else
                Set olkMailItem.SendUsingAccount = olkAccount
            #End If
            Exit For
        End If
    Next
End If

uMailHeader es una estructura Type dónde almaceno las variables de cabecera de un Mail. Entre otras cosas tengo la dirección desde la que quiero mandar el mail (si está en blanco tomará la predeterminada)
olkAccount es una variable de tipo Outlook.Account (si tienes la referencia a la biblioteca de Outlook) o Variant (si no la tienes)
olkApp es una variable de tipo Outlook.Application o Object
UseOL_OLK es una constante de compilación condicional que indica si mi aplicación tiene la referencia a la biblioteca de Outlook o no

Este último punto es relevante porque, como se ve en el código, la forma de asignar la propiedad SendUsingAccount es distinta con o sin referencia.

Creo que no me dejo nada.

PD: Luis, el link no me funciona. Dice "Ahora mismo la página no está disponible". De todas formas no la conocía y parece una muy buena página para temas de Outlook. Gracias!

Un saludo



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

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


Publicado por: matmax1
Fecha de publicación: 16/Septiembre/2022 a las 12:10
Muchisimas gracias por tu respuesta pero tengo una duda, ¿Como le paso el correo de la cuenta desde la cual yo quiero que se envie el email con su factura?, Es decir, yo quiero enviar desde el correo2, en lugar del correo1 que es el predeterminado en outlook, Gracias


Publicado por: xavi
Fecha de publicación: 16/Septiembre/2022 a las 12:20
En lo que yo llamo uMailHeader.From, le asignas la dirección desde la que quieres que se utilice: correo2@gmail.com

Un saludo


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

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


Publicado por: matmax1
Fecha de publicación: 10/Septiembre/2023 a las 19:43
SOLUCIONADO



Imprimir página | Cerrar ventana