Skip to content

SendLayer/sendlayer-go

Repository files navigation

SendLayer Logo

SendLayer Go SDK

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.

MIT licensed Publish Go SDK

Installation

go get github.com/sendlayer/sendlayer-go

Quick Start

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

Features

  • 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

Email

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

Events

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)

Webhooks

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

Error Handling

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
}

More Details

To learn more about using the SendLayer SDK, be sure to check our Developer Documentation.

License

MIT License - see LICENSE file for details

About

Official Golang SDK for SendLayer Email API

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages