Jump to content

Enviar correo Excel VBA - Outlook Office 365


capitanesteban

Recommended Posts

Hola a todos. Tengo Excel 2010 y también Office 365. Necesito una macro para enviar correos desde Excel 2010 vía Outlook Office 365. He hecho pruebas con muchos códigos que he encontrado en internet pero no me funcionan. Adjunto un archivo con 3 macros (intentos fallidos), ojalá me puedan orientar en cómo crear el código para enviar correos de manera automática. Si esos códigos no sirven, por favor mándame uno que si sirva.

He añadido referencias (Microsoft DAO 3.6 Object Library, EASendMailObj ActiveX Object 1.0 Type Library, Microsoft CDO for Windows 2000 Library, etc), cambiado puertos (25 y 587), etc. Agradezco el apoyo.

Enviar correo Office 365 - ejemplo.xlsm

Link to post
Share on other sites

@capitanesteban, prueba el siguiente código. Yo uso Outlook 2010. Tienes que activar la referencia "Microsoft Outlook 14.0 Object Library" , en tu caso con el número que aparezca.
 

Sub enviar_correo()
Dim celda As Range
Dim FICHERO As Object
Dim copiar As String, asunto As String, cuerpo As String
Dim uF As Long
Dim correoAPP As Outlook.Application
Dim correo As Outlook.MailItem

Application.ScreenUpdating = False

'ESTABLECEMOS VALORES '
uF = Range("B" & rows.Count).End(xlUp).Row 'Última fila con datos

'RECORREMOS LAS CELDAS '
For Each celda In Range("B2:B" & rows.Count)

'SI OUTLOOK ESTÁ ABIERTO, LO USAMOS '
On Error Resume Next
Set correoAPP = GetObject("", "Outlook.Application")
Err.Clear

'SI NO, LO ABRIMOS '
If correoAPP Is Nothing Then Set correoAPP = New Outlook.Application
Set correo = correoAPP.CreateItem(olMailItem)
 
'TODOS LOS DATOS DEL CORREO '
 With correo
 .Visible = True
 .To = celda
 '.CC = copiar
 .subject = "asunto"
 .HTMLBody = "cuerpo"
 '.Attachments.Add (FICHERO) 'Añadimos el fichero '
 .Send
 End With
Next celda

Application.ScreenUpdating = True

End Sub

 

Link to post
Share on other sites

Hola, gracias por tu respuesta. Te explico más a fondo. Yo no tengo instalado el Outlook 2010, sólamente tengo instalado en mi PC el Excel 2010. El Outlook lo tengo en Office 365, es decir, se maneja en la nube, significa que para entrar a mi correo de Outlook no abro una aplicación, sino abro una página de internet. El código que me pasaste aplica si yo tuviera instalado en mi PC el Outlook, pero no. En teoría, el código para hacer que Excel (el que tengo instalado en mi PC) se conecte a Outlook de Office 365 para enviar correos, es similar al código que envía correos mediante Gmail pero con servidor "smtp.office365.com", en teoría. Sin embargo he hecho muchas pruebas y no he logrado la conexión. El Office 2010 y el Office 365 son muy diferentes uno del otro.

Si tienes otra solución agradecería me la pudieras compartir.

Link to post
Share on other sites

Hola:

Hasta donde recuerdo/sé basta que los usuarios de cualquier tipo de suscripción a Office 365 vean/revisen que versión (actualizada) de Excel, por ejemplo, tienen (en "Acerca de...") y podrán darse cuenta que es la 16.xx, o sea, la misma que los usuarios de todos los tipos de Office 2016, es decir, no hay en realidad diferencias de fondo entre el Office 365 y el Office 2016, como no las hubo con el 2013 o el 2010.  Eso sí, al existir varios tipos de Office 365, hay programas que no necesariamente si instalan en la PC. Por ejemplo, Office 365 Educación no trae consigo Outlook para instalar  y usa el "clásico" servidor web que por tantas décadas hemos usado muchos con la diferencia que en lugar de usar cuentas Hotmail o Outllook "común" puedes usar las cuentas que brinda dicho tipo/versión de Office 365.

¿Qué hay que hacer? Pues el camino que andabas explorando/probando es el adecuado: Tienes que usar CDO, solo hace falta que coloques los parámetros necesarios/adecuados en el código:

