Envío de correo electrónico en Go (Golang): bibliotecas y ejemplos de código

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Envío de correo electrónico en Go (Golang): revisión completa de bibliotecas y herramientas



En el desarrollo web moderno, el envío de correos electrónicos sigue siendo una de las tareas clave para notificaciones, registros, recuperación de contraseñas y boletines. El lenguaje Go (Golang) ofrece varias formas efectivas de integrarse con servidores SMTP. En este artículo, analizaremos la biblioteca estándar net/smtp, la popular biblioteca de terceros gomail y la más avanzada go-smtp. Aprenderá a enviar correos electrónicos de texto plano y HTML, agregar archivos adjuntos y configurar una conexión segura.



1. Biblioteca estándar net/smtp



El paquete net/smtp está integrado en Go y no requiere instalación adicional. Proporciona funciones básicas para conectarse a un servidor SMTP, autenticarse y enviar mensajes. Sin embargo, para trabajar con requisitos modernos (HTML, archivos adjuntos, SSL/TLS), será necesario escribir más código.



Ejemplo simple de envío de un correo de texto plano



package main

import ( "fmt" "net/smtp")

func main() { // Configuración del servidor SMTP (ejemplo para Gmail) smtpHost := "smtp.gmail.com" smtpPort := "587" from := "your_email@gmail.com" password := "your_app_password" to := []string{"recipient@example.com"}

// Asunto y cuerpo del correo (formato más simple) subject := "Subject: Correo de prueba desde Go" body := "¡Hola! Este mensaje fue enviado usando net/smtp." msg := []byte(subject + "" + body)

// Autenticación auth := smtp.PlainAuth("", from, password, smtpHost)

// Envío err := smtp.SendMail(smtpHost+":"+smtpPort, auth, from, to, msg) if err != nil { fmt.Println("Error al enviar:", err) return } fmt.Println("¡Correo enviado exitosamente!")}


Importante: Para Gmail, debe usar una contraseña de aplicación (no la contraseña principal) y permitir el acceso para aplicaciones menos seguras. Para otros servicios (Yandex, Mail.ru), los parámetros pueden variar.



Envío de un correo HTML a través de net/smtp



Para enviar un correo HTML, debe especificar explícitamente el encabezado Content-Type:



package main

import ( "fmt" "net/smtp")

func main() { smtpHost := "smtp.gmail.com" smtpPort := "587" from := "your_email@gmail.com" password := "your_app_password" to := []string{"recipient@example.com"}

// Formamos los encabezados MIME headers := make(map[string]string) headers["From"] = from headers["To"] = "recipient@example.com" headers["Subject"] = "Correo HTML desde Go" headers["MIME-Version"] = "1.0" headers["Content-Type"] = "text/html; charset=\\"UTF-8\\""

// Construimos el mensaje message := "" for k, v := range headers { message += fmt.Sprintf("%s: %s\\r", k, v) } message += "\\r" + "<h1>¡Hola!</h1><p>Este es un correo <b>HTML</b>.</p>"

auth := smtp.PlainAuth("", from, password, smtpHost) err := smtp.SendMail(smtpHost+":"+smtpPort, auth, from, to, []byte(message)) if err != nil { fmt.Println("Error:", err) }}


La desventaja de net/smtp es la falta de soporte para archivos adjuntos y una estructura de correo multicomponente compleja. Para tales tareas, es mejor usar bibliotecas especializadas.



2. Biblioteca gomail



Gomail es una de las bibliotecas de terceros más populares para enviar correos electrónicos en Go. Proporciona una API conveniente, soporte para HTML, archivos adjuntos, incrustación de imágenes, SSL/TLS y encabezados personalizables.



Instalación



go get gopkg.in/mail.v2


Ejemplo de envío de un correo HTML con archivo adjunto



package main

import ( "crypto/tls" "fmt" gomail "gopkg.in/mail.v2")

func main() { m := gomail.NewMessage(

Recommendations