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): bibliotecas e exemplos de código



O envio de emails é uma das tarefas principais para qualquer aplicação web: registro de usuários, redefinição de senha, notificações e newsletters. Na linguagem Go (Golang), existem tanto ferramentas padrão para trabalhar com SMTP quanto poderosas bibliotecas de terceiros que simplificam o envio de emails com templates HTML, anexos e suporte a diferentes serviços de email. Neste artigo, vamos abordar detalhadamente como enviar email em Go, analisar bibliotecas populares e fornecer exemplos práticos de código.



Biblioteca padrão net/smtp



O pacote net/smtp faz parte da biblioteca padrão do Go e fornece um conjunto mínimo de funções para enviar emails através de um servidor SMTP. Ele é adequado para mensagens de texto simples, mas exige a formatação manual dos cabeçalhos e do corpo do email de acordo com a RFC 5322.



Exemplo de envio de um email de texto simples:



package main

import ( "fmt" "net/smtp")

func main() { // Dados para conexão ao servidor SMTP smtpHost := "smtp.example.com" smtpPort := "587" from := "sender@example.com" password := "your_password" to := []string{"recipient@example.com"}

// Formata o corpo do email (obrigatório com cabeçalhos) subject := "Subject: Olá do Go!" mime := "MIME-version: 1.0;Content-Type: text/plain; charset=\\"UTF-8\\";

" body := "Este é um email de teste enviado usando Go." msg := []byte(subject + mime + 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!")}


Limitações do net/smtp:

  • Não suporta anexos sem codificação Base64 manual.
  • Exige formatação manual dos cabeçalhos MIME.
  • Não é prático para enviar emails HTML com imagens.


Biblioteca gomail/v2



Uma das bibliotecas de terceiros mais populares para envio de email em Go é o gomail (pacote gopkg.in/mail.v2). Ela oferece uma API conveniente para trabalhar com emails: suporte a anexos, partes HTML e texto, configuração de conexão SMTP e também a possibilidade de envio via SSL/TLS.



Instalação:

go get gopkg.in/mail.v2


Exemplo de envio de email HTML com anexo:



package main

import ( "fmt" "gopkg.in/mail.v2")

func main() { m := mail.NewMessage() m.SetHeader("From", "sender@example.com") m.SetHeader("To", "recipient@example.com") m.SetHeader("Subject", "Email HTML com anexo")

// Partes alternativas: texto e HTML m.SetBody("text/plain", "Se você está vendo este texto, seu cliente não suporta HTML.") m.AddAlternative("text/html", "<h1>Olá!</h1><p>Esta é a versão HTML do email.</p>")

// Adiciona anexo m.Attach("/path/to/file.pdf")

// Configuração do cliente SMTP d := mail.NewDialer("smtp.example.com", 587, "sender@example.com", "your_password") d.StartTLSPolicy = mail.MandatoryStartTLS

if err := d.DialAndSend(m); err != nil { fmt.Println("Erro:", err) return } fmt.Println("Email enviado!")}


Vantagens do gomail:

  • API simples e intuitiva.
  • Formatação automática dos cabeçalhos MIME.
  • Suporte a anexos e imagens incorporadas (CID).
  • Trabalha com SSL/TLS e StartTLS.


Biblioteca go-smtp (emersion/go-smtp)



A biblioteca go-smtp da emersion é uma alternativa de nível mais baixo que oferece controle total sobre a conexão SMTP. Ela é útil se você

Recommendations