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

6 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

    ResponderEliminar
  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

    ResponderEliminar
  3. hola como instalo la libreria cdo ??

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

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

    ResponderEliminar
  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.

    ResponderEliminar

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