Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Истории успеха
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • AI Studio
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Истории успеха
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Страница сервиса
Yandex Cloud Postbox
Документация
Yandex Cloud Postbox
  • Начало работы
    • Все практические руководства
    • Передача событий Yandex Cloud Postbox в Yandex Data Streams и их анализ с помощью Yandex DataLens
    • Создание адреса Yandex Cloud Postbox и проверка владения доменом с помощью Terraform
      • .NET Core
      • Go
      • JavaScript
      • Python
  • Управление доступом
  • Правила тарификации
  • Аудитные логи Audit Trails
  • Публичные материалы
  • История изменений

В этой статье:

  • Подготовьте облако к работе
  • Необходимые платные ресурсы
  • Подготовьте ресурсы
  • Настройте директорию для аутентификационных данных
  • Использование переменных окружения
  • Создайте и запустите приложение
  • Проверьте результат
  • Как удалить созданные ресурсы
  1. Практические руководства
  2. Отправка писем с помощью AWS SDK
  3. Go

Отправка писем с помощью AWS SDK для Go

Статья создана
Yandex Cloud
Обновлена 30 июля 2025 г.
  • Подготовьте облако к работе
    • Необходимые платные ресурсы
    • Подготовьте ресурсы
  • Настройте директорию для аутентификационных данных
    • Использование переменных окружения
  • Создайте и запустите приложение
  • Проверьте результат
  • Как удалить созданные ресурсы

В этом руководстве вы научитесь отправлять электронные письма через Yandex Cloud Postbox с использованием AWS SDK для Go.

Чтобы начать отправлять электронные письма:

  1. Подготовьте облако к работе.
  2. Настройте директорию для аутентификационных данных.
  3. Создайте и запустите приложение.
  4. Проверьте результат.

Если созданные ресурсы вам больше не нужны, удалите их.

Подготовьте облако к работеПодготовьте облако к работе

Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:

  1. Перейдите в консоль управления, затем войдите в Yandex Cloud или зарегистрируйтесь.
  2. На странице Yandex Cloud Billing убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе ACTIVE или TRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако.

Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака.

Подробнее об облаках и каталогах.

Необходимые платные ресурсыНеобходимые платные ресурсы

В стоимость поддержки инфраструктуры входят:

  • плата за использование Yandex Cloud Postbox (см. тарифы Yandex Cloud Postbox);
  • плата за публичные DNS-запросы и зоны DNS, если вы создаете ресурсную запись в Cloud DNS (см. тарифы Cloud DNS).

Подготовьте ресурсыПодготовьте ресурсы

  1. Создайте сервисный аккаунт.
  2. Назначьте сервисному аккаунту роль postbox.sender.
  3. Создайте статический ключ доступа для сервисного аккаунта. Сохраните идентификатор и секретный ключ.
  4. Создайте адрес.
  5. Пройдите проверку владения доменом.

Настройте директорию для аутентификационных данныхНастройте директорию для аутентификационных данных

  1. Создайте директорию для хранения аутентификационных данных и перейдите в нее:

    Для macOS и Linux:

    mkdir ~/.aws/
    

    Для Windows:

    mkdir C:\Users\<имя_пользователя>\.aws\
    
  2. В директории .aws создайте файл credentials и скопируйте в него аутентификационные данные, полученные при создании статического ключа доступа:

    [default]
    aws_access_key_id = <идентификатор_статического_ключа>
    aws_secret_access_key = <секретный_ключ>
    
  3. Создайте файл config с параметрами региона по умолчанию и скопируйте в него следующую информацию:

    [default]
    region = ru-central1
    endpoint_url = https://postbox.cloud.yandex.net
    

Использование переменных окруженияИспользование переменных окружения

AWS SDK по умолчанию использует аутентификационные данные из переменных окружения, если они заданы. Эти переменные имеют приоритет над аутентификационными данными, которые указаны в файле .aws/credentials.

