27 de abril de 2007

Envío de correo electrónico por el servidor SMTP de Gmail

Este artículo muestra como enviar un correo electrónico desde Visual FoxPro a través del servidor SMTP de Gmail que utiliza autentificación y cifrado SSL (Secure Sockets Layer).

Gmail permite el envío de correo electrónico utilizando: el servidor smpt.gmail.com, autentificación, cifrado, puerto 465 ó 587, dirección de correo electrónico, nombre de usuario (incluido @gmail.com) y contraseña. (Para mas información de configuración haga clic aquí).

Craig Boyd publicó hace un tiempo en su Blog, varios artículos sobre distintas técnicas para el envio de mails desde VFP. Una de esas técnicas es mediante CDO (Collaboration Data Objects) que nos permite autenficación y cifrado SSL. Tomando como base su artículo "Email and VFP: Part 1c (CDOSYS)", solo se debe cambiar el puerto SMTP a 465 ó 587, y poner a .T. las propiedadades smtpauthenticate y smtpusessl.

El siguiente es el código modificado que nos permite el envió de correo electrónico a través del servidor SMTP de Gmail.
TRY
  LOCAL lcSchema, loConfig, loMsg, loError, lcErr
  lcErr = ""
  lcSchema = "http://schemas.microsoft.com/cdo/configuration/"
  loConfig = CREATEOBJECT("CDO.Configuration")
  WITH loConfig.FIELDS
    .ITEM(lcSchema + "smtpserver") = "smtp.gmail.com"
    .ITEM(lcSchema + "smtpserverport") = 465 && ó 587
    .ITEM(lcSchema + "sendusing") = 2
    .ITEM(lcSchema + "smtpauthenticate") = .T. 
    .ITEM(lcSchema + "smtpusessl") = .T.
    .ITEM(lcSchema + "sendusername") = "usuario@gmail.com"
    .ITEM(lcSchema + "sendpassword") = "contraseña"
    .UPDATE
  ENDWITH
  loMsg = CREATEOBJECT ("CDO.Message")
  WITH loMsg
    .Configuration = loConfig
    .FROM = "usuario@gmail.com"
    .TO = "usuario@hotmail.com"
    .Subject = "Prueba desde Gmail"
    .TextBody = "Este es un mensaje de prueba con CDO con " + ;
      "autenticación y cifrado SSL desde Gmail"
    .Send()
  ENDWITH
CATCH TO loError
  lcErr = [Error: ] + STR(loError.ERRORNO) + CHR(13) + ;
    [Linea: ] + STR(loError.LINENO) + CHR(13) + ;
    [Mensaje: ] + loError.MESSAGE
FINALLY
  RELEASE loConfig, loMsg
  STORE .NULL. TO loConfig, loMsg
  IF EMPTY(lcErr)
    MESSAGEBOX("El mensaje se envió con éxito", 64, "Aviso")
  ELSE
    MESSAGEBOX(lcErr, 16 , "Error")
  ENDIF
ENDTRY
Este código funciona también para las cuentas de correo electrónico brindadas por Google Apps.

[07/04/2015] ACTUALIZACIÓN:

Quizás no puedas enviar correos electrónicos con el código de este artículo dado que Gmail (Google) puede bloquear intentos de inicio de sesión de aplicaciones que no utilicen los últimos estándares de seguridad. Para solucionar este inconveniente, se debe habilitar en nuestra cuenta de Google el acceso a aplicaciones menos seguras. Esto lo haces desde el enlace: https://www.google.com/settings/security/lesssecureapps


Hasta la próxima,

Luis María

