Envio de Email em Go (Golang): bibliotecas e exemplos de código

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

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.v2


Exemplo de envio de email HTML com anexo



package main

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

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

Recommendations