Es posible que a menudo necesite enviar correos electrónicos a muchas cuentas utilizando programas para la autenticación y muchos otros fines.
El protocolo SMTP define estándares que permiten la comunicación por correo electrónico entre servidores de correo y agentes de transferencia de correo, mientras que el protocolo IMAP es para recibir correos electrónicos.
Go proporciona funcionalidad para actividades relacionadas con el correo electrónico definidas por el RFC en el paquete net/smtp, que también contiene las extensiones 8BITMIME, AUTH y STARTTLS.
El código utilizado en este proyecto está disponible en un Repositorio GitHub y es gratis para su uso bajo la licencia MIT.
Cómo enviar correos electrónicos en Go usando el paquete Net/SMTP
El paquete net/smtp es parte de la biblioteca estándar de Go, por lo que no necesita instalar ningún paquete externo. Solo necesita importar el paquete antes de usarlo.
importar (
"red/smtp"
"Iniciar sesión"
"criptografía/TLS"
"fmt"
)
También tendrá que importar el
Iniciar sesión paquete para registrar errores en la consola y el criptografía/TLS paquete para configurar una conexión segura.Una vez que haya importado el paquete net/smtp, debe escribir un Enviar correo() función para enviar el correo y luego llamar a la función en la función principal.
funciónprincipal() {
fmt. Imprimir (EnviarCorreo())
}
funciónEnviar correo()cuerda {
// Agrega código aquí
}
los Enviar correo() La función contendría el código que envía el correo a los destinatarios.
Cómo funciona el envío de correos electrónicos
El protocolo SMTP define los parámetros que debe tener todo correo. Estos parámetros son las direcciones de correo del remitente y el destinatario, un puerto en el que se envía el correo, un servidor host y un mensaje.
Los parámetros indicados anteriormente son importantes para el envío de correos electrónicos.
En este tutorial, aprenderá a enviar correos electrónicos de Yahoo. Sin embargo, el proceso es el mismo para cualquier proveedor de servidor de correo (MSP) que utilice.
Ya que está utilizando Yahoo Mail, inicie sesión en su Correo de yahoo cuenta, dirígete a Informacion de cuenta, y haga clic en el Seguridad de la cuenta pestaña. A continuación, genere una contraseña de aplicación. Deberá nombrar la aplicación y luego Yahoo Mail creará una contraseña para la aplicación, y puede usar la contraseña en su código junto con su dirección de correo.
En el Enviar correo() función, declarará tres variables; una variable que contiene la cadena de su correo electrónico, una que contiene su contraseña de correo electrónico y una cadena que contiene la dirección de correo electrónico a la que está enviando mensajes.
de := "[email protected]"
contraseña := "unaContraseñaSeguraAquí"
a := "[email protected]"
Puedes usar una rebanada y recorrer los elementos si tiene la intención de enviarlos a varios destinatarios.
Obtener y configurar el host y el puerto de correo electrónico
El protocolo SMTP utiliza los números de host y puerto para identificar el origen del correo electrónico. Aquí es donde entra en juego su MSP. Necesita saber el host y el número de puerto que su MSP le permite usar.
Consulte este recurso para obtener una lista de hosts MSP y números de puerto si usa correos electrónicos públicos como Gmail, Yahoo o Outlook. Google ha desactivado las "aplicaciones menos seguras" para Gmail; es posible que desee proteger su aplicación si está utilizando Gmail.
Una vez que tenga el número de puerto y la dirección del host, asígnelos a variables como esta:
servidor := "smtp.mail.yahoo.com"
puerto := "465"
Los números de host y puerto anteriores son de Yahoo Mail para usar en cuentas regulares. El servidor está alojado en smtp.mail.yahoo.com y puede usar el puerto 465 para enviar correos electrónicos.
Declaración del contenido del correo electrónico
El siguiente paso es declarar el contenido del correo como variables. El asunto y el cuerpo conforman el mensaje.
subject := "Oye, solo te estoy controlando".
cuerpo := "¡Espero que estés bien! Cómo está hoy. "
los tema la variable es el asunto del correo electrónico; la cuerpo variable es el cuerpo del correo electrónico que está enviando.
Configuración de los encabezados de correo electrónico
Deberá hacer un mapa de cadenas para indicar los encabezados del correo electrónico.
encabezados := hacer(mapa[cuerda]cuerda)
encabezados["De"] = de
encabezados["Para"] = para
encabezados["Asunto"] = asunto
mensaje := ""
por k, v := rango encabezados {
mensaje += fmt. Sprintf("%s: %s\r", k, v)
}
mensaje += "\r" + cuerpo
Primero, crea un mapa de claves y valores de cadena y establece los encabezados de su dirección, la dirección del destinatario y el asunto, como se muestra arriba. Usando un bucle for de rango en el encabezados mapa, un mensaje La variable se declara para contener los encabezados y el mensaje utilizando el formato de cadena.
Autenticación del correo electrónico
El correo electrónico necesita autenticación para verificar la fuente. El paquete smtp proporciona funcionalidad para la autenticación de correo electrónico utilizando el PlainAuth. los PlainAuth El método toma la identidad, el correo electrónico del remitente, la contraseña y el host como parámetros y devuelve un Autorización objeto que utilizará para enviar el correo electrónico.
autenticar := smtp. PlainAuth("", de, contraseña, anfitrión)
La identidad es su nombre de usuario, que se puede dejar en blanco, como se ve en este caso.
Creación de una conexión para el correo electrónico
Algunos proveedores de servicios de correo requieren que envíe el correo electrónico a través de una conexión. En este artículo, haremos un conexión TCP al servidor con configuraciones TLS.
tlsConfig := &tls. Configuración{
InseguroSaltarVerificar: verdadero,
Nombre del servidor: host,
}
En el código anterior, realizó una configuración de TLS haciendo referencia al Configuración estructura donde InseguroSaltarVerificar se fijó en verdadero, y el nombre del servidor se asignó al anfitrión variable.
Debe crear una conexión TCP usando el Marcar método de la tls paquete. los marcar El método toma en cuenta el tipo de conexión (TCP), en este caso, la dirección del servidor y las configuraciones de conexión TLS.
conexión, error: = tls. Dial("tcp", dirección del servidor, tlsConfig) err != nulo {
Iniciar sesión. Pánico (err)
}
En el código anterior, realizó una conexión TCP y manejó los errores; habrá creado una instancia de un nuevo paquete smtp usando el Cliente nuevo método de la red/smtp paquete. los Cliente nuevo El método toma una conexión y un host, respectivamente.
smtpClient, error: = smtp. NewClient (conexión, host)
si error! = nulo {
Iniciar sesión. Pánico (err)
}
Ahora que ha creado un SMTP instancia de cliente, debe establecer los parámetros de la cliente smtp y manejar errores.
si err = cliente smtp. Auth (autenticar); error! = nulo {
Iniciar sesión. Pánico (err)
}
si err = cliente smtp. Correo de); error! = nulo {
Iniciar sesión. Pánico (err)
}
si err = cliente smtp. Rcpt (encabezados ["Para"]); error! = nulo {
Iniciar sesión. Pánico (err)
}
En el ejemplo anterior, pasó los parámetros de autenticación, dirección del remitente y dirección del destinatario a sus respectivos métodos y manejó los errores.
Finalmente, debe escribir en la instancia de conexión, y puede hacerlo creando un escritor usando el Datos método de su cliente smtp instancia.
escritor, err := smtpClient. Datos()
si error! = nulo {
Iniciar sesión. Pánico (err)
}
_, err = escritor. Escribe([]byte(mensaje))
si error! = nulo {
Iniciar sesión. Pánico (err)
}
Después de crear un escritor, escribe una porción de byte del mensaje usando el Escribe método como en el ejemplo anterior.
err = escritor. Cerca()
si error! = nulo {
Iniciar sesión. Pánico (err)
}
err = cliente smtp. Abandonar()
si error! = nulo {
devolver
}
devolver "¡Exitoso, el correo fue enviado!"
Cierre el escritor y salga de la instancia de conexión del cliente smtp usando el código anterior. los Enviar correo() La función devuelve un mensaje de éxito, como se muestra arriba.
Al llamar al Enviar correo() función en el principal función, debe obtener el mensaje de éxito registrado en su consola y el correo electrónico enviado a su destinatario.
Hay más en el paquete de red
El paquete net contiene muchos paquetes para funcionalidades relacionadas con la red y el paquete smtp es solo uno de ellos. También puede utilizar los paquetes TCP y HTTP para el desarrollo relacionado con redes.
Es posible que encuentre abrumador el paquete net/smtp si no es un desarrollador de back-end. Existen muchas otras alternativas para enviar correos electrónicos rápidamente con menos líneas de código. Puede consultar compañías de marketing por correo electrónico como SendGrid, Twilio y MailChimp y servicios de boletines como Substack y Revue que le permiten enviar correos electrónicos a muchos usuarios sin estrés.