Golang Enviar correo electrónico

Golang Enviar correo electrónico
El protocolo SMTP es uno de los componentes básicos de Internet moderno. El protocolo actúa como el estándar para las transmisiones de correo electrónico. Comprende un servidor de correo y un cliente de correo para facilitar la transferencia de correos electrónicos.

En esta guía, discutiremos cómo puede enviar correos electrónicos utilizando el paquete SMTP en GO. Para las pruebas, utilizaremos un servidor SMTP alojado localmente usando Mailslurper.

Golang SMTP

El paquete SMTP es un subgrado del paquete Golang Net. Implementa funcionalidades de alto nivel para trabajar con el protocolo SMTP.

Aprendamos cómo enviar correo electrónico usando el paquete SMTP.

El paquete SMTP proporciona un método sendmail () que le permite enviar correo electrónico a la dirección especificada.

La sintaxis de la función es como se muestra:

FUNC SendMail (cadena addr, una autenticación, desde la cadena, a [] String, Msg [] BYTE) Error

La función acepta la dirección del servidor SMTP como una cadena, un mecanismo de autenticación, dirección de correo electrónico para enviar, la dirección de correo electrónico para enviar y el mensaje de correo electrónico como parámetros.

El mensaje de correo electrónico debe comenzar con el encabezado, una línea en blanco y el cuerpo de correo electrónico. Debe finalizar cada línea del mensaje con caracteres CRLF, permitiendo el cumplimiento del estilo de correo electrónico RFC 822.

El siguiente código muestra un ejemplo simple de usar la función sendmail para enviar un correo electrónico.

paquete principal
importar (
"FMT"
"registro"
"net/smtp"
)
const (
Nombre de usuario = "Linuxhint"
Passwd = "contraseña"
Host = "localhost"
)
func Main ()
de: = "[email protected] "
a: = [] cadena
"[email protected] ",

msg: = [] byte ("De: [email protected] \ r \ n " +
"Para: [email protected] " +
"Asunto: Golang Testing Mail \ r \ n" +
"Cuerpo de correo electrónico: bienvenido a ir!\ r \ n ")
Auth: = SMTP.PlainAuth ("", nombre de usuario, passwd, anfitrión)
Err: = SMTP.Sendmail (host+": 25", auth, from, to, msg)
Si err != nulo
registro.Fatal (err)

fmt.Println ("correo enviado correctamente!")

En el ejemplo anterior, comenzamos importando los paquetes requeridos. Luego especificamos las variables requeridas. En nuestro ejemplo, establecemos el nombre de usuario, la contraseña y el host.

En la función principal, establecemos el remitente del correo electrónico y el receptor utilizando las variables desde y para.

Luego viene el cuerpo de correo electrónico, usamos el estilo RFC 822 para construir el mensaje. Tenga en cuenta que cada línea está separada con caracteres CRLF.

A continuación, construimos la autenticación utilizando el método PlainAuth. La función toma la identidad, el nombre de usuario, la contraseña y el host y los engranajes un mecanismo de autenticación simple con el servidor. La función luego vuelve a un objeto de autenticación.

Finalmente, enviamos el correo electrónico utilizando la función sendmail que pasa la dirección, el objeto de autenticación, el remitente, el destinatario y el mensaje como argumentos.

Método de autenticación de correo electrónico

Si ejecuta el código anterior en MailSlurper, el servidor devolverá un error a continuación y cerrará la conexión.

$ Go Run correos electrónicos.ir
2022/02/02 02:52:39 SMTP: el servidor no es compatible
Estado de salida 1

Puede resolver esto utilizando una función SendMail personalizada. Un código de ejemplo es como se muestra a continuación:

paquete principal
importar (
"Codificación/base64"
"FMT"
"registro"
"net/smtp"
"instrumentos de cuerda"
)
const (
Nombre de usuario = "Linuxhint"
Passwd = "contraseña"
Host = "localhost"
)
func Main ()
de: = "[email protected] "
a: = [] cadena
"[email protected] ",

