haskimail

package module
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 5, 2026 License: MIT Imports: 18 Imported by: 0

README

Haskimail Go

Go-библиотека для работы с API Haskimail — сервиса транзакционной электронной почты.

Без внешних зависимостей, только стандартная библиотека. Требуется Go 1.21+.

Установка

go get github.com/DashaMail/haskimail-go

Быстрый старт

client := haskimail.NewClient("ваш-серверный-токен")

resp, err := client.DeliverMessage(ctx, &haskimail.Message{
    From:       "отправитель@домен.ru",
    To:         "получатель@домен.ru",
    Subject:    "Тема письма",
    HTMLBody:   "<h1>Привет!</h1>",
    TrackOpens: haskimail.Bool(true),
    TrackLinks: haskimail.TrackLinksHTMLAndText,
})
if err != nil {
    log.Fatal(err)
}
fmt.Println("ID сообщения:", resp.MessageID)
Отправка по шаблону
client.DeliverMessageWithTemplate(ctx, &haskimail.TemplatedMessage{
    TemplateID:    12345, // или TemplateAlias: "welcome"
    From:          "от@домен.ru",
    To:            "кому@домен.ru",
    TemplateModel: map[string]any{"name": "Иван", "product": "Haskimail"},
})
Вложения
att, err := haskimail.AttachmentFromFile("/путь/к/отчёт.pdf", "")
msg.AddAttachment(att)

// встроенное изображение
msg.AddAttachment(haskimail.NewAttachment("logo.png", pngBytes, "image/png", "cid:logo"))
Получатели с именами
msg.To = haskimail.FormatRecipients(
    haskimail.Recipient{Name: "Иван", Email: "ivan@домен.ru"},
    haskimail.Recipient{Name: "Анна", Email: "anna@домен.ru"},
)
Параметры списков
bounces, err := client.GetBounces(ctx, haskimail.NewParams().
    Int("count", 50).
    Int("offset", 0).
    String("type", "HardBounce").
    Date("fromdate", time.Now().AddDate(0, 0, -7)))
API аккаунта
account := haskimail.NewAccountClient("токен-аккаунта")
servers, err := account.GetServers(ctx, haskimail.NewParams().Int("count", 10).Int("offset", 0))

Настройка клиента

client := haskimail.NewClient(token,
    haskimail.WithBaseURL("api.example.ru"),       // свой хост
    haskimail.WithInsecure(),                       // HTTP вместо HTTPS
    haskimail.WithConnectTimeout(10*time.Second),   // по умолчанию 60 с
    haskimail.WithReadTimeout(30*time.Second),      // по умолчанию 60 с
    haskimail.WithHTTPClient(myHTTPClient),         // свой *http.Client
)

Клиенты потокобезопасны: создайте один экземпляр и используйте его из всех горутин. Каждый метод принимает context.Context для отмены и дедлайнов.

Обработка ошибок

Ошибки API имеют тип *haskimail.Error и проверяются через errors.Is / errors.As:

_, err := client.DeliverMessage(ctx, msg)

var apiErr *haskimail.Error
switch {
case errors.Is(err, haskimail.ErrInvalidAPIKey):   // 401
case errors.Is(err, haskimail.ErrInvalidMessage):  // 422
    errors.As(err, &apiErr)
    log.Printf("код %d: %s", apiErr.ErrorCode, apiErr.Message)
case errors.Is(err, haskimail.ErrTimeout):         // 408
case errors.Is(err, haskimail.ErrInternalServer):  // 500
case errors.Is(err, haskimail.ErrUnknown):         // прочие HTTP-коды
case err != nil:                                    // сетевые ошибки, отмена контекста
}

При пакетной отправке HTTP-ответ успешный, а результат каждого письма нужно проверять по ErrorCode в соответствующем элементе ответа.

Особенности API

  • Перегрузок в Go нет, поэтому операции по алиасу вынесены в отдельные методы: GetTemplateByAlias, SetTemplateByAlias, DeleteTemplateByAlias, а открытия и клики конкретного сообщения — в GetMessageOpensByID и GetMessageClicksByID.
  • Необязательные логические поля в запросах — указатели (*bool), чтобы можно было явно передать false. Используйте haskimail.Bool(…), haskimail.Int(…).
  • Даты в ответах имеют тип *haskimail.Time, который встраивает time.Time и понимает все форматы дат API. Даты без часового пояса трактуются в haskimail.TimeLocation (по умолчанию локальный пояс).
  • Значения параметров запроса URL-кодируются, а ID и алиасы в путях экранируются автоматически.
  • Тип вложений из файла определяется по расширению, а если не удалось — по содержимому.

Тесты

Юнит-тесты (без сети, на httptest): проверяют все 66 методов (HTTP-метод, путь, query, тело, токен), сериализацию, ошибки, форматы дат, вложения и отмену по контексту.

go test -race ./...

Интеграционные тесты против живого API:

export HASKIMAIL_SERVER_TOKEN=...       # обязательно
export HASKIMAIL_ACCOUNT_TOKEN=...      # для тестов API аккаунта
export HASKIMAIL_SENDER_EMAIL=...       # подтверждённый отправитель (для отправки писем)
export HASKIMAIL_RECIPIENT_EMAIL=...    # получатель тестовых писем
go test -tags integration -v -run Integration ./...

Тесты только читают данные, кроме отправки тестовых писем (если заданы отправитель и получатель) и создания временных шаблона и вебхука, которые сразу удаляются. Каждый ответ API дополнительно сверяется с Go-моделями: если API вернул поле, которого нет в модели, в выводе появится строка НЕИЗВЕСТНЫЕ ПОЛЯ с телом ответа.

Documentation

Overview

