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
&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
Publicar un comentario