The official Go SDK for interacting with the SendLayer API, providing a simple and intuitive interface for sending emails, managing webhooks, and retrieving email events.
go get github.com/sendlayer/sendlayer-gopackage main
import (
"fmt"
"log"
"os"
"github.com/sendlayer/sendlayer-go"
)
func main() {
sl := sendlayer.New(os.Getenv("SENDLAYER_API_KEY"))
resp, err := sl.Emails.Send(&sendlayer.SendEmailRequest{
From: "[email protected]",
To: "[email protected]",
Subject: "Test Email",
Text: "This is a test email",
})
if err != nil {
log.Fatal(err)
}
fmt.Println("Email sent! Message ID:", resp.MessageID)
}- Email Module: Send emails with HTML/text content, attachments, CC/BCC, reply-to, custom headers, and tags
- Webhooks Module: Create, retrieve, and delete webhooks for various email events
- Events Module: Retrieve email events with filtering options
- Error Handling: Clear, typed errors for API and validation issues
Send emails using the SendLayer client. From and To accept a string (email) or EmailAddress (email + optional name). Cc, Bcc, and ReplyTo accept the same types and can be a single value or a slice.
sl := sendlayer.New("your-api-key")
resp, err := sl.Emails.Send(&sendlayer.SendEmailRequest{
From: sendlayer.EmailAddress{Email: "[email protected]", Name: "Paulie Paloma"},
To: []sendlayer.EmailAddress{
{Email: "[email protected]", Name: "Recipient 1"},
{Email: "[email protected]", Name: "Recipient 2"},
},
Subject: "Complex Email",
Text: "Plain text fallback",
Html: "<p>This is a <strong>test email</strong>!</p>",
Cc: []sendlayer.EmailAddress{{Email: "[email protected]", Name: "CC"}},
Bcc: []sendlayer.EmailAddress{{Email: "[email protected]", Name: "BCC"}},
ReplyTo: sendlayer.EmailAddress{Email: "[email protected]", Name: "Reply"},
Attachments: []sendlayer.Attachment{{Path: "path/to/file.pdf", Type: "application/pdf"}},
Headers: map[string]string{"X-Custom-Header": "value"},
Tags: []string{"tag1", "tag2"},
})
if err != nil {
log.Fatal(err)
}sl := sendlayer.New("your-api-key")
// Get all events
all, err := sl.Events.Get(nil)
if err != nil {
log.Fatal(err)
}
// Get filtered events (last 24h, opened)
end := time.Now()
start := end.Add(-24 * time.Hour)
ev := "opened"
filtered, err := sl.Events.Get(&sendlayer.GetEventsRequest{StartDate: &start, EndDate: &end, Event: ev})
if err != nil {
log.Fatal(err)
}
fmt.Println("All events count:", all.TotalRecords)
fmt.Println("Filtered events count:", filtered.TotalRecords)sl := sendlayer.New("your-api-key")
// Create a webhook
webhook, err := sl.Webhooks.Create(&sendlayer.WebhookCreateRequest{WebhookURL: "https://your-domain.com/webhook", Event: "open"})
if err != nil {
log.Fatal(err)
}
fmt.Println("Webhook created:", webhook.WebhookID)
// Get all webhooks
webhooks, err := sl.Webhooks.Get()
if err != nil {
log.Fatal(err)
}
fmt.Println("Webhooks:", webhooks)
// Delete a webhook
if err := sl.Webhooks.Delete(123); err != nil {
log.Fatal(err)
}The SDK returns typed errors to help you handle different scenarios:
resp, err := sl.Emails.Send(&sendlayer.SendEmailRequest{From: "[email protected]", To: "[email protected]", Subject: "Hi", Text: "Hello"})
if err != nil {
var apiErr *sendlayer.SendLayerAPIError
var valErr *sendlayer.SendLayerValidationError
if errors.As(err, &apiErr) {
fmt.Println("API error:", apiErr.Message, apiErr.StatusCode)
return
}
if errors.As(err, &valErr) {
fmt.Println("Validation error:", valErr.Error())
return
}
fmt.Println("Unexpected error:", err)
return
}To learn more about using the SendLayer SDK, be sure to check our Developer Documentation.
MIT License - see LICENSE file for details