En determinadas tarefas é necesario que un documento sexa enviado por correo electrónico a determinados usuarios. Dito documento pode ser programado, si é susceptible de ser automatizado, e que sexa enviado por correo unha vez elaborado. A linguaxe de programación R permite o envío de correos electrónicos mediante determinadas librarías. Esta entrada pretende amosar algunhas das posibilidades que se ofrecen dende os repositorios de paquetes de R. Pasamos a continuación a presentar algunha delas:
Libraría CURL
Esta é a libraría básica para poder enviar correos. Dita librería permite a formación dun corpo de texto no correo que se envía:
email_from <- "From: Usuario usuario@correo.com"
email_to <- "To: Destinatario destinatario@correo.com"
email_titulo <- "Subject: Probas curl"
email_opcions <- "Content-Type: text/html; charset=UTF-8"
email_espazo <- ""
email_texto <- "bla bla bla bla"
mensaxe_curl <-
paste(
email_from,
email_to,
email_titulo,
email_opcions,
email_espazo,
email_texto,
sep = "\n"
)
curl::send_mail(
mail_from = "usuario@correo.com",
mail_rcpt = "destinatario@correo.com",
message = mensaxe_curl,
smtp_server = "smtp://smtp-aplicacions-auth.correo.com:587",
use_ssl = FALSE,
verbose = FALSE,
username = "correo: usuario",
password = "correo: contrasinal"
)
Este é o sistema máis básico para o envio de correos electrónicos en R. Vantaxas, as poucas opcións que temos á hora dunha configuración básica (aínda que a libraría curl ten máis opcións dispoñibles das que se amosan aquí). Desvantaxas, a opción de poder enviar documentos adxuntos ten máis dificultades e, dependendo do servidor de correo, pode resultar realmente complexo.
Libraría SENDMAIL
A libraría sendmail permite o envío de correos electrónicos no que o adxuntar documentos é un proceso moito máis sinxelo que coa libraría curl:
sendmailR::sendmail(
from = "usuario@correo.com",
to = "destinatario@correo.com",
subject = "Título do correo electrónico",
msg = "bla bla bla bla bla",
control =
list(
smtpServer = "smtp-aplicacions-auth.correo.com",
verbose = TRUE
),
engineopts =
list(
username = "correo: usuario",
password = "correo: contrasinal",
smtpPort = "587",
use_ssl = FALSE
)
)
Libraría BLASTULA
A libraría Blastula forma parte do proxecto RStudio. Dita libraría permite a incorporación de documentos adxuntos dun xeito doado. Esta libraría necesita inicialmente a creación dunha clave que permite codificar o usuario que envia os correos ao sistema:
Xeración da clave de usuario no sistema:
blastula::create_smtp_creds_key(
id = "nome_clave_usuario",
user = "correo: usuario",
host = "smtp://smtp-aplicacions-auth.correo.com",
port = 587,
use_ssl = ALSE,
overwrite = TRUE)
Unha vez xerada a clave do usuario, podemos pasar á xeración do corpo do correo:
blastula::compose_email(
body = "bla bla bla bla bla"
) |>
blastula::smtp_send(
from = "usuario@correo.com",
to = "destinatario@correo.com",
subject = "Título do correo electrónico",
credentials = blastula::creds_key(id = "nome_clave_usuario")
)
A clara desvataxa deste sistema é a creación da clave de usuario, dado que só se garda nun equipo o cal non permite a execución do proceso por outros usuarios e fai que envío de correos non sexa un proceso «limpo» para executar en entornos de varios usuarios.
Libraría MAILR
Por último, comentar a libraría mailR. Ata o de agora, todas as librarías que se explicaron execútanse sen emprega as librarías de Java. Esta libraría sen embargo, é elaborada a partir de dita linguaxe de programación. A clara desvantaxa desta libraría é que se por algún motivo o equipo dende o que se executa o código R tivera algún problema con Java, dita libraría non funcionaría correctamente:
mailR::send.mail(
from = "usuario@correo.com",
to = "destinatario@correo.com",
subject = "Título do correo electrónico",
body = "bla bla bla bla bla",
smtp =
list(
host.name = "smtp-aplicacions-auth.correo.com",
port = 587,
user.name = "correo: usuario",
passwd = "correo: contrasinal",
tls = TRUE,
ssl = FALSE
),
authenticate = TRUE,
send = TRUE,
attach.files = NULL
)
Para adxuntar documentos ao correo, só hai que indicar na variable attach.files a ruta absoluta do documento a enviar.
Exemplo completo
Pasamos agora a elaborar un exemplo completo de como enviar un correo mediante a libraría sendmailR que, en definitiva, é a recomendación final. Antes diso, hai que ter en conta un problema de codificación no envío do texto do correo que se podo producir. Para evitar isto, recollemos as variantes que se dan coas letras con acentos en galego e castelán, e como introducilos mediante a codificaición de javascipt.
| LETRA | JAVASCRIPT |
| á | \u00e1 |
| é | \u00e9 |
| í | \u00ed |
| ó | \u00f3 |
| ú | \u00fa |
| ü | \u00fc |
| Á | \u00c1 |
| É | \u00c9 |
| Í | \u00cd |
| Ó | \u00d3 |
| Ú | \u00da |
| Ü | \u00dc |
| ñ | \u00f1 |
| Ñ | \u00d1 |
Construción do correo a enviar
Pasamos a elaborar con R o proceso completo para o envío dos corres electrónicos e un documento adxunto. Primeiro a xeración do contido do correo:
titulo_correo <- "Título do correo a enviar"
corpo_correo_texto <- "bla bla bla bla bla"
url_complementario <- "url documentación"
dir_informes <- "ruta absoluta documentos"
corpo_correo <-
paste(
'Bos d\u00edas',
paste(
corpo_correo_texto,
"Ach\u00e9gase o informe correspondente.",
sep = "\r\n"
),
paste(
"Para m\u00e1is informaci\u00f3n consultar a web",
url_complementario,
sep = "\r\n"
),
"Un sa\u00fado",
sep = "\r\n\n"
)
Encoding(corpo_correo) <- "UTF-8"
Unha vez recollido o contido do correo pasamos ao proceso de envío:
sendmail(
from = "usuario@correo.com",
to = "destinatario@correo.com",
subject = titulo_correo,
msg =
c(
mime_part(x = corpo_correo),
mime_part(x = dir_informes)
),
control =
list(
smtpServer = "smtp-aplicacions-auth.correo.com",
verbose = TRUE
),
engineopts =
list(
username = "correo: usuario",
password = "correo: contrasinal",,
smtpPort = "587",
use_ssl = FALSE
)
)