14 comentarios :

  1. Gracias Luis, estaba bien preocupado buscando por que el envio de correo me habia dejado de funcionar y daba un error y fue que Gmail realizo cambios, yo buscaba informacion en PoltalFox pero ya no esta, gracia por esta actualizacion de informacion

    ResponderBorrar
  2. excelente aporte, pero tengo un problema como hago por medio de codigo activar en gmail el acceso para las aplicaciones menos seguras, ya que envie a cuentas de gmail y no reciben mis correos desde foxpro

    ResponderBorrar
  3. hola como instalo la libreria cdo ??

    ResponderBorrar
  4. Gracias por el aporte, hay alguna forma de cuando se envía un correo, se quede en bandeja de enviados.?

    ResponderBorrar
  5. Muchas gracias por el gran aporte me servicio muchisimo, solo hay que ir a configuración de Gmail para que te permita entrar.

    ResponderBorrar
  6. Buenas noches, primero agradecer por tan buenos aportes que aun hoy siguen vigentes a pesar del tiempo transcurrido, yo uso el CDO para el envio de email desde Gmail, pero se me ha presentado un problema al usar este mismo codigo con una cuenta que no es de Hotmail, yahoo, ni gmail. La empresa tiene un dominio y hosting.
    el servidor es "smtp.hostinger.es"
    el puerto que usa es 587

    1429# send # 185 # 0x00000213 Error de transporte en la conexion al servidor

    es el error que muestra

    Alguna sugerencia o solución.

    ResponderBorrar
  7. Hola, buenas tardes...

    Este hilo tiene algún tiempo ya, pero siempre he tomado a Luis María como un un referente muy respetable y es muy probable que el o alguien que lea esto pueda ayudarme... Utilizo el envío de correo CDO desde hace tiempo y me funciona sin inconvenientes, no es el funcionamiento en si lo que me preocupa sino que se me da un caso en algunos equipos en donde con exactamente la misma configuración de correo, arroja el famoso error 1429 de error de transporte. No tiene relación con la configuración de puerto, ni de conexión segura, ni nada por el estilo porque con exactamente la misma configuración me funciona sin inconvenientes en todos los equipos menos en un par... ¿Alguna idea? ¿A alguien le pasó algo similar?

    El equipo que no envía tiene Windows Seven y utilizo servidores con dominios propios de Dattatec, puerto 465, identificandolo como conexión segura y habilitando SSL.

    Gracias!!

    Gustavo
    (Neuquén)

    ResponderBorrar
  8. Sigo teniendo el mismo inconveniente y al parecer algunos servidores no permiten el envio de mails desde aplicaciones de terceros, por mas lo hayas habilitado en la configuración correspondiente: Ej: >>>
    https://www.google.com/settings/security/lesssecureapps.
    Mas bien por el camino que toman los paquetes que viajan al servidor. Por Ej: aca en Paraguay utilizando el servicio de claro internet lo envía sin problemas, no así con otras compañías. A las cuales he descrito el error pero no me dan una solución.
    Probar en el cmd del windows el comando c:\tracert 142.250.141.109
    Lo anterior es el ip del servidor smtp de gmail. El tracert muestra los saltos que va dando el paquete en los diferentes servidores hasta su entrega. Si tienes una demora larga antes de llegar a destino ahi tienes el problema. Las compañias a las que reclame no se hacen cargo, en tal caso uno debe realizarlo por cuenta propia o cambiar de proveedor a uno que si funciones a este efecto.

    En este sitio podrian identificar los ips: >>> https://www.iplocation.net/ip-lookup

    Hasta que no exista solución a esto tratar de realizar los envíos desde las compañías con servicios de internet que si resultaron sin problemas.

    Saludos!

    ResponderBorrar
  9. Acá por Ej. tenemos un problema con este servidor 72.14.239.158 en el salto 13 utilizando la compañia TIGO

    C:\>TRACERT 74.125.142.109

    Traza a la dirección ie-in-f109.1e100.net [74.125.142.109]
    sobre un máximo de 30 saltos:

    1 1 ms 1 ms 1 ms 192.168.0.1
    2 * * * Tiempo de espera agotado para esta solicitud.
    3 17 ms 17 ms 17 ms 10.240.10.101
    4 18 ms 16 ms 18 ms 181.40.40.17
    5 16 ms 47 ms 14 ms 181.40.42.29
    6 40 ms 42 ms 42 ms ae-101-edge.GRU.VIE.telecel.net.py [190.2.192.5]
    7 48 ms 50 ms 43 ms 72.14.214.62
    8 42 ms 53 ms 41 ms 108.170.245.161
    9 39 ms 60 ms 47 ms 108.170.245.173
    10 * 68 ms 52 ms 216.239.54.143
    11 149 ms 148 ms 147 ms 66.249.94.109
    12 * 176 ms 175 ms 142.250.58.62
    13 185 ms 189 ms * 72.14.239.158
    14 * * * Tiempo de espera agotado para esta solicitud.
    15 211 ms 213 ms 215 ms 209.85.250.172
    16 219 ms 211 ms 217 ms 74.125.251.249
    17 * * * Tiempo de espera agotado para esta solicitud.
    18 * * * Tiempo de espera agotado para esta solicitud.
    19 * * * Tiempo de espera agotado para esta solicitud.
    20 * * * Tiempo de espera agotado para esta solicitud.
    21 * * * Tiempo de espera agotado para esta solicitud.
    22 * * * Tiempo de espera agotado para esta solicitud.
    23 * * * Tiempo de espera agotado para esta solicitud.
    24 * * * Tiempo de espera agotado para esta solicitud.
    25 * * * Tiempo de espera agotado para esta solicitud.
    26 215 ms 233 ms 208 ms ie-in-f109.1e100.net [74.125.142.109]

    Traza completa.

    ResponderBorrar
  10. Con la compañía CLARO no tengo este problema.

    C:\Users\Genarus>tracert 142.250.141.109

    Traza a 142.250.141.109 sobre caminos de 30 saltos como máximo.

    1 1 ms 1 ms 1 ms 192.168.100.1
    2 4 ms 4 ms 5 ms host2.181-238-224.claro.com.py.224.238.181.in-addr.arpa [181.238.224.2]
    3 40 ms 41 ms 42 ms 10.2.185.173
    4 31 ms 30 ms 30 ms 10.2.6.26
    5 31 ms 31 ms 31 ms 10.2.3.182
    6 31 ms 30 ms 31 ms 10.2.186.117
    7 41 ms 46 ms 47 ms host176.170-51-254.telmex.net.ar [170.51.254.176]
    8 40 ms 39 ms 39 ms 142.250.47.162
    9 42 ms 41 ms 41 ms 74.125.242.209
    10 43 ms 40 ms 39 ms 74.125.242.216
    11 43 ms 41 ms 41 ms 142.250.232.143
    12 51 ms 52 ms 51 ms 142.250.228.3
    13 159 ms 157 ms 157 ms 142.250.228.98
    14 163 ms 163 ms 163 ms 142.250.238.74
    15 162 ms 161 ms 161 ms 216.239.57.138
    16 171 ms 170 ms 170 ms 142.250.212.193
    17 * * * Tiempo de espera agotado para esta solicitud.
    18 * * * Tiempo de espera agotado para esta solicitud.
    19 * * * Tiempo de espera agotado para esta solicitud.
    20 * * * Tiempo de espera agotado para esta solicitud.
    21 * * * Tiempo de espera agotado para esta solicitud.
    22 * * * Tiempo de espera agotado para esta solicitud.
    23 * * * Tiempo de espera agotado para esta solicitud.
    24 * * * Tiempo de espera agotado para esta solicitud.
    25 * * * Tiempo de espera agotado para esta solicitud.
    26 * * * Tiempo de espera agotado para esta solicitud.
    27 * * * Tiempo de espera agotado para esta solicitud.
    28 161 ms 161 ms 161 ms 142.250.141.109

    Traza completa.

    ResponderBorrar
  11. Ahora que google quito la opción de apps menos seguras no se pueden enviar correos, que solución se podrá tener

    ResponderBorrar
    Respuestas
    1. Hola buenas tardes, encontre un video que dice paso a paso la forma de hacer eso de apps seguras:
      https://youtu.be/MjwBufMWpRQ
      Lo único que cambia una vez que se haya configurado la cuenta de gmail, es la contraseña que te genera el mismo gmail.

      Borrar
  12. Estoy en la misma situación de que ahora que google quito la opción de apps menos seguras que se puede hacer ? Alguien que nos pueda apoyar.

    ResponderBorrar
    Respuestas
    1. https://youtu.be/MjwBufMWpRQ
      Encontre este link, para configurar tu cuenta de gmail paso a paso, para que genere una contraseña para la app que usaremos en nuestro codigo.
      ya la probe, ya pude enviar emails desde mi aplicación.

      Borrar

Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.