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)
}