Go
Pré-requisitos
Instalação
O módulo Go se chama usesend-go — é o SDK do projeto open-source que dá origem ao Madmail, e é esse o caminho que você importa.
go get github.com/usesend/usesend-go
Inicialização
Crie um cliente com a sua chave de API.
package main
import (
"context"
"log"
usesend "github.com/usesend/usesend-go"
)
func main() {
client, err := usesend.NewClient("us_12345")
if err != nil {
log.Fatal(err)
}
}
A chave também pode vir da variável de ambiente USESEND_API_KEY.
Instância própria
Se você roda a sua própria instância, informe a URL base com WithBaseURL.
client, err := usesend.NewClient(
"us_12345",
usesend.WithBaseURL("https://app.madmail.com.br"),
)
if err != nil {
log.Fatal(err)
}
Informação
A URL base é só o domínio raiz. Não inclua /api/v1: o SDK monta os caminhos da API sozinho.
Opções
WithBaseURL(url string): troca a URL base da API, útil para instância própria;WithHTTPClient(*http.Client): usa um cliente HTTP seu.
Informação
O cliente HTTP padrão usa timeout de 30s. As requisições vão com o cabeçalho User-Agent: usesend-go.
Enviando emails
resp, errResp, err := client.Emails.Send(
context.Background(),
usesend.SendEmailPayload{
To: []string{"ola@acme.com"},
From: "ola@suaempresa.com.br",
Subject: "Email pelo Madmail",
HTML: "<p>O Madmail é o jeito mais simples de enviar emails transacionais</p>",
Text: "O Madmail é o jeito mais simples de enviar emails transacionais",
Headers: map[string]string{
"X-Campaign": "boas-vindas",
},
},
)
if err != nil {
log.Fatal(err)
}
if errResp != nil {
log.Fatalf("erro da API: %s", errResp.Message)
}
log.Printf("Email na fila com o ID: %s", resp.EmailID)
Informação
Cabeçalhos personalizados são repassados como vieram. O Madmail só controla os cabeçalhos X-Usesend-Email-ID e References.
Gerenciando contatos
Pegar o id da lista de contatos
O id da lista de contatos fica no painel do Madmail.
Criar contatos
contact, apiErr, err := client.Contacts.Create(
context.Background(),
"contactBook_123",
usesend.CreateContactPayload{
Email: "ola@exemplo.com.br",
FirstName: "Ana",
LastName: "Souza",
},
)
if err != nil {
log.Fatal(err) // erro de transporte
}
if apiErr != nil {
log.Fatalf("erro da API: %s", apiErr.Message)
}
log.Printf("ID do contato: %s", contact.ContactID)
Atualizar contatos
contact, apiErr, err := client.Contacts.Update(
context.Background(),
"contactBook_123",
"contact_456",
usesend.UpdateContactPayload{
FirstName: "Ana",
LastName: "Souza",
},
)
if err != nil {
log.Fatal(err)
}
if apiErr != nil {
log.Fatalf("erro da API: %s", apiErr.Message)
}