msg: = [] byte ("Cuerpo de correo electrónico: bienvenido a ir!\ r \ n ")
err: = sendmail (host+": 2500", de, "correo electrónico de prueba de golang", string (msg), to)
Si err != nulo
registro.Fatal (err)

fmt.Println ("correo enviado correctamente!")

FUNC Sendmail (addr, desde, sujeto, cadena de cuerpo, a [] cadena) Error
r: = cadenas.NewRePlacer ("\ r \ n", "", "\ r", "", "\ n", "", "%0a", ","%0d "," ")
c, err: = smtp.Dial (ADDR)
Si err != nulo
devolver err

diferir c.Cerca()
Si err = c.Correo (R.Reemplazar (desde)); errar != nulo
devolver err

para i: = rango a
a [i] = r.Reemplazar (a [i])
Si err = c.Rcpt (a [i]); errar != nulo
devolver err


w, err: = c.Datos()
Si err != nulo
devolver err

msg: = "a:" + cadenas.Únete (a, ",") + "\ r \ n" +
"De:" + de + "\ r \ n" +
"Asunto:" + sujeto + "\ r \ n" +
"Content-type: text/html; charset =" utf-8 "\ r \ n" +
"Contenido de transferencia de contenido: base64 \ r \ n" +
"\ r \ n" + base64.Estdencoding.EncodetoString ([] byte (cuerpo))
_, err = w.Escribir ([] byte (msg))
Si err != nulo
devolver err

err = w.Cerca()
Si err != nulo
devolver err

regreso C.Abandonar()

Golang Enviar correo - Copia de carbono

También puede enviar correos electrónicos a varios usuarios que usan copia de carbono y copia de carbono ciego. Los destinatarios de CC serán visibles para todos.

Podemos hacer esto usando el código a continuación:

paquete principal
importar (
"FMT"
"registro"
"net/smtp"
"instrumentos de cuerda"
)
Tipo de estructura de correo
Cadena de remitente
Encadenar
CC [] cadena
Cadena BCC []
Cadena de sujetos
Cuerda del cuerpo

func Main ()
remitente: = "[email protected]"
a: = [] cadena
"[email protected] ",
"[email protected] ",
"Má[email protected]",

cc: = [] cadena
"[email protected] ",
"[email protected],

nombre de usuario: = "Linuxhint"
passwd: = "contraseña"
Anfitrión: = "localhost"
Asunto: = "Prueba de correo de Golang"
cuerpo: = "cuerpo de mensaje"
req: = mail
Remitente: remitente,
A: a,
CC: CC,
Asunto: sujeto,
Cuerpo cuerpo,

msg: = composemsg (req)
Auth: = SMTP.PlainAuth ("", nombre de usuario, passwd, anfitrión)
Err: = SMTP.Sendmail (host+": 2500", auth, remitente, a, [] byte (msg))
Si err != nulo
registro.Fatal (err)

fmt.Println ("mensaje enviado correctamente!")

// Construir mensaje basado en el CC
FUNC ComposeMSg (correo de correo) cadena
// cuerda vacía
msg: = ""
// Establecer remitente
msg += fmt.Sprintf ("De: %s \ r \ n", correo.Remitente)
// Si más de 1 destinatario
Si len (correo.A)> 0
msg += fmt.Sprintf ("cc: %s \ r \ n", cuerdas.Únete (correo.Cc, ";"))

// añadir tema
msg += fmt.Sprintf ("Asunto: %s \ r \ n", correo.Sujeto)
// Agregar cuerpo de correo
msg += fmt.Sprintf ("cuerpo: %s \ r \ n", correo.Cuerpo)
msg de devolución

El código anterior enviará los correos electrónicos a los destinatarios especificados utilizando el protocolo SMTP.

Clausura

En esta guía, exploramos los conceptos básicos de usar el paquete SMTP en enviar correos electrónicos a uno o más usuarios. Consulte la documentación para obtener más información.