https://support.office.com/es-es/article/cómo-configurar-un-dispositivo-o-aplicación-multifunción-para-enviar-correo-mediante-office-365-69f58e99-c550-4274-ad18-c805d654b4c4

Saludos

Abraham Valencia

Link to post
Share on other sites

Hola

En tu archivo hay cinco módulos con varias macros, además de que tienes varias cosas más en el módulo del libro, entonces ¿cuál es la macro en que quieres que se te ayude? No lo especificaste.

Abraham Valencia

Link to post
Share on other sites

Hola, puse varios módulos para ver cuál es el código más viable. La que me parece más completa es la que tiene código en el módulo del libro. Pero porfa,  usa la que consideres más apropiada. En todos los códigos puse el mismo email para enviar y recibir, es para hacer pruebas. Agradezco mucho tu apoyo.

Link to post
Share on other sites
  • 2 weeks later...

Usando un ejemplo de la misma web que tú, prueba así:

Sub CDO_Mail_Small_Text()
    
    Dim iMsg As Object
    Dim iConf As Object
    Dim strbody As String, schema As String
    Dim Flds As Variant

    Set iMsg = CreateObject("CDO.Message")
    Set iConf = CreateObject("CDO.Configuration")

        iConf.Load -1
        Set Flds = iConf.Fields
        schema = "http://schemas.microsoft.com/cdo/configuration/"
        
           With Flds
            Flds.Item(schema & "sendusing") = 2
            Flds.Item(schema & "smtpserver") = "smtp.office365.com"
            Flds.Item(schema & "smtpserverport") = 587  ' probar también con 25
            Flds.Item(schema & "smtpauthenticate") = 1
            Flds.Item(schema & "sendusername") = "tucorreo@office365.com"
            Flds.Item(schema & "sendpassword") = "tuclavedecorreo"
            Flds.Item(schema & "smtpusessl") = True
            Flds.Update
          End With

    strbody = "Hola hola hola"

    With iMsg
        Set .Configuration = iConf
        .From = "tucorreo@office365.com"
        .To = "quienseaa@alguncorreo.com"
        .CC = ""
        .BCC = ""
        .Subject = "Mensaje de prueba"
        .TextBody = strbody
        .Send
    End With

    Set iMsg = Nothing
    Set iConf = Nothing
    Set Flds = Nothing
    
End Sub

Creo que es obvio que tienes que reemplazar ahí tu correo y clave. Si no funciona el puerto 587, prueba con el 25.

Abraham Valencia

Link to post
Share on other sites

Buenas tardes Abraham, agradezco mucho tu respuesta. Solicité apoyo al área de sistemas de mi empresa, me explicaron algunas cosas que yo ignoraba. Este correo Outlook de Office 365, es para cuentas empresariales y el modo de entrar a este correo es diferente, es decir, lo que se hace primero es entrar al link de Office 365, luego se conecta a la página corporativa llamada Net0 en la cual tengo que loguearme y después ya me vincula a mi correo Outlook de Office 365. Adjunto las pantallas de este proceso. Es por eso que estos códigos no me funcionaban. Pido una disculpa por esta omisión. Ahora la cosa cambia. Habrá solución? Agradezco mucho el apoyo.

Imagen1.jpg

Imagen2.jpg

Imagen3.jpg

Imagen4.jpg

Imagen5.jpg

Imagen6.jpg

Imagen7.jpg

Link to post
Share on other sites

Sí, es casi como pensé solo que asumí que tu dominio también era el de "office365", no solo el servidor y es un poco, la verdad, lo que diste a entender. 

En todo caso lo que parece que están haciendo en tu empresa (no puedo, otra vez, estar seguro porque has borrado el contenido de la barra de navegación) es relacionar sus cuentas de Office365 con el correo/dominio de la empresa usando los servidores de Outllook pero, sin detalles (aún) tampoco es fácil darte alguna alternativa de solución. 

Abraham Valencia

Link to post
Share on other sites

¿Cuál es el dominio del correo que quieres usar? Solo por si acaso, no es necesario que des por aquí todo tu correo basta el dominio (...@xxxx.com).  En sistemas ¿te comentaron si realmente usan el SMTP de "office365"?

Abraham Vallencia

Link to post
Share on other sites

Archived

This topic is now archived and is closed to further replies.

Guest
This topic is now closed to further replies.
×
×
  • Create New...

Important Information

Privacy Policy