Implementar SMTP con GeneXus 16


SMTP es un protocolo de comunicación que permite el envío de correos electrónicos en internet.

Ejemplo de como implementarlo en GeneXus 16:

Creare una Transacción donde se guardaran los correos electrónicos a enviar:


El atributo EmailOk es el que determina si el correo esta enviado o no.


Source del Procedimiento EnvioEmail:

Nota: Las especificaciones del servidor de correo con el cual vamos a enviar los mails la obtengo por parámetros con un procedimiento.


ObtenerParametrosEmail.Call(&Host, &Port, &SenderName, &SenderAddress, &Auth, &Secure, &Username, &Password)

//for each a la tabla emails filtrando por los que no están enviados

for each Emails
    where EmailOk = SiNo.No
    
    &MailRecipient.Address = EmailCorreo.Trim()
    &MailRecipient.Name = EmailNombre.Trim()
    &MailMessage.To.Clear()
    &MailMessage.To.Add(&MailRecipient)
    &MailMessage.Subject = EmailAsunto.Trim()
    &MailMessage.Text = EmailTexto.ToString()
    &MailMessage.HTMLText = EmailTexto.ToString()
    &SMTPSession.Host = &Host.Trim()
    &SMTPSession.Port = &Port
    &SMTPSession.Sender.Name = &SenderName.Trim()
    &SMTPSession.Sender.Address = &SenderAddress.Trim()
    &SMTPSession.Authentication = &Auth
    &SMTPSession.Secure = &Secure
    &SMTPSession.UserName = &Username.Trim()
    &SMTPSession.Password = &Password.Trim()

    //hago login en smtp con las credenciales suministradas anteriormente
    &SMTPSession.Login()
    if &SMTPSession.ErrCode <> 0
        //si hubo error en el logueo, lo guardo en variables
        &ErrorCodigo = &SMTPSession.ErrCode
        &ErrorDescripcion = &SMTPSession.ErrDescription
    else
        //hago el envio del correo
        &SMTPSession.Send(&MailMessage)
        if &SMTPSession.ErrCode <> 0
            //si hubo error al enviar el mensaje, lo guardo en variables
            &ErrorCodigo = &SMTPSession.ErrCode
            &ErrorDescripcion = &SMTPSession.ErrDescription
        else
            &ErrorCodigo = 0
            &ErrorDescripcion = 'No hubo errores'
        endif
        //me deslogueo de la sesión de SMTP
        &SMTPSession.Logout()
    endif

    if &ErrorCodigo = 0
        //todo salio bien, actualizo el correo, lo coloco como enviado y la fecha en que se envió
        EmailOk = SiNo.Si
        EmailFchHoraEnvio = ServerNow()
    else
        //hubo un error, actualizo el correo, sumo 1 al intento de envio
        EmailIntentos += 1
    endif

    //actualizo el correo y guardo el error del código y su descripción
    EmailErrorCod = &ErrorCodigo
    EmailErrorDesc = &ErrorDescripcion

    //envió correos cada 5 segundos
    &DuermoProceso = sleep(5)

endfor

Comentarios