Поддерживаются следующие переменные окружения:

  • AWS_ACCESS_KEY_ID — идентификатор статического ключа;
  • AWS_SECRET_ACCESS_KEY — секретный ключ.

Чтобы задать переменные окружения, выполните следующие действия в зависимости от вашей операционной системы:

Linux/macOS
Windows

В терминале выполните команду:

export AWS_ACCESS_KEY_ID=<идентификатор_статического_ключа>
export AWS_SECRET_ACCESS_KEY=<секретный_ключ>

В PowerShell выполните команду:

$Env:AWS_ACCESS_KEY_ID=<идентификатор_статического_ключа>
$Env:AWS_SECRET_ACCESS_KEY=<секретный_ключ>

Создайте и запустите приложениеСоздайте и запустите приложение

  1. Получите код приложения:

    Репозиторий
    Вручную
    1. Склонируйте репозиторий:

      git clone https://github.com/yandex-cloud-examples/yc-postbox-examples
      
    2. Перейдите в папку в склонированном репозитории go/simple/.
    3. В файле main.go укажите данные:

      • В поле Sender — электронную почту отправителя.

        Домен электронной почты отправителя должен совпадать с указанным в адресе Yandex Cloud Postbox, созданном при подготовке к работе. Например, если домен, на который вы подтвердили владение, — yourdomain.com, можно указать электронную почту noreply@yourdomain.com или admin@yourdomain.com, а user@mail.yourdomain.com — нельзя.

      • В поле Recipient — электронную почту получателя. Например: receiver@domain.com. Далее для проверки вам потребуется доступ к этой электронной почте.

    4. Перейдите в папку go/.
    1. Создайте папку postbox-go и перейдите в нее.

    2. Создайте файл main.go и вставьте в него код:

      package main
      
      import (
        "context"
        "fmt"
        "net/url"
        "os"
      
        "github.com/aws/aws-sdk-go-v2/aws"
        "github.com/aws/aws-sdk-go-v2/config"
        "github.com/aws/aws-sdk-go-v2/service/sesv2"
        "github.com/aws/aws-sdk-go-v2/service/sesv2/types"
        transport "github.com/aws/smithy-go/endpoints"
      )
      
      const (
        // Адрес отправителя должен быть подтвержден с помощью Amazon SES.
        Sender = "<адрес_отправителя>"
      
        // Адрес получателя.
        Recipient = "<адрес_получателя>"
      
        // Тема письма.
        Subject = "Yandex Cloud Postbox Test via AWS SDK for Go"
      
        // HTML-текст письма.
        HtmlBody = "<h1>Amazon SES Test Email (AWS SDK for Go)</h1><p>This email was sent with " +
          "<a href='https://yandex.cloud/ru/docs/postbox/quickstart'>Yandex Cloud Postbox</a> using the " +
          "<a href='https://aws.amazon.com/sdk-for-go/'>AWS SDK for Go</a>.</p>"
      
        // Текст письма для почтовых клиентов без поддержки HTML.
        TextBody = "This email was sent with Yandex Cloud Postbox using the AWS SDK for Go."
      
        // Кодировка символов в письме.
        CharSet = "UTF-8"
      )
      
      func main() {
        cfg, err := config.LoadDefaultConfig(
          context.Background(),
        )
        if err != nil {
          fmt.Println("unable to load SDK config, " + err.Error())
          os.Exit(1)
        }
      
        client := sesv2.New(sesv2.Options{
          Region:             "ru-central1",
          EndpointResolverV2: &resolverV2{},
          Credentials: cfg.Credentials,
        })
      
        // Сборка письма.
        input := &sesv2.SendEmailInput{
          Destination: &types.Destination{
            ToAddresses: []string{Recipient},
          },
          Content: &types.EmailContent{
            Simple: &types.Message{
              Subject: &types.Content{
                Charset: aws.String(CharSet),
                Data:    aws.String(Subject),
              },
              Body: &types.Body{
                Html: &types.Content{
                  Charset: aws.String(CharSet),
                  Data:    aws.String(HtmlBody),
                },
                Text: &types.Content{
                  Charset: aws.String(CharSet),
                  Data:    aws.String(TextBody),
                },
              },
            },
          },
          FromEmailAddress: aws.String(Sender),
        }
      
        // Отправка письма.
        ctx := context.Background()
        res, err := client.SendEmail(ctx, input)
      
        if err != nil {
          panic(err)
        }
      
        fmt.Println(*res.MessageId)
      }
      
      type resolverV2 struct{}
      
      func (*resolverV2) ResolveEndpoint(_ context.Context, _ sesv2.EndpointParameters) (
        transport.Endpoint, error,
      ) {
        u, err := url.Parse("https://postbox.cloud.yandex.net")
        if err != nil {
          return transport.Endpoint{}, err
        }
        return transport.Endpoint{
          URI: *u,
        }, nil
      }
      
      type staticCredentialsProvider struct {
        accessKeyID     string
        secretAccessKey string
      }
      
      func (s *staticCredentialsProvider) Retrieve(_ context.Context) (aws.Credentials, error) {
        return aws.Credentials{
          AccessKeyID:     s.accessKeyID,
          SecretAccessKey: s.secretAccessKey,
        }, nil
      }
      
    3. В файле main.go укажите данные:

      • В поле Sender — электронную почту отправителя.

        Домен электронной почты отправителя должен совпадать с указанным в адресе Yandex Cloud Postbox, созданном при подготовке к работе. Например, если домен, на который вы подтвердили владение, — yourdomain.com, можно указать электронную почту noreply@yourdomain.com или admin@yourdomain.com, а user@mail.yourdomain.com — нельзя.

      • В поле Recipient — электронную почту получателя. Например: receiver@domain.com. Далее для проверки вам потребуется доступ к этой электронной почте.

    4. Создайте файл go.mod и вставьте в него код:

      module postbox
      
      go 1.23
      
      require (
        github.com/aws/aws-sdk-go-v2 v1.36.3
        github.com/aws/aws-sdk-go-v2/config v1.29.14
        github.com/aws/aws-sdk-go-v2/service/sesv2 v1.42.0
        github.com/aws/smithy-go v1.22.2
        github.com/emersion/go-message v0.18.2
      )
      
      require (
        github.com/aws/aws-sdk-go-v2/credentials v1.17.67 // indirect
        github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30 // indirect
        github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.34 // indirect
        github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.34 // indirect
        github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 // indirect
        github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.33 // indirect
        github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3 // indirect
        github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15 // indirect
        github.com/aws/aws-sdk-go-v2/service/sso v1.25.3 // indirect
        github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.1 // indirect
        github.com/aws/aws-sdk-go-v2/service/sts v1.33.19 // indirect
      )
      
  2. Установите зависимости:

    go mod tidy
    

    Результат:

    go: downloading github.com/aws/aws-sdk-go-v2 v1.36.3
    go: downloading github.com/aws/aws-sdk-go-v2/service/sesv2 v1.42.0
    ...
    go: downloading github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.34
    
  3. Запустите приложение:

    go run main.go
    

    Результат:

    DAEBWI6L7WN5.1RLCK********@ingress2-sas
    

Проверьте результатПроверьте результат

Убедитесь, что на адрес получателя, заданный в файле main.go в поле Recipient, пришло письмо с указанными параметрами.

Как удалить созданные ресурсыКак удалить созданные ресурсы

Чтобы перестать платить за созданные ресурсы:

  1. Удалите адрес.
  2. Удалите зону DNS, если создавали в ней ресурсную запись.

Была ли статья полезна?

Предыдущая
.NET Core
Следующая
JavaScript
Проект Яндекса
© 2025 ООО «Яндекс.Облако»