Перейти к документации
Go

Установка

Один модуль, Go 1.24 и новее, и ничего, кроме стандартной библиотеки.

Установка

Текущий выпуск: 0.0.1. В нём есть метод для каждого метода TypeScript SDK, и проверка паритета модуля ломает сборку, когда какого-то не хватает или он отправляет другой запрос.

go get github.com/bfzli/openemail-go
main.go
package main import (	"context"	"fmt"	"log" 	"github.com/bfzli/openemail-go") func main() {	client := openemail.New() 	email, err := client.Emails.Send(context.Background(), openemail.Body{		"from":    "Acme Billing <[email protected]>",		"to":      "[email protected]",		"subject": "Your September invoice",		"html":    "<p>Invoice attached.</p>",	})	if err != nil {		log.Fatal(err)	} 	fmt.Println(email.ID(), email.String("status"))}

openemail.New() читает ключ из OPENEMAIL_API_KEY, поэтому в коде нет учётных данных. Передайте openemail.WithAPIKey, если ваша конфигурация хранится в другом месте. New никогда не завершается ошибкой: об отсутствующем или неверно составленном ключе сообщают client.Err() и первый вызов.

Тело запроса представляет собой openemail.Body, то есть map[string]any, ключи которого сохраняют имена API, поэтому scheduledAt пишется здесь так же, как в справочнике API. Ответ представляет собой openemail.Object, декодированный JSON с методами чтения, такими как ID, String, Int, Bool, Time и Object.

То, что Send вернул результат, не значит, что сообщение ушло. Запланированная или отменяемая отправка возвращается со статусом queued или scheduled и завершается позже. Читайте status, а не сам факт возврата из вызова.

Где он работает

Go 1.24 и новее, на любой платформе, для которой собирается Go. Запросы идут через net/http, поэтому соединения используются повторно, а HTTPS_PROXY учитывается. Клиент можно использовать из нескольких горутин одновременно: создайте один при запуске программы и делитесь им.

Клиент несёт API-ключ рабочего пространства, который может отправлять почту и читать почтовый ящик, поэтому его место на сервере, в задании или в инструменте, который работает на вашей собственной машине. Храните ключ в переменной окружения или в секретах вашего фреймворка, но никогда в коде.