Installation
go get github.com/unosend/unosend-go
Requirements
Environment Variables
Never hardcode your API key. Use environment variables instead.
UNOSEND_API_KEY = un_your_api_key
package main
import (
" os "
" github.com/unosend/unosend-go "
)
func main () {
client := unosend . New ( os . Getenv ( "UNOSEND_API_KEY" ))
}
Basic Usage
package main
import (
" fmt "
" log "
" github.com/unosend/unosend-go "
)
func main () {
client := unosend . New ( "un_your_api_key" )
// Send an email
email , err := client . Emails . Send ( & unosend . SendEmailRequest {
From : "[email protected] " ,
To : [] string { "[email protected] " },
Subject : "Welcome!" ,
HTML : "<h1>Hello!</h1><p>Welcome to our platform.</p>" ,
})
if err != nil {
log . Fatal ( err )
}
fmt . Printf ( "Email sent: %s \n " , email . ID )
}
All SDK methods return a result and an error. Check the error before using the result:
// Successful response
email , err := client . Emails . Send ( & unosend . SendEmailRequest { ... })
if err != nil {
// Handle error
if apiErr , ok := err .( * unosend . Error ); ok {
fmt . Printf ( "API Error %d : %s \n " , apiErr . Code , apiErr . Message )
}
return
}
// Use the result
fmt . Printf ( "Email ID: %s \n " , email . ID )
fmt . Printf ( "Status: %s \n " , email . Status )
Send to Multiple Recipients
Send with Attachments
import (
" encoding/base64 "
" os "
)
// Read file and encode to base64
fileContent , _ := os . ReadFile ( "invoice.pdf" )
encoded := base64 . StdEncoding . EncodeToString ( fileContent )
email , err := client . Emails . Send ( & unosend . SendEmailRequest {
From : "[email protected] " ,
To : [] string { "[email protected] " },
Subject : "Your Invoice" ,
HTML : "<p>Please find your invoice attached.</p>" ,
Attachments : [] unosend . Attachment {
{
Filename : "invoice.pdf" ,
Content : encoded ,
ContentType : "application/pdf" ,
},
},
})
Working with Domains
// Add a domain
domain , err := client . Domains . Create ( "yourdomain.com" )
fmt . Printf ( "Domain added: %s \n " , domain . ID )
fmt . Printf ( "DNS Records: %+v \n " , domain . Records )
// List all domains
domains , err := client . Domains . List ()
for _ , d := range domains {
fmt . Printf ( " %s - %s \n " , d . Name , d . Status )
}
// Verify domain DNS
domain , err := client . Domains . Verify ( domainID )
fmt . Printf ( "Domain status: %s \n " , domain . Status )
// Delete a domain
err := client . Domains . Delete ( domainID )
// Create an audience
audience , err := client . Audiences . Create ( "Newsletter Subscribers" )
fmt . Printf ( "Audience created: %s \n " , audience . ID )
// Add a contact to the audience
contact , err := client . Contacts . Create ( & unosend . CreateContactRequest {
AudienceID : audience . ID ,
Email : "[email protected] " ,
FirstName : "John" ,
LastName : "Doe" ,
})
fmt . Printf ( "Contact added: %s \n " , contact . ID )
// List contacts
contacts , err := client . Contacts . List ( audience . ID )
for _ , c := range contacts {
fmt . Printf ( " %s - %s \n " , c . Email , c . FirstName )
}
// Update a contact
firstName := "Jane"
contact , err := client . Contacts . Update ( contactID , & unosend . UpdateContactRequest {
FirstName : & firstName ,
})
// Delete a contact
err := client . Contacts . Delete ( contactID )
Error Handling
email , err := client . Emails . Send ( & unosend . SendEmailRequest { ... })
if err != nil {
// Check if it's an API error
if apiErr , ok := err .( * unosend . Error ); ok {
fmt . Printf ( "API Error %d : %s \n " , apiErr . Code , apiErr . Message )
// Handle specific error codes
switch apiErr . Code {
case 401 :
fmt . Println ( "Invalid API key" )
case 429 :
fmt . Println ( "Rate limit exceeded" )
}
} else {
// Network or other error
fmt . Printf ( "Error: %v \n " , err )
}
return
}
Custom Configuration
import (
" net/http "
" time "
)
// Custom base URL (for self-hosted instances)
client := unosend . New ( "un_your_api_key" ,
unosend . WithBaseURL ( "https://your-instance.com/api/v1" ),
)
// Custom HTTP client with timeout
client := unosend . New ( "un_your_api_key" ,
unosend . WithHTTPClient ( & http . Client {
Timeout : 60 * time . Second ,
}),
)
Available Methods
Method Description Emails.Send()Send an email Emails.Get(id)Get email details by ID Emails.List()List all emails Domains.Create(name)Add a domain Domains.Verify(id)Verify domain DNS Domains.List()List all domains Domains.Delete(id)Delete a domain Audiences.Create(name)Create an audience Audiences.List()List all audiences Contacts.Create(request)Add a contact to audience Contacts.List(audienceID)List contacts in audience Contacts.Update(id, request)Update a contact Contacts.Delete(id)Delete a contact
View full API reference Explore all available API endpoints