Package haskimail — Go-клиент для API Haskimail (https://api.haskimail.ru/), сервиса транзакционной электронной почты.

Пакет предоставляет два клиента:

  • Client — серверный API (отправка писем, шаблоны, отказы, статистика, вебхуки, каналы, стоп-списки). Создаётся через NewClient с серверным токеном.
  • AccountClient — API аккаунта (серверы, домены, подписи отправителей, пуш шаблонов). Создаётся через NewAccountClient с токеном аккаунта.

Пример:

client := haskimail.NewClient("ваш-серверный-токен")
resp, err := client.DeliverMessage(ctx, &haskimail.Message{
	From:     "отправитель@домен.ru",
	To:       "получатель@домен.ru",
	Subject:  "Тема письма",
	HTMLBody: "<h1>Привет!</h1>",
})

Все методы принимают context.Context для отмены и таймаутов. Ошибки API возвращаются как *Error и проверяются через errors.Is / errors.As:

if errors.Is(err, haskimail.ErrInvalidAPIKey) { ... }

Пакет не имеет внешних зависимостей — только стандартная библиотека.

Example
package main

import (
	"context"
	"errors"
	"fmt"
	"log"

	"github.com/DashaMail/haskimail-go"
)

func main() {
	client := haskimail.NewClient("ваш-серверный-токен")

	msg := &haskimail.Message{
		From:       "отправитель@домен.ru",
		To:         "получатель@домен.ru",
		Subject:    "Тема письма",
		HTMLBody:   "<h1>Привет!</h1><p>Это письмо отправлено через Haskimail.</p>",
		TrackOpens: haskimail.Bool(true),
		TrackLinks: haskimail.TrackLinksHTMLAndText,
	}
	msg.AddMetadata("campaign", "welcome")

	resp, err := client.DeliverMessage(context.Background(), msg)
	if errors.Is(err, haskimail.ErrInvalidMessage) {
		var apiErr *haskimail.Error
		errors.As(err, &apiErr)
		log.Fatalf("письмо отклонено: код %d, %s", apiErr.ErrorCode, apiErr.Message)
	} else if err != nil {
		log.Fatal(err)
	}
	fmt.Println("ID сообщения:", resp.MessageID)
}

Index

Examples

Constants

View Source
const (
	// Version — версия библиотеки.
	Version = "1.0.0"

	// DefaultAPIURL — хост API по умолчанию.
	DefaultAPIURL = "api.haskimail.ru"

	// ServerTokenHeader — заголовок для серверного токена.
	ServerTokenHeader = "X-Haski-Server-Token"

	// AccountTokenHeader — заголовок для токена аккаунта.
	AccountTokenHeader = "X-Haski-Account-Token"

	// DefaultConnectTimeout — таймаут установки соединения по умолчанию.
	DefaultConnectTimeout = 60 * time.Second

	// DefaultReadTimeout — таймаут ожидания ответа по умолчанию.
	DefaultReadTimeout = 60 * time.Second
)
View Source
const (
	TrackLinksNone        = "None"
	TrackLinksHTML        = "Html"
	TrackLinksHTMLAndText = "HtmlAndText"
	TrackLinksText        = "Text"
)

Режимы отслеживания ссылок (поле TrackLinks).

View Source
const (
	MessageStreamTransactional = "Transactional"
	MessageStreamBroadcasts    = "Broadcasts"
	MessageStreamInbound       = "Inbound"
)

Типы каналов.

View Source
const (
	TemplateTypeStandard = "Standard"
	TemplateTypeLayout   = "Layout"
)

Типы шаблонов.

Variables

View Source
var (
	// ErrInvalidAPIKey — HTTP 401, неверный или отсутствующий токен.
	ErrInvalidAPIKey = errors.New("haskimail: неверный API-токен")
	// ErrTimeout — HTTP 408.
	ErrTimeout = errors.New("haskimail: таймаут запроса")
	// ErrInvalidMessage — HTTP 422, ошибка валидации запроса.
	ErrInvalidMessage = errors.New("haskimail: некорректный запрос")
	// ErrInternalServer — HTTP 500.
	ErrInternalServer = errors.New("haskimail: внутренняя ошибка сервера")
	// ErrUnknown — любой другой неуспешный HTTP-статус.
	ErrUnknown = errors.New("haskimail: неизвестная ошибка")
)

Сентинел-ошибки для проверки через errors.Is.

View Source
var TimeLocation = time.Local

TimeLocation — часовой пояс для дат API, пришедших без указания зоны (например "2024-01-02 15:04:05"). По умолчанию — локальный.

Functions

func Bool

func Bool(v bool) *bool

Bool возвращает указатель на значение. Удобно для необязательных полей запросов.

func FormatRecipients

func FormatRecipients(rs ...Recipient) string

FormatRecipients собирает строку адресатов вида "Имя"<email>,"Имя2"<email2> для полей To, Cc и Bcc.

func FormatRecipientsMap

func FormatRecipientsMap(m map[string]string) string

FormatRecipientsMap собирает строку адресатов из карты: ключ — имя, значение — email. Порядок детерминирован (сортировка по имени).

func Int

func Int(v int) *int

Int возвращает указатель на значение.

func ParseTime

func ParseTime(s string) (time.Time, error)

ParseTime разбирает строку в одном из поддерживаемых форматов.

func String

func String(v string) *string

String возвращает указатель на значение.

Types

type AccountClient

type AccountClient struct {
	// contains filtered or unexported fields
}

AccountClient — клиент API аккаунта Haskimail. Безопасен для конкурентного использования.

func NewAccountClient

func NewAccountClient(accountToken string, opts ...Option) *AccountClient

NewAccountClient создаёт клиент API аккаунта.

func (AccountClient) BaseURL

func (b AccountClient) BaseURL() string

BaseURL возвращает базовый URL клиента, например "https://api.haskimail.ru".

func (*AccountClient) CreateDomain

func (c *AccountClient) CreateDomain(ctx context.Context, d *Domain) (*DomainDetails, error)

CreateDomain добавляет домен.

func (*AccountClient) CreateSenderSignature

func (c *AccountClient) CreateSenderSignature(ctx context.Context, s *SignatureToCreate) (*SignatureDetails, error)

CreateSenderSignature создаёт подпись.

func (*AccountClient) CreateServer

func (c *AccountClient) CreateServer(ctx context.Context, s *Server) (*Server, error)

CreateServer создаёт сервер.

func (*AccountClient) DeleteDomain

func (c *AccountClient) DeleteDomain(ctx context.Context, id int64) (*RequestResponse, error)

DeleteDomain удаляет домен.

func (*AccountClient) DeleteSenderSignature

func (c *AccountClient) DeleteSenderSignature(ctx context.Context, id int64) (*RequestResponse, error)

DeleteSenderSignature удаляет подпись.

func (*AccountClient) DeleteServer

func (c *AccountClient) DeleteServer(ctx context.Context, id int64) (*RequestResponse, error)

DeleteServer удаляет сервер.

func (*AccountClient) GetDomainDetails

func (c *AccountClient) GetDomainDetails(ctx context.Context, id int64) (*DomainDetails, error)

GetDomainDetails возвращает подробности домена.

func (*AccountClient) GetDomains

func (c *AccountClient) GetDomains(ctx context.Context) (*Domains, error)

GetDomains возвращает список доменов.

func (*AccountClient) GetSenderSignatureDetails

func (c *AccountClient) GetSenderSignatureDetails(ctx context.Context, id int64) (*SignatureDetails, error)

GetSenderSignatureDetails возвращает подробности подписи.

func (*AccountClient) GetSenderSignatures

func (c *AccountClient) GetSenderSignatures(ctx context.Context, p *Params) (*Signatures, error)

GetSenderSignatures возвращает список подписей.

func (*AccountClient) GetServer

func (c *AccountClient) GetServer(ctx context.Context, id int64) (*Server, error)

GetServer возвращает сервер по ID.

func (*AccountClient) GetServers

func (c *AccountClient) GetServers(ctx context.Context, p *Params) (*Servers, error)

GetServers возвращает список серверов.

func (*AccountClient) PushTemplates

func (c *AccountClient) PushTemplates(ctx context.Context, r *TemplatesPushRequest) (*TemplatesPush, error)

PushTemplates копирует шаблоны между серверами.

func (*AccountClient) RequestNewSenderSignatureDKIM

func (c *AccountClient) RequestNewSenderSignatureDKIM(ctx context.Context, id int64) (*RequestResponse, error)

RequestNewSenderSignatureDKIM запрашивает новый DKIM-ключ для подписи.

func (*AccountClient) ResendSenderSignatureConfirmation

func (c *AccountClient) ResendSenderSignatureConfirmation(ctx context.Context, id int64) (*RequestResponse, error)

ResendSenderSignatureConfirmation повторно отправляет письмо подтверждения.

func (*AccountClient) SetDomain

func (c *AccountClient) SetDomain(ctx context.Context, id int64, d *Domain) (*DomainDetails, error)

SetDomain изменяет домен.

func (*AccountClient) SetSenderSignature

func (c *AccountClient) SetSenderSignature(ctx context.Context, id int64, s *SignatureToCreate) (*SignatureDetails, error)

SetSenderSignature изменяет подпись.

func (*AccountClient) SetServer

func (c *AccountClient) SetServer(ctx context.Context, id int64, s *Server) (*Server, error)

SetServer изменяет сервер.

func (*AccountClient) VerifyDomainDKIM

func (c *AccountClient) VerifyDomainDKIM(ctx context.Context, id int64) (*DomainDetails, error)

VerifyDomainDKIM проверяет DKIM-запись домена.

func (*AccountClient) VerifyDomainSPF

func (c *AccountClient) VerifyDomainSPF(ctx context.Context, id int64) (*DomainDetails, error)

VerifyDomainSPF проверяет SPF-запись домена.

func (*AccountClient) VerifySenderSignatureSPF

func (c *AccountClient) VerifySenderSignatureSPF(ctx context.Context, id int64) (*SignatureDetails, error)

VerifySenderSignatureSPF проверяет SPF подписи.

type Attachment

type Attachment struct {
	Name          string `json:"Name,omitempty"`
	Content       string `json:"Content,omitempty"`
	ContentType   string `json:"ContentType,omitempty"`
	ContentID     string `json:"ContentId,omitempty"`
	ContentLength int    `json:"ContentLength,omitempty"`
}

Attachment — вложение письма. Content — содержимое в Base64.

func AttachmentFromFile

func AttachmentFromFile(path, contentID string) (Attachment, error)

AttachmentFromFile читает файл с диска и создаёт вложение. Тип содержимого определяется по расширению, а если не удалось — по содержимому.

func NewAttachment

func NewAttachment(name string, content []byte, contentType, contentID string) Attachment

NewAttachment создаёт вложение из байтов (кодирует их в Base64). contentID задаётся для встраиваемых (inline) изображений, иначе пустая строка.

type BaseTemplate

type BaseTemplate struct {
	TemplateID     int64  `json:"TemplateId,omitempty"`
	Alias          string `json:"Alias,omitempty"`
	Name           string `json:"Name,omitempty"`
	Active         *bool  `json:"Active,omitempty"`
	TemplateType   string `json:"TemplateType,omitempty"`
	LayoutTemplate string `json:"LayoutTemplate,omitempty"`
}

BaseTemplate — краткие сведения о шаблоне (в списке шаблонов).

type Bounce

type Bounce struct {
	ID            int64  `json:"ID"`
	MessageID     string `json:"MessageID"`
	ServerID      int64  `json:"ServerID"`
	Type          string `json:"Type"`
	TypeCode      int    `json:"TypeCode"`
	BouncedAt     *Time  `json:"BouncedAt"`
	DumpAvailable bool   `json:"DumpAvailable"`
	Email         string `json:"Email"`
	From          string `json:"From"`
	Subject       string `json:"Subject"`
	Content       string `json:"Content"`
	Inactive      bool   `json:"Inactive"`
	CanActivate   bool   `json:"CanActivate"`
	Name          string `json:"Name"`
	Tag           string `json:"Tag"`
	Description   string `json:"Description"`
	Details       string `json:"Details"`
	RecordType    string `json:"RecordType"`
	MessageStream string `json:"MessageStream"`
}

Bounce — отказ доставки.

type BounceStat

type BounceStat struct {
	Date         *Time `json:"Date"`
	HardBounce   int   `json:"HardBounce"`
	SoftBounce   int   `json:"SoftBounce"`
	SMTPAPIError int   `json:"SmtpApiError"`
	Transient    int   `json:"Transient"`
	Unknown      int   `json:"Unknown"`
	DMARCPolicy  int   `json:"DMARCPolicy"`
	Subscribe    int   `json:"Subscribe"`
}

BounceStat — отказы за день по типам.

type BounceType

type BounceType struct {
	Type  string `json:"Type"`
	Name  string `json:"Name"`
	Count int    `json:"Count"`
}

BounceType — счётчик отказов одного типа.

type BounceWebhook

type BounceWebhook struct {
	Bounce
	Metadata map[string]string `json:"Metadata"`
}

BounceWebhook — событие отказа.

type BounceWebhookTrigger

type BounceWebhookTrigger struct {
	Enabled        *bool `json:"Enabled,omitempty"`
	IncludeContent *bool `json:"IncludeContent,omitempty"`
}

BounceWebhookTrigger — триггер отказов и жалоб на спам.

type Bounces

type Bounces struct {
	TotalCount int      `json:"TotalCount"`
	Bounces    []Bounce `json:"Bounces"`
}

Bounces — страница списка отказов.

type ClickLocationStat

type ClickLocationStat struct {
	Date *Time `json:"Date"`
	HTML int   `json:"Html"`
	Text int   `json:"Text"`
}

ClickLocationStat — клики в HTML- и текстовой версии за день.

type ClickStat

type ClickStat struct {
	Date   *Time `json:"Date"`
	Clicks int   `json:"Clicks"`
	Unique int   `json:"Unique"`
}

ClickStat — клики за день.

type ClickWebhook

type ClickWebhook struct {
	OutboundMessageClick
	Metadata map[string]string `json:"Metadata"`
}

ClickWebhook — событие клика.

type Client

type Client struct {
	// contains filtered or unexported fields
}

Client — клиент серверного API Haskimail. Безопасен для конкурентного использования.

func NewClient

func NewClient(serverToken string, opts ...Option) *Client

NewClient создаёт клиент серверного API.

func (*Client) ActivateBounce

func (c *Client) ActivateBounce(ctx context.Context, id int64) (*Bounce, error)

ActivateBounce повторно активирует адрес после отказа.

func (*Client) ArchiveMessageStream

func (c *Client) ArchiveMessageStream(ctx context.Context, id string) (*MessageStreamArchiveResponse, error)

ArchiveMessageStream архивирует канал.

func (Client) BaseURL

func (b Client) BaseURL() string

BaseURL возвращает базовый URL клиента, например "https://api.haskimail.ru".

func (*Client) CreateMessageStream

func (c *Client) CreateMessageStream(ctx context.Context, s *MessageStream) (*MessageStream, error)

CreateMessageStream создаёт канал.

func (*Client) CreateSuppressions

func (c *Client) CreateSuppressions(ctx context.Context, messageStream string, e SuppressionEntries) (*SuppressionStatuses, error)

CreateSuppressions добавляет адреса в стоп-лист канала.

func (*Client) CreateTemplate

func (c *Client) CreateTemplate(ctx context.Context, t *Template) (*Template, error)

CreateTemplate создаёт шаблон.

func (*Client) CreateWebhook

func (c *Client) CreateWebhook(ctx context.Context, w *Webhook) (*Webhook, error)

CreateWebhook создаёт вебхук.

func (*Client) DeleteSuppressions

func (c *Client) DeleteSuppressions(ctx context.Context, messageStream string, e SuppressionEntries) (*SuppressionStatuses, error)

DeleteSuppressions удаляет адреса из стоп-листа канала.

func (*Client) DeleteTemplate

func (c *Client) DeleteTemplate(ctx context.Context, id int64) (*RequestResponse, error)

DeleteTemplate удаляет шаблон по ID.

func (*Client) DeleteTemplateByAlias

func (c *Client) DeleteTemplateByAlias(ctx context.Context, alias string) (*RequestResponse, error)

DeleteTemplateByAlias удаляет шаблон по алиасу.

func (*Client) DeleteWebhook

func (c *Client) DeleteWebhook(ctx context.Context, id int64) (*RequestResponse, error)

DeleteWebhook удаляет вебхук.

func (*Client) DeliverMessage

func (c *Client) DeliverMessage(ctx context.Context, m *Message) (*MessageResponse, error)

DeliverMessage отправляет одно письмо.

func (*Client) DeliverMessageWithTemplate

func (c *Client) DeliverMessageWithTemplate(ctx context.Context, m *TemplatedMessage) (*MessageResponse, error)

DeliverMessageWithTemplate отправляет письмо по шаблону.

func (*Client) DeliverMessages

func (c *Client) DeliverMessages(ctx context.Context, ms []Message) ([]MessageResponse, error)

DeliverMessages отправляет пакет писем. Результат по каждому письму — в соответствующем элементе ответа (проверяйте ErrorCode).

func (*Client) DeliverMessagesWithTemplate

func (c *Client) DeliverMessagesWithTemplate(ctx context.Context, ms []TemplatedMessage) ([]MessageResponse, error)

DeliverMessagesWithTemplate отправляет пакет писем по шаблонам.

func (*Client) GetBounce

func (c *Client) GetBounce(ctx context.Context, id int64) (*Bounce, error)

GetBounce возвращает отказ по ID.

func (*Client) GetBounceStats

func (c *Client) GetBounceStats(ctx context.Context, p *Params) (*OutboundBounceStats, error)

GetBounceStats возвращает отказы по дням.

func (*Client) GetBounces

func (c *Client) GetBounces(ctx context.Context, p *Params) (*Bounces, error)

GetBounces возвращает список отказов. Обычно требуются параметры count и offset.

func (*Client) GetClickLocationStats

func (c *Client) GetClickLocationStats(ctx context.Context, p *Params) (*OutboundClickLocationStats, error)

GetClickLocationStats возвращает клики по расположению (HTML/текст).

func (*Client) GetClickPlatformStats

func (c *Client) GetClickPlatformStats(ctx context.Context, p *Params) (*OutboundClickPlatformStats, error)

GetClickPlatformStats возвращает клики по платформам.

func (*Client) GetClickStats

func (c *Client) GetClickStats(ctx context.Context, p *Params) (*OutboundClickStats, error)

GetClickStats возвращает клики по дням.

func (*Client) GetDeliveryStats

func (c *Client) GetDeliveryStats(ctx context.Context) (*DeliveryStats, error)

GetDeliveryStats возвращает сводку по доставке.

func (*Client) GetMessageClicks

func (c *Client) GetMessageClicks(ctx context.Context, p *Params) (*OutboundMessageClicks, error)

GetMessageClicks возвращает клики по всем сообщениям.

func (*Client) GetMessageClicksByID

func (c *Client) GetMessageClicksByID(ctx context.Context, messageID string, p *Params) (*OutboundMessageClicks, error)

GetMessageClicksByID возвращает клики одного сообщения.

func (*Client) GetMessageDetails

func (c *Client) GetMessageDetails(ctx context.Context, messageID string) (*OutboundMessageDetails, error)

GetMessageDetails возвращает подробности сообщения.

func (*Client) GetMessageOpens

func (c *Client) GetMessageOpens(ctx context.Context, p *Params) (*OutboundMessageOpens, error)

GetMessageOpens возвращает открытия по всем сообщениям.

func (*Client) GetMessageOpensByID

func (c *Client) GetMessageOpensByID(ctx context.Context, messageID string, p *Params) (*OutboundMessageOpens, error)

GetMessageOpensByID возвращает открытия одного сообщения.

func (*Client) GetMessageStream

func (c *Client) GetMessageStream(ctx context.Context, id string) (*MessageStream, error)

GetMessageStream возвращает канал по ID.

func (*Client) GetMessageStreams

func (c *Client) GetMessageStreams(ctx context.Context) (*MessageStreams, error)

GetMessageStreams возвращает каналы сервера.

func (*Client) GetMessages

func (c *Client) GetMessages(ctx context.Context, p *Params) (*OutboundMessages, error)

GetMessages ищет исходящие сообщения.

func (*Client) GetOpenPlatformStats

func (c *Client) GetOpenPlatformStats(ctx context.Context, p *Params) (*OutboundOpenPlatformStats, error)

GetOpenPlatformStats возвращает открытия по платформам.

func (*Client) GetOpenStats

func (c *Client) GetOpenStats(ctx context.Context, p *Params) (*OutboundOpenStats, error)

GetOpenStats возвращает открытия по дням.

func (*Client) GetOutboundStats

func (c *Client) GetOutboundStats(ctx context.Context, p *Params) (*OutboundStats, error)

GetOutboundStats возвращает сводную статистику.

func (*Client) GetSendStats

func (c *Client) GetSendStats(ctx context.Context, p *Params) (*OutboundSendStats, error)

GetSendStats возвращает число отправленных писем по дням.

func (*Client) GetSpamStats

func (c *Client) GetSpamStats(ctx context.Context, p *Params) (*OutboundSpamStats, error)

GetSpamStats возвращает жалобы на спам по дням.

func (*Client) GetSuppressions

func (c *Client) GetSuppressions(ctx context.Context, messageStream string, p *Params) (*Suppressions, error)

GetSuppressions возвращает стоп-лист канала.

func (*Client) GetTemplate

func (c *Client) GetTemplate(ctx context.Context, id int64) (*Template, error)

GetTemplate возвращает шаблон по ID.

func (*Client) GetTemplateByAlias

func (c *Client) GetTemplateByAlias(ctx context.Context, alias string) (*Template, error)

GetTemplateByAlias возвращает шаблон по алиасу.

func (*Client) GetTemplates

func (c *Client) GetTemplates(ctx context.Context, p *Params) (*Templates, error)

GetTemplates возвращает список шаблонов.

func (*Client) GetWebhook

func (c *Client) GetWebhook(ctx context.Context, id int64) (*Webhook, error)

GetWebhook возвращает вебхук по ID.

func (*Client) GetWebhooks

func (c *Client) GetWebhooks(ctx context.Context, p *Params) (*Webhooks, error)

GetWebhooks возвращает список вебхуков (можно фильтровать по MessageStream).

func (*Client) SetMessageStream

func (c *Client) SetMessageStream(ctx context.Context, id string, s *MessageStream) (*MessageStream, error)

SetMessageStream изменяет канал (PATCH).

func (*Client) SetTemplate

func (c *Client) SetTemplate(ctx context.Context, id int64, t *Template) (*Template, error)

SetTemplate изменяет шаблон по ID.

func (*Client) SetTemplateByAlias

func (c *Client) SetTemplateByAlias(ctx context.Context, alias string, t *Template) (*Template, error)

SetTemplateByAlias изменяет шаблон по алиасу.

func (*Client) SetWebhook

func (c *Client) SetWebhook(ctx context.Context, id int64, w *Webhook) (*Webhook, error)

SetWebhook изменяет вебхук.

func (*Client) UnarchiveMessageStream

func (c *Client) UnarchiveMessageStream(ctx context.Context, id string) (*MessageStreamUnarchiveResponse, error)

UnarchiveMessageStream восстанавливает канал из архива.

type DayStats

type DayStats[T any] struct {
	Days []T `json:"Days"`
}

DayStats — статистика с разбивкой по дням.

type DeliveryStats

type DeliveryStats struct {
	InactiveMails int          `json:"InactiveMails"`
	Bounces       []BounceType `json:"Bounces"`
}

DeliveryStats — сводка по доставке.

type DeliveryWebhook

type DeliveryWebhook struct {
	ServerID      int64             `json:"ServerID"`
	MessageID     string            `json:"MessageID"`
	Recipient     string            `json:"Recipient"`
	Tag           string            `json:"Tag"`
	DeliveredAt   *Time             `json:"DeliveredAt"`
	Details       string            `json:"Details"`
	RecordType    string            `json:"RecordType"`
	Metadata      map[string]string `json:"Metadata"`
	MessageStream string            `json:"MessageStream"`
}

DeliveryWebhook — событие доставки.

type Domain

type Domain struct {
	ID                       int64  `json:"Id,omitempty"`
	Name                     string `json:"Name,omitempty"`
	SPFVerified              bool   `json:"SpfVerified,omitempty"`
	DKIMVerified             bool   `json:"DkimVerified,omitempty"`
	WeakDKIM                 bool   `json:"WeakDKIM,omitempty"`
	ReturnPathDomainVerified bool   `json:"ReturnPathDomainVerified,omitempty"`
}

Domain — домен отправителя. В запросах создания/изменения значимо в основном поле Name; флаги проверки только для чтения.

type DomainDetails

type DomainDetails struct {
	Domain
	DKIMHost                      string `json:"DkimHost"`
	DKIMTextValue                 string `json:"DkimTextValue"`
	DKIMPendingHost               string `json:"DkimPendingHost"`
	DKIMPendingTextValue          string `json:"DkimPendingTextValue"`
	DKIMRevokedHost               string `json:"DkimRevokedHost"`
	DKIMRevokedTextValue          string `json:"DkimRevokedTextValue"`
	DKIMUpdateStatus              string `json:"DkimUpdateStatus"`
	ReturnPathDomain              string `json:"ReturnPathDomain"`
	ReturnPathDomainCNAMEValue    string `json:"ReturnPathDomainCNAMEValue"`
	SafeToRemoveRevokedKeyFromDNS bool   `json:"SafeToRemoveRevokedKeyFromDNS"`
}

DomainDetails — полные сведения о домене, включая DNS-записи.

type Domains

type Domains struct {
	TotalCount int      `json:"TotalCount"`
	Domains    []Domain `json:"Domains"`
}

Domains — список доменов.

type Error

type Error struct {
	// StatusCode — HTTP-код ответа.
	StatusCode int
	// ErrorCode — код ошибки API из тела ответа (0, если тело не разобрано).
	ErrorCode int
	// Message — описание ошибки из тела ответа.
	Message string
	// Body — сырое тело ответа.
	Body []byte
}

Error — ошибка, возвращённая API Haskimail.

func (*Error) Error

func (e *Error) Error() string

func (*Error) Unwrap

func (e *Error) Unwrap() error

Unwrap возвращает сентинел-ошибку, соответствующую HTTP-коду, поэтому работает errors.Is(err, haskimail.ErrInvalidMessage).

type HTTPAuth

type HTTPAuth struct {
	Username string `json:"Username,omitempty"`
	Password string `json:"Password,omitempty"`
}

HTTPAuth — Basic-аутентификация для вызова вебхука.

type Header struct {
	Name  string `json:"Name"`
	Value string `json:"Value"`
}

Header — пользовательский заголовок письма.

type Message

type Message struct {
	MessageStream string            `json:"MessageStream,omitempty"`
	From          string            `json:"From,omitempty"`
	To            string            `json:"To,omitempty"`
	Cc            string            `json:"Cc,omitempty"`
	Bcc           string            `json:"Bcc,omitempty"`
	ReplyTo       string            `json:"ReplyTo,omitempty"`
	Subject       string            `json:"Subject,omitempty"`
	HTMLBody      string            `json:"HtmlBody,omitempty"`
	TextBody      string            `json:"TextBody,omitempty"`
	Tag           string            `json:"Tag,omitempty"`
	Headers       []Header          `json:"Headers,omitempty"`
	Attachments   []Attachment      `json:"Attachments,omitempty"`
	TrackOpens    *bool             `json:"TrackOpens,omitempty"`
	TrackLinks    string            `json:"TrackLinks,omitempty"`
	Metadata      map[string]string `json:"Metadata,omitempty"`
}

Message — письмо для отправки через /email и /email/batch.

func (*Message) AddAttachment

func (m *Message) AddAttachment(a Attachment)

AddAttachment добавляет вложение.

func (*Message) AddHeader

func (m *Message) AddHeader(name, value string)

AddHeader добавляет заголовок.

func (*Message) AddMetadata

func (m *Message) AddMetadata(key, value string)

AddMetadata добавляет пару ключ-значение в метаданные.

type MessageResponse

type MessageResponse struct {
	ErrorCode   int    `json:"ErrorCode"`
	Message     string `json:"Message"`
	To          string `json:"To,omitempty"`
	Cc          string `json:"Cc,omitempty"`
	Bcc         string `json:"Bcc,omitempty"`
	SubmittedAt *Time  `json:"SubmittedAt,omitempty"`
	MessageID   string `json:"MessageID,omitempty"`
}

MessageResponse — результат отправки письма.

type MessageStream

type MessageStream struct {
	ID                                  string                               `json:"Id,omitempty"`
	ServerID                            int64                                `json:"ServerId,omitempty"`
	Name                                string                               `json:"Name,omitempty"`
	Description                         string                               `json:"Description,omitempty"`
	MessageStreamType                   string                               `json:"MessageStreamType,omitempty"`
	CreatedAt                           *Time                                `json:"CreatedAt,omitempty"`
	UpdatedAt                           *Time                                `json:"UpdatedAt,omitempty"`
	ArchivedAt                          *Time                                `json:"ArchivedAt,omitempty"`
	SubscriptionManagementConfiguration *SubscriptionManagementConfiguration `json:"SubscriptionManagementConfiguration,omitempty"`
}

MessageStream — канал отправки.

type MessageStreamArchiveResponse

type MessageStreamArchiveResponse struct {
	ID                string `json:"Id"`
	ServerID          int64  `json:"ServerId"`
	ExpectedPurgeDate *Time  `json:"ExpectedPurgeDate"`
}

MessageStreamArchiveResponse — результат архивации канала.

type MessageStreamUnarchiveResponse

type MessageStreamUnarchiveResponse = MessageStream

MessageStreamUnarchiveResponse — результат разархивации канала.

type MessageStreams

type MessageStreams struct {
	TotalCount     int             `json:"TotalCount"`
	MessageStreams []MessageStream `json:"MessageStreams"`
}

MessageStreams — список каналов.

type OpenStat

type OpenStat struct {
	Date   *Time `json:"Date"`
	Opens  int   `json:"Opens"`
	Unique int   `json:"Unique"`
}

OpenStat — открытия за день.

type OpenWebhook

type OpenWebhook struct {
	OutboundMessageOpen
	FirstOpen bool              `json:"FirstOpen"`
	Metadata  map[string]string `json:"Metadata"`
}

OpenWebhook — событие открытия.

type OpenWebhookTrigger

type OpenWebhookTrigger struct {
	Enabled           *bool `json:"Enabled,omitempty"`
	PostFirstOpenOnly *bool `json:"PostFirstOpenOnly,omitempty"`
}

OpenWebhookTrigger — триггер открытий.

type Option

type Option func(*config)

Option настраивает клиент при создании.

func WithBaseURL

func WithBaseURL(host string) Option

WithBaseURL задаёт пользовательский хост API (без схемы), например "api.example.ru".

func WithConnectTimeout

func WithConnectTimeout(d time.Duration) Option

WithConnectTimeout задаёт таймаут установки TCP-соединения.

func WithHTTPClient

func WithHTTPClient(hc *http.Client) Option

WithHTTPClient задаёт собственный *http.Client. В этом случае WithConnectTimeout и WithReadTimeout не применяются.

func WithHeader

func WithHeader(name, value string) Option

WithHeader добавляет произвольный заголовок ко всем запросам.

func WithInsecure

func WithInsecure() Option

WithInsecure переключает клиент на HTTP вместо HTTPS.

func WithReadTimeout

func WithReadTimeout(d time.Duration) Option

WithReadTimeout задаёт таймаут ожидания заголовков ответа.

func WithSecureConnection

func WithSecureConnection(secure bool) Option

WithSecureConnection явно задаёт протокол: true — HTTPS, false — HTTP.

func WithUserAgent

func WithUserAgent(ua string) Option

WithUserAgent переопределяет заголовок User-Agent.

type OutboundBounceStats

type OutboundBounceStats = DayStats[BounceStat]

Псевдонимы для конкретных видов статистики.

type OutboundClickLocationStats

type OutboundClickLocationStats = DayStats[ClickLocationStat]

Псевдонимы для конкретных видов статистики.

type OutboundClickPlatformStats

type OutboundClickPlatformStats = DayStats[PlatformStat]

Псевдонимы для конкретных видов статистики.

type OutboundClickStats

type OutboundClickStats = DayStats[ClickStat]

Псевдонимы для конкретных видов статистики.

type OutboundMessage

type OutboundMessage struct {
	Recipient     string `json:"Recipient"`
	ReceivedAt    *Time  `json:"ReceivedAt"`
	Tag           string `json:"Tag"`
	From          string `json:"From"`
	Status        string `json:"Status"`
	MessageID     string `json:"MessageID"`
	Subject       string `json:"Subject"`
	MessageStream string `json:"MessageStream"`
}

OutboundMessage — исходящее сообщение в поиске.

type OutboundMessageClick

type OutboundMessageClick struct {
	OutboundMessageOpen
	OriginalLink  string `json:"OriginalLink"`
	ClickLocation string `json:"ClickLocation"`
}

OutboundMessageClick — событие клика по ссылке.

type OutboundMessageClicks

type OutboundMessageClicks struct {
	TotalCount int                    `json:"TotalCount"`
	Clicks     []OutboundMessageClick `json:"Clicks"`
}

OutboundMessageClicks — страница кликов.

type OutboundMessageDetails

type OutboundMessageDetails struct {
	OutboundMessage
	TextBody      string                        `json:"TextBody"`
	HTMLBody      string                        `json:"HtmlBody"`
	Body          string                        `json:"Body"`
	MessageEvents []OutboundMessageDetailsEvent `json:"MessageEvents"`
}

OutboundMessageDetails — подробности сообщения.

type OutboundMessageDetailsEvent

type OutboundMessageDetailsEvent struct {
	Recipient  string            `json:"Recipient"`
	Type       string            `json:"Type"`
	ReceivedAt *Time             `json:"ReceivedAt"`
	Details    map[string]string `json:"Details"`
}

OutboundMessageDetailsEvent — событие жизненного цикла сообщения.

type OutboundMessageOpen

type OutboundMessageOpen struct {
	Recipient     string `json:"Recipient"`
	ReceivedAt    *Time  `json:"ReceivedAt"`
	Tag           string `json:"Tag"`
	From          string `json:"From"`
	RecordType    string `json:"RecordType"`
	OS            string `json:"Os"`
	Browser       string `json:"Browser"`
	Webservice    string `json:"Webservice"`
	UserAgent     string `json:"UserAgent"`
	Language      string `json:"Language"`
	Region        string `json:"Region"`
	Country       string `json:"Country"`
	MessageID     string `json:"MessageID"`
	Subject       string `json:"Subject"`
	MessageStream string `json:"MessageStream"`
}

OutboundMessageOpen — событие открытия письма.

type OutboundMessageOpens

type OutboundMessageOpens struct {
	TotalCount int                   `json:"TotalCount"`
	Opens      []OutboundMessageOpen `json:"Opens"`
}

OutboundMessageOpens — страница открытий.

type OutboundMessages

type OutboundMessages struct {
	TotalCount int               `json:"TotalCount"`
	Messages   []OutboundMessage `json:"Messages"`
}

OutboundMessages — страница результатов поиска сообщений.

type OutboundOpenPlatformStats

type OutboundOpenPlatformStats = DayStats[PlatformStat]

Псевдонимы для конкретных видов статистики.

type OutboundOpenStats

type OutboundOpenStats = DayStats[OpenStat]

Псевдонимы для конкретных видов статистики.

type OutboundSendStats

type OutboundSendStats = DayStats[SentStat]

Псевдонимы для конкретных видов статистики.

type OutboundSpamStats

type OutboundSpamStats = DayStats[SpamStat]

Псевдонимы для конкретных видов статистики.

type OutboundStats

type OutboundStats struct {
	Sent                  int     `json:"Sent"`
	Bounced               int     `json:"Bounced"`
	SMTPAPIErrors         int     `json:"SmtpApiErrors"`
	BounceRate            float64 `json:"BounceRate"`
	SpamComplaintsRate    float64 `json:"SpamComplaintsRate"`
	Opens                 int     `json:"Opens"`
	UniqueOpens           int     `json:"UniqueOpens"`
	Tracked               int     `json:"Tracked"`
	WithLinkTracking      int     `json:"WithLinkTracking"`
	WithOpenTracking      int     `json:"WithOpenTracking"`
	TotalTrackedLinksSent int     `json:"TotalTrackedLinksSent"`
	UniqueLinksClicked    int     `json:"UniqueLinksClicked"`
	TotalClicks           int     `json:"TotalClicks"`
	WithClientRecorded    int     `json:"WithClientRecorded"`
	WithPlatformRecorded  int     `json:"WithPlatformRecorded"`
	WithReadTimeRecorded  int     `json:"WithReadTimeRecorded"`
	SpamComplaints        int     `json:"SpamComplaints"`
}

OutboundStats — сводная статистика исходящих писем.

type Params

type Params struct {
	// contains filtered or unexported fields
}

Params — параметры строки запроса (пагинация, фильтры). Нулевое значение и nil готовы к использованию.

p := haskimail.NewParams().Int("count", 50).Int("offset", 0).String("tag", "welcome")

func NewParams

func NewParams() *Params

NewParams создаёт пустой набор параметров.

func (*Params) Bool

func (p *Params) Bool(name string, value bool) *Params

Bool добавляет логический параметр.

func (*Params) Date

func (p *Params) Date(name string, value time.Time) *Params

Date добавляет дату в формате yyyy-MM-dd.

func (*Params) Encode

func (p *Params) Encode() string

Encode возвращает закодированную строку запроса без "?".

func (*Params) Int

func (p *Params) Int(name string, value int) *Params

Int добавляет целочисленный параметр.

func (*Params) String

func (p *Params) String(name, value string) *Params

String добавляет строковый параметр.

type PlatformStat

type PlatformStat struct {
	Date    *Time `json:"Date"`
	Desktop int   `json:"Desktop"`
	Mobile  int   `json:"Mobile"`
	Webmail int   `json:"Webmail"`
	Unknown int   `json:"Unknown"`
}

PlatformStat — распределение по платформам за день.

type Recipient

type Recipient struct {
	Name  string `json:"Name,omitempty"`
	Email string `json:"Email,omitempty"`
}

Recipient — получатель с отображаемым именем.

type RequestResponse

type RequestResponse struct {
	ErrorCode int    `json:"ErrorCode"`
	Message   string `json:"Message"`
}

RequestResponse — стандартный ответ API на операции без данных (например, удаление).

type SentStat

type SentStat struct {
	Date *Time `json:"Date"`
	Sent int   `json:"Sent"`
}

SentStat — отправлено за день.

type Server

type Server struct {
	ID                         int64    `json:"Id,omitempty"`
	Name                       string   `json:"Name,omitempty"`
	Color                      string   `json:"Color,omitempty"`
	APITokens                  []string `json:"ApiTokens,omitempty"`
	DeliveryHookURL            string   `json:"DeliveryHookUrl,omitempty"`
	BounceHookURL              string   `json:"BounceHookUrl,omitempty"`
	OpenHookURL                string   `json:"OpenHookUrl,omitempty"`
	ClickHookURL               string   `json:"ClickHookUrl,omitempty"`
	TrackOpens                 *bool    `json:"TrackOpens,omitempty"`
	TrackLinks                 string   `json:"TrackLinks,omitempty"`
	PostFirstOpenOnly          *bool    `json:"PostFirstOpenOnly,omitempty"`
	InboundAddress             string   `json:"InboundAddress,omitempty"`
	InboundDomain              string   `json:"InboundDomain,omitempty"`
	InboundHash                string   `json:"InboundHash,omitempty"`
	InboundSpamThreshold       *int     `json:"InboundSpamThreshold,omitempty"`
	SMTPAPIActivated           *bool    `json:"SmtpApiActivated,omitempty"`
	RawEmailEnabled            *bool    `json:"RawEmailEnabled,omitempty"`
	EnableSMTPAPIErrorHooks    *bool    `json:"EnableSmtpApiErrorHooks,omitempty"`
	IncludeBounceContentInHook *bool    `json:"IncludeBounceContentInHook,omitempty"`
	ServerLink                 string   `json:"ServerLink,omitempty"`
	DeliveryType               string   `json:"DeliveryType,omitempty"`
}

Server — сервер (набор настроек отправки) в аккаунте.

type Servers

type Servers struct {
	TotalCount int      `json:"TotalCount"`
	Servers    []Server `json:"Servers"`
}

Servers — страница списка серверов.

type Signature

type Signature struct {
	ID                  int64  `json:"Id"`
	Domain              string `json:"Domain"`
	EmailAddress        string `json:"EmailAddress"`
	ReplyToEmailAddress string `json:"ReplyToEmailAddress"`
	Name                string `json:"Name"`
	Confirmed           bool   `json:"Confirmed"`
}

Signature — подпись отправителя.

type SignatureDetails

type SignatureDetails struct {
	Signature
	DKIMHost                   string `json:"DkimHost"`
	DKIMTextValue              string `json:"DkimTextValue"`
	DKIMVerified               bool   `json:"DkimVerified"`
	SPFVerified                bool   `json:"SpfVerified"`
	ReturnPathDomain           string `json:"ReturnPathDomain"`
	ReturnPathDomainCNAMEValue string `json:"ReturnPathDomainCNAMEValue"`
	ReturnPathDomainVerified   bool   `json:"ReturnPathDomainVerified"`
	ConfirmationPersonalNote   string `json:"ConfirmationPersonalNote"`
}

SignatureDetails — полные сведения о подписи.

type SignatureToCreate

type SignatureToCreate struct {
	FromEmail                string `json:"FromEmail,omitempty"`
	Name                     string `json:"Name,omitempty"`
	ReplyToEmail             string `json:"ReplyToEmail,omitempty"`
	ReturnPathDomain         string `json:"ReturnPathDomain,omitempty"`
	ConfirmationPersonalNote string `json:"ConfirmationPersonalNote,omitempty"`
}

SignatureToCreate — запрос создания/изменения подписи.

type Signatures

type Signatures struct {
	TotalCount       int         `json:"TotalCount"`
	SenderSignatures []Signature `json:"SenderSignatures"`
}

Signatures — страница списка подписей.

type SpamStat

type SpamStat struct {
	Date          *Time `json:"Date"`
	SpamComplaint int   `json:"SpamComplaint"`
}

SpamStat — жалобы на спам за день.

type SpamWebhookTrigger

type SpamWebhookTrigger = BounceWebhookTrigger

SpamWebhookTrigger — триггер жалоб на спам.

type SubscriptionChange

type SubscriptionChange = WebhookTrigger

SubscriptionChange — триггер изменения подписки.

type SubscriptionManagementConfiguration

type SubscriptionManagementConfiguration struct {
	// UnsubscribeHandlingType: "Haskimail" (по умолчанию) или "Custom".
	UnsubscribeHandlingType string `json:"UnsubscribeHandlingType,omitempty"`
}

SubscriptionManagementConfiguration — настройки обработки отписок.

type Suppression

type Suppression struct {
	EmailAddress      string `json:"EmailAddress"`
	SuppressionReason string `json:"SuppressionReason"`
	Origin            string `json:"Origin"`
	CreatedAt         *Time  `json:"CreatedAt"`
}

Suppression — запись стоп-листа.

type SuppressionEntries

type SuppressionEntries struct {
	Suppressions []SuppressionEntry `json:"Suppressions"`
}

SuppressionEntries — тело запроса на изменение стоп-листа.

func NewSuppressionEntries

func NewSuppressionEntries(emails ...string) SuppressionEntries

NewSuppressionEntries собирает тело запроса из списка адресов.

type SuppressionEntry

type SuppressionEntry struct {
	EmailAddress string `json:"EmailAddress"`
}

SuppressionEntry — адрес для добавления/удаления.

type SuppressionStatus

type SuppressionStatus struct {
	EmailAddress string `json:"EmailAddress"`
	Status       string `json:"Status"`
	Message      string `json:"Message"`
}

SuppressionStatus — результат операции для одного адреса.

type SuppressionStatuses

type SuppressionStatuses struct {
	Suppressions []SuppressionStatus `json:"Suppressions"`
}

SuppressionStatuses — результаты операции над стоп-листом.

type Suppressions

type Suppressions struct {
	Suppressions []Suppression `json:"Suppressions"`
}

Suppressions — список записей стоп-листа.

type Template

type Template struct {
	BaseTemplate
	Subject            string `json:"Subject,omitempty"`
	HTMLBody           string `json:"HtmlBody,omitempty"`
	TextBody           string `json:"TextBody,omitempty"`
	AssociatedServerID int64  `json:"AssociatedServerId,omitempty"`
}

Template — шаблон целиком; используется и в запросах создания/изменения.

type TemplateContent

type TemplateContent struct {
	Subject  string `json:"Subject,omitempty"`
	HTMLBody string `json:"HtmlBody,omitempty"`
	TextBody string `json:"TextBody,omitempty"`
}

TemplateContent — содержимое шаблона.

type TemplateToValidate

type TemplateToValidate struct {
	Subject                    string `json:"Subject,omitempty"`
	HTMLBody                   string `json:"HtmlBody,omitempty"`
	TextBody                   string `json:"TextBody,omitempty"`
	TestRenderModel            any    `json:"TestRenderModel,omitempty"`
	InlineCSSForHTMLTestRender *bool  `json:"InlineCssForHtmlTestRender,omitempty"`
	TemplateType               string `json:"TemplateType,omitempty"`
	LayoutTemplate             string `json:"LayoutTemplate,omitempty"`
}

TemplateToValidate — шаблон для проверки.

type TemplateValidation

type TemplateValidation struct {
	AllContentIsValid      bool                     `json:"AllContentIsValid"`
	HTMLBody               *TemplateValidationField `json:"HtmlBody"`
	TextBody               *TemplateValidationField `json:"TextBody"`
	Subject                *TemplateValidationField `json:"Subject"`
	SuggestedTemplateModel any                      `json:"SuggestedTemplateModel"`
}

TemplateValidation — результат проверки шаблона.

type TemplateValidationField

type TemplateValidationField struct {
	ContentIsValid   bool     `json:"ContentIsValid"`
	RenderedContent  string   `json:"RenderedContent"`
	ValidationErrors []string `json:"ValidationErrors"`
}

TemplateValidationField — результат проверки одного поля шаблона.

type TemplatedMessage

type TemplatedMessage struct {
	TemplateID    int64             `json:"TemplateId,omitempty"`
	TemplateAlias string            `json:"TemplateAlias,omitempty"`
	TemplateModel any               `json:"TemplateModel,omitempty"`
	InlineCSS     *bool             `json:"InlineCss,omitempty"`
	From          string            `json:"From,omitempty"`
	To            string            `json:"To,omitempty"`
	Cc            string            `json:"Cc,omitempty"`
	Bcc           string            `json:"Bcc,omitempty"`
	ReplyTo       string            `json:"ReplyTo,omitempty"`
	Tag           string            `json:"Tag,omitempty"`
	Headers       []Header          `json:"Headers,omitempty"`
	Attachments   []Attachment      `json:"Attachments,omitempty"`
	MessageStream string            `json:"MessageStream,omitempty"`
	TrackOpens    *bool             `json:"TrackOpens,omitempty"`
	TrackLinks    string            `json:"TrackLinks,omitempty"`
	Metadata      map[string]string `json:"Metadata,omitempty"`
}

TemplatedMessage — письмо, отправляемое по шаблону. Укажите TemplateID или TemplateAlias.

func (*TemplatedMessage) AddAttachment

func (m *TemplatedMessage) AddAttachment(a Attachment)

AddAttachment добавляет вложение.

func (*TemplatedMessage) AddHeader

func (m *TemplatedMessage) AddHeader(name, value string)

AddHeader добавляет заголовок.

func (*TemplatedMessage) AddMetadata

func (m *TemplatedMessage) AddMetadata(key, value string)

AddMetadata добавляет пару ключ-значение в метаданные.

type Templates

type Templates struct {
	TotalCount int            `json:"TotalCount"`
	Templates  []BaseTemplate `json:"Templates"`
}

Templates — страница списка шаблонов.

type TemplatesPush

type TemplatesPush struct {
	TotalCount int                   `json:"TotalCount"`
	Templates  []TemplatesPushAction `json:"Templates"`
}

TemplatesPush — результат пуша шаблонов.

type TemplatesPushAction

type TemplatesPushAction struct {
	Action     string `json:"Action"`
	TemplateID int64  `json:"TemplateId"`
	Alias      string `json:"Alias"`
	Name       string `json:"Name"`
}

TemplatesPushAction — действие над шаблоном при пуше.

type TemplatesPushRequest

type TemplatesPushRequest struct {
	SourceServerID      int64 `json:"SourceServerId"`
	DestinationServerID int64 `json:"DestinationServerId"`
	PerformChanges      *bool `json:"PerformChanges,omitempty"`
}

TemplatesPushRequest — запрос на копирование шаблонов между серверами.

type Time

type Time struct {
	time.Time
}

Time — дата/время API. Разбирает все форматы, встречающиеся в ответах Haskimail.

func (Time) MarshalJSON

func (t Time) MarshalJSON() ([]byte, error)

MarshalJSON реализует json.Marshaler (RFC 3339).

func (*Time) UnmarshalJSON

func (t *Time) UnmarshalJSON(b []byte) error

UnmarshalJSON реализует json.Unmarshaler.

type Webhook

type Webhook struct {
	ID            int64            `json:"ID,omitempty"`
	URL           string           `json:"Url,omitempty"`
	HTTPAuth      *HTTPAuth        `json:"HttpAuth,omitempty"`
	HTTPHeaders   []Header         `json:"HttpHeaders,omitempty"`
	MessageStream string           `json:"MessageStream,omitempty"`
	Triggers      *WebhookTriggers `json:"Triggers,omitempty"`
}

Webhook — настройка вебхука.

type WebhookTrigger

type WebhookTrigger struct {
	Enabled *bool `json:"Enabled,omitempty"`
}

WebhookTrigger — базовый триггер (клик, доставка).

type WebhookTriggers

type WebhookTriggers struct {
	Open               *OpenWebhookTrigger   `json:"Open,omitempty"`
	Click              *WebhookTrigger       `json:"Click,omitempty"`
	Delivery           *WebhookTrigger       `json:"Delivery,omitempty"`
	Bounce             *BounceWebhookTrigger `json:"Bounce,omitempty"`
	SpamComplaint      *SpamWebhookTrigger   `json:"SpamComplaint,omitempty"`
	SubscriptionChange *SubscriptionChange   `json:"SubscriptionChange,omitempty"`
}

WebhookTriggers — набор триггеров вебхука.

type Webhooks

type Webhooks struct {
	Webhooks []Webhook `json:"Webhooks"`
}

Webhooks — список вебхуков.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL