Render25 — High-performance transactional email platform. Now available.
Client SDKs

Go SDK

The official Render25 Go client module. Idiomatic, type-safe, context-aware, and built with zero external dependencies.

Go 1.20+github.com/Render-25/go-sdkZero Dependencies

Installation

bash
go get github.com/Render-25/go-sdk

Basic Usage

Initialize the client. It automatically detects RENDER25_API_KEY from the environment.

main.go
package main

import (
	"fmt"
	"log"

	"github.com/Render-25/go-sdk"
)

func main() {
	// Reads RENDER25_API_KEY automatically from environment
	client, err := render25.NewClient()
	if err != nil {
		log.Fatalf("Failed to initialize Render25: %v", err)
	}

	resp, err := client.Emails.Send(render25.SendEmailOptions{
		From:    "support@yourdomain.com",
		To:      []string{"user@example.com"},
		Subject: "Welcome to Render25!",
		Html:    "<h1>Welcome aboard!</h1><p>Transactional email sent via Go.</p>",
		Text:    "Welcome aboard! Transactional email sent via Go.",
	})
	if err != nil {
		log.Fatalf("Error sending email: %v", err)
	}

	fmt.Printf("Dispatched message ID: %s\n", resp.ID)
}

Note

Set RENDER25_API_KEY in your environment variables.

CC, BCC & Custom Reply-To

advanced.go
package main

import (
	"github.com/Render-25/go-sdk"
)

func sendReceipt(client *render25.Client) error {
	_, err := client.Emails.Send(render25.SendEmailOptions{
		From:    "support@yourdomain.com",
		To:      []string{"customer@example.com"},
		Cc:      []string{"manager@example.com"},
		Bcc:     []string{"archive@example.com"},
		ReplyTo: "helpdesk@yourdomain.com",
		Subject: "Order #1042 Confirmed",
		Html:    "<p>Your order is being processed.</p>",
	})
	return err
}

File Attachments

Pass raw file bytes directly with []byte. The SDK automatically encodes them into base64.

attachments.go
package main

import (
	"os"

	"github.com/Render-25/go-sdk"
)

func sendInvoice(client *render25.Client) error {
	pdfBytes, err := os.ReadFile("invoice.pdf")
	if err != nil {
		return err
	}

	_, err = client.Emails.Send(render25.SendEmailOptions{
		From:    "billing@yourdomain.com",
		To:      []string{"client@example.com"},
		Subject: "Your Invoice #1042",
		Html:    "<p>Your invoice is attached below.</p>",
		Attachments: []render25.Attachment{
			{
				Filename:    "invoice_1042.pdf",
				Content:     pdfBytes, // Raw []byte
				ContentType: "application/pdf",
			},
		},
	})
	return err
}

Gin Web Framework Example

server.go
package main

import (
	"net/http"

	"github.com/gin-gonic/gin"
	"github.com/Render-25/go-sdk"
)

func main() {
	r := gin.Default()
	client := render25.MustNewClient()

	r.POST("/api/welcome", func(c *gin.Context) {
		var req struct {
			Email string `json:"email"`
			Name  string `json:"name"`
		}
		if err := c.ShouldBindJSON(&req); err != nil {
			c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
			return
		}

		resp, err := client.Emails.Send(render25.SendEmailOptions{
			From:    "welcome@yourdomain.com",
			To:      []string{req.Email},
			Subject: "Welcome " + req.Name + "!",
			Html:    "<h1>Welcome " + req.Name + "!</h1>",
		})
		if err != nil {
			c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
			return
		}

		c.JSON(http.StatusOK, gin.H{"id": resp.ID})
	})

	r.Run(":8080")
}