Envío y Recepción de Emails con OAuth desde GeneXus (Gmail / Office 365)
Con el aumento de las medidas de seguridad en servicios como Gmail y Office 365, el uso de usuario/contraseña para enviar correos electrónicos dejó de ser una opción viable. Actualmente, OAuth 2.0 es el estándar para autorizar el acceso a estos servicios. En este post, te muestro cómo integrarlo con GeneXus para enviar y recibir correos de forma segura.
Por un tiempo funciono correctamente el generar "application specific passwords" generando y registrando dichas contraseñas, pero estan dejando de funcionar y ya no es tan facil llegar a generar nuevas contraseñas. Por eso, es importante actualizar las aplicationes que necesiten enviar o recibir mail con estos proveedores para que usen OAuth 2.0.
Para esto, se necesita usar el OAuth Module, y programar algo asi:
&Success = OAuth.v2.RefreshToken(&OAuthAuthorizationConfig, &RefreshToken, &OAuthAccessToken, &DateTimeTokenExpire, &Messages)
if (NOT &Success)
Log.Error(&Messages)
return
endif
&AccessTokenString = &OAuthAccessToken.access_token
&SMTPSession.Host = 'smtp.gmail.com'
&SMTPSession.Port = 465
&SMTPSession.Timeout = 20
&SMTPSession.Secure = 1
&SMTPSession.Authentication = 1
&SMTPSession.UserName = 'Info@gmail.com'
&SMTPSession.Password = &AccessTokenString
&SMTPSession.AuthenticationMethod = "XOAUTH2"
&SMTPSession.Login()
&MailMessage.Subject="Email Subject"
&MailMessage.Text="Message body"
&MailRecipient.Address = "xxx@gmail.com"
&MailRecipient.Name = "xxx"
&MailMessage.To.Add(&MailRecipient) &SMTPSession.Send(&MailMessage)
Para recibir mails, seria algo parecido (sin manejo de errores)
/* Antes de usar esto, hay que obtener el &ClientId &ClientSecret &MailHostToken */ &OAuthAuthorizationConfig.AccessTokenUrl = OAuth.v2.AccessTokenProvider.Google &OAuthAuthorizationConfig.ClientId = &ClientID &OAuthAuthorizationConfig.ClientSecret = &ClientSecret &Success = OAuth.v2.RefreshToken(&OAuthAuthorizationConfig, &MailHostToken, &OAuthAccessToken, &DateTimeTokenExpire, &OutMessages) if Not &Success Log.Error(&OutMessages.ToJson()) ... return else &POP3Session.newMessages = 0 &POP3Session.Host = 'pop.gmail.com' &POP3Session.Port = 995 &POP3Session.Secure=1 &POP3Session.UserName = &MailUserName &POP3Session.Password = &OAuthAccessToken.access_token &POP3Session.AuthenticationMethod = "XOAUTH2" if &POP3Session.ErrCode <> 0 .... endif endif Una cosa que es importante si están con .net, es AGREGAR EL ARCHIVO config.gx en la raíz de la KB y poner las líneas:
SMTPSession=MailKit OpenPOP=MailKit
Comentarios
Publicar un comentario
1) Lee el post
2) Poné tu opinión sobre el mismo.
Todos los comentarios serán leidos y la mayoría son publicados.