Envio de Email em Go (Golang): visão geral completa de bibliotecas e ferramentas
No desenvolvimento web moderno, o envio de emails continua sendo uma das tarefas principais para notificações, registros, recuperação de senhas e campanhas de marketing. A linguagem Go (Golang) oferece várias maneiras eficientes de integração com servidores SMTP. Neste artigo, vamos analisar a biblioteca padrão net/smtp, a popular biblioteca de terceiros gomail e a avançada go-smtp. Você aprenderá como enviar emails simples de texto e HTML, adicionar anexos e configurar uma conexão segura.
1. Biblioteca padrão net/smtp
O pacote net/smtp é embutido no Go e não requer instalação adicional. Ele fornece funções básicas para conectar-se a um servidor SMTP, autenticar e enviar mensagens. No entanto, para trabalhar com requisitos modernos (HTML, anexos, SSL/TLS), será necessário escrever mais código.
Exemplo simples de envio de email de texto
package main
import ( "fmt" "net/smtp")
func main() { // Configurações do servidor SMTP (exemplo para Gmail) smtpHost := "smtp.gmail.com" smtpPort := "587" from := "your_email@gmail.com" password := "your_app_password" to := []string{"recipient@example.com"}
// Assunto e corpo do email (formato mais simples) subject := "Subject: Email de teste do Go" body := "Olá! Esta mensagem foi enviada usando net/smtp." msg := []byte(subject + "" + body)
// Autenticação auth := smtp.PlainAuth("", from, password, smtpHost)
// Envio err := smtp.SendMail(smtpHost+":"+smtpPort, auth, from, to, msg) if err != nil { fmt.Println("Erro ao enviar:", err) return } fmt.Println("Email enviado com sucesso!")}Importante: Para o Gmail, é necessário usar uma senha de aplicativo (não a senha principal) e permitir acesso para aplicativos menos seguros. Para outros serviços (Yandex, Mail.ru), os parâmetros podem ser diferentes.
Envio de email HTML via net/smtp
Para enviar um email HTML, é necessário especificar explicitamente o cabeçalho 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"}
// Montando cabeçalhos MIME headers := make(map[string]string) headers["From"] = from headers["To"] = "recipient@example.com" headers["Subject"] = "Email HTML do Go" headers["MIME-Version"] = "1.0" headers["Content-Type"] = "text/html; charset=\\"UTF-8\\""
// Montando a mensagem message := "" for k, v := range headers { message += fmt.Sprintf("%s: %s\\r", k, v) } message += "\\r" + "<h1>Olá!</h1><p>Este é um email <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("Erro:", err) }}A desvantagem do net/smtp é a falta de suporte para anexos e estrutura complexa de mensagens multicomponentes. Para essas tarefas, é melhor usar bibliotecas especializadas.
2. Biblioteca gomail
Gomail é uma das bibliotecas de terceiros mais populares para envio de email em Go. Ela oferece uma API conveniente, suporte a HTML, anexos, incorporação de imagens, SSL/TLS e cabeçalhos personalizáveis.
Instalação
go get gopkg.in/mail.v2Exemplo de envio de email HTML com anexo
package main
import ( "crypto/tls" "fmt" gomail "gopkg.in/mail.v2")
func main() { m := gomail.NewMessage( Também na biblioteca
GuzzleHTTP/Promises PHP: guia completo com exemplos práticos
Testes em Swift (iOS/macOS): frameworks e ferramentas
Registro para JavaScript (Node.js): melhores soluções e bibliotecas