Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Истории успеха
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • AI Studio
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Истории успеха
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Практические руководства
    • Все руководства
    • Сокращатель ссылок
    • Ввод данных в системы хранения
    • Хранение журналов работы приложения
    • Развертывание веб-приложения с использованием Java Servlet API
    • Разработка Slack-бота
    • Разработка Telegram-бота
    • Разработка Telegram-бота с поддержкой AI-агента
    • Разработка пользовательской интеграции в API Gateway
    • Разработка CRUD API для сервиса фильмов
    • Построение пайплайна CI/CD в GitLab
    • Настройка CI/CD между Cloud Functions и SourceCraft
    • Настройка CI/CD между Cloud Functions и GitHub
    • Работа с API-шлюзом по протоколу WebSocket
    • Создание интерактивного serverless-приложения с использованием WebSocket
    • Автоматическое копирование объектов из одного бакета Object Storage в другой
    • Визуализация логов в Grafana с помощью плагина Cloud Logging
    • Канареечный релиз функции Cloud Functions
    • Интерактивная отладка функций Cloud Functions
    • Создание функции Node.js с помощью TypeScript
    • Запуск контейнерного приложения в Serverless Containers
    • Передача событий Yandex Cloud Postbox в Data Streams и их анализ с помощью DataLens
    • Использование API Gateway для настройки синтеза речи в SpeechKit
    • Подключение к YDB из функции Cloud Functions на Python
    • Подключение к базе данных YDB из функции Cloud Functions на Node.js
    • Защита API Gateway при помощи Smart Web Security
    • Развертывание веб-приложения с JWT-авторизацией в API Gateway и аутентификацией в Firebase
    • Автоматическая загрузка данных в Yandex SpeechSense с помощью Yandex Workflows
    • Настройка реагирования в Cloud Logging и Yandex Cloud Functions
    • Настройка интеграций Workflows с Tracker, YandexGPT и Yandex Cloud Postbox
    • Разработка функций в Functions Framework и их развертывание в Yandex Serverless Containers
    • Создание адреса Yandex Cloud Postbox и проверка владения доменом с помощью Terraform
    • Создание AI-агента с помощью Yandex Cloud Functions
    • Настройка Postfix для отправки через Yandex Cloud Postbox

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

  • Подготовьте облако к работе
  • Необходимые платные ресурсы
  • Подготовьте ресурсы
  • Создайте ВМ для Postfix
  • Установите и настройте Postfix
  • Отправьте письмо
  • Отправьте MIME-письмо с вложением
  • Удалите созданные ресурсы
  1. Бессерверные технологии
  2. Настройка Postfix для отправки через Yandex Cloud Postbox

Настройка Postfix для отправки через Yandex Cloud Postbox

Статья создана
Yandex Cloud
Улучшена
Обновлена 28 августа 2025 г.
  • Подготовьте облако к работе
  • Необходимые платные ресурсы
    • Подготовьте ресурсы
  • Создайте ВМ для Postfix
  • Установите и настройте Postfix
  • Отправьте письмо
  • Отправьте MIME-письмо с вложением
  • Удалите созданные ресурсы

В этом руководстве вы научитесь отправлять электронные письма через Yandex Cloud Postbox с использованием Postfix на виртуальной машине Yandex Compute Cloud.

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

  1. Подготовьте облако к работе.
  2. Создайте ВМ для Postfix.
  3. Установите и настройте Postfix.
  4. Отправьте письмо.
  5. Отправьте MIME-письмо с вложением.

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

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

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

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

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

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

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

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

  • плата за постоянно запущенную ВМ (см. тарифы Yandex Compute Cloud);
  • плата за использование публичного IP-адреса (см. тарифы Yandex Virtual Private Cloud);
  • плата за использование Yandex Cloud Postbox (см. тарифы Yandex Cloud Postbox);
  • плата за публичные DNS-запросы и зоны DNS, если вы создаете ресурсную запись в Cloud DNS (см. тарифы Cloud DNS).

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

  1. Создайте адрес.

  2. Пройдите проверку владения доменом.

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

  4. Назначьте сервисному аккаунту роль postbox.sender.

  5. Создайте ключ для сервисного аккаунта:

    • Для отправки письма по протоколу SMTP с аутентификацией по API-ключу создайте API-ключ. При создании API-ключа задайте область действия yc.postbox.send. Надежно сохраните полученный секретный ключ. После того как вы закроете окно, параметры секретного ключа станут недоступны.
    • Для отправки письма с помощью AWS CLI или по протоколу SMTP с аутентификацией по паролю создайте статический ключ доступа. Надежно сохраните идентификатор и секретный ключ. После того как вы закроете окно, параметры секретного ключа станут недоступны.

Создайте ВМ для PostfixСоздайте ВМ для Postfix

Консоль управления
Yandex Cloud CLI
API
  1. В консоли управления выберите каталог, в котором будет создана ВМ.

  2. В списке сервисов выберите Compute Cloud.

  3. На панели слева выберите Виртуальные машины.

  4. Нажмите Создать виртуальную машину.

  5. Выберите вариант Расширенная настройка.

  6. В блоке Образ загрузочного диска выберите образ Ubuntu 24.04 LTS.

  7. В блоке Расположение выберите зону доступности, в которой будет находиться ВМ.

  8. В блоке Диски и файловые хранилища настройте загрузочный диск:

    • Тип — HDD.
    • Размер — 20 ГБ.
  9. В блоке Вычислительные ресурсы перейдите на вкладку Своя конфигурация и укажите рекомендуемые параметры для сервера почты:

    • Платформа — Intel Ice Lake.
    • vCPU — 2.
    • Гарантированная доля vCPU — 100%.
    • RAM — 2 ГБ.
  10. В блоке Сетевые настройки:

    • В поле Подсеть укажите подсеть в зоне доступности создаваемой ВМ или выберите облачную сеть из списка.

      • У облачной сети должна быть как минимум одна подсеть. Если подсети нет, создайте ее, выбрав Создать подсеть.

      • Если сети нет, нажмите Создать сеть и создайте ее:

        • В открывшемся окне укажите имя сети и выберите каталог, в котором она будет создана.
        • Нажмите Создать сеть.
    • В поле Публичный IP-адрес выберите Автоматически, чтобы назначить виртуальной машине случайный внешний IP-адрес из пула Yandex Cloud, или выберите статический адрес из списка, если вы зарезервировали его заранее.

  11. В блоке Доступ выберите SSH-ключ и укажите данные для доступа к ВМ:

    • В поле Логин введите имя пользователя, который будет создан на виртуальной машине, например ubuntu.

      Внимание

      Не используйте логин root или другие имена, зарезервированные операционной системой. Для выполнения операций, требующих прав суперпользователя, используйте команду sudo.

    • В поле SSH-ключ выберите SSH-ключ, сохраненный в вашем профиле пользователя организации.

      Если в вашем профиле нет сохраненных SSH-ключей или вы хотите добавить новый ключ:

      1. Нажмите кнопку Добавить ключ.

      2. Задайте имя SSH-ключа.

      3. Выберите вариант:

        • Ввести вручную — вставьте содержимое открытого SSH-ключа. Пару SSH-ключей необходимо создать самостоятельно.

        • Загрузить из файла — загрузите открытую часть SSH-ключа. Пару SSH-ключей необходимо создать самостоятельно.

        • Сгенерировать ключ — автоматическое создание пары SSH-ключей.

          При добавлении сгенерированного SSH-ключа будет создан и загружен архив с парой ключей. В ОС на базе Linux или macOS распакуйте архив в папку /home/<имя_пользователя>/.ssh. В ОС Windows распакуйте архив в папку C:\Users\<имя_пользователя>/.ssh. Дополнительно вводить открытый ключ в консоли управления не требуется.

      4. Нажмите кнопку Добавить.

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

  12. В блоке Общая информация задайте имя ВМ. Требования к имени:

    • длина — от 2 до 63 символов;
    • может содержать строчные буквы латинского алфавита, цифры и дефисы;
    • первый символ — буква, последний — не дефис.

    Примечание

    Имя виртуальной машины используется для генерации внутреннего FQDN единожды — при создании ВМ. Если для вас важен внутренний FQDN, учитывайте это и задавайте нужное имя ВМ при создании.

  13. Нажмите Создать ВМ.

Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.

По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.

  1. Посмотрите описание команды CLI для создания виртуальной машины:

    yc compute instance create --help
    
  2. Создайте виртуальную машину в каталоге по умолчанию:

    yc compute instance create \
      --name postfix-server \
      --zone ru-central1-b \
      --platform-id standard-v3 \
      --cores 2 \
      --core-fraction 100 \
      --memory 2 \
      --create-boot-disk image-family=ubuntu-2404-lts,image-folder-id=standard-images,size=20GB,type=network-hdd \
      --network-interface subnet-name=<имя_подсети>,nat-ip-version=ipv4 \
      --ssh-key <путь_к_SSH-ключу>
    

    Где:

    • --name — имя ВМ. Требования к имени:

      • длина — от 2 до 63 символов;
      • может содержать строчные буквы латинского алфавита, цифры и дефисы;
      • первый символ — буква, последний — не дефис.

      Примечание

      Имя виртуальной машины используется для генерации внутреннего FQDN единожды — при создании ВМ. Если для вас важен внутренний FQDN, учитывайте это и задавайте нужное имя ВМ при создании.

    • --zone — зона доступности, которая соответствует выбранной подсети.

    • --platform-id — платформа

    • --cores — количество vCPU ВМ.

    • --core-fraction — гарантированная доля vCPU в %.

    • --memory — объем оперативной памяти ВМ.

    • --create-boot-disk — параметры загрузочного диска: size — размер, image-id — идентификатор используемого образа.

    • --network-interface — настройки сетевого интерфейса ВМ:

      • subnet-name — имя выбранной подсети.
      • nat-ip-version=ipv4 – публичный IP-адрес. Чтобы создать ВМ без публичного IP-адреса, исключите параметр.
    • --ssh-key — путь к файлу и имя файла с открытой частю SSH-ключа. Пару SSH-ключей необходимо создать самостоятельно.

    Результат:

    id: epde5biu1a4e********
    folder_id: b1g681qpemb4********
    created_at: "2025-08-20T11:01:11Z"
    name: postfix-server
    zone_id: ru-central1-b
    platform_id: standard-v3
    resources:
      memory: "2147483648"
      cores: "2"
      core_fraction: "100"
    status: RUNNING
    metadata_options:
      gce_http_endpoint: ENABLED
      aws_v1_http_endpoint: ENABLED
      gce_http_token: ENABLED
      aws_v1_http_token: DISABLED
    boot_disk:
      mode: READ_WRITE
      device_name: epd1akno91gv********
      auto_delete: true
      disk_id: epd1akno91gv********
    network_interfaces:
      - index: "0"
        mac_address: d0:0d:**:**:**:**
        subnet_id: e2lb1da2dd9v********
        primary_v4_address:
          address: 10.129.**.**
          one_to_one_nat:
            address: 84.201.***.***
            ip_version: IPV4
    serial_port_settings:
      ssh_authorization: OS_LOGIN
    gpu_settings: {}
    fqdn: epde5biu1a4e********.auto.internal
    scheduling_policy: {}
    network_settings:
      type: STANDARD
    placement_policy: {}
    hardware_generation:
      legacy_features:
        pci_topology: PCI_TOPOLOGY_V1
    

Воспользуйтесь методом REST API create для ресурса Instance или вызовом gRPC API InstanceService/Create.

Установите и настройте PostfixУстановите и настройте Postfix

  1. Подключитесь к ВМ по SSH:

    ssh -i <путь_к_закрытому_SSH-ключу> <имя_пользователя_ВМ>@<публичный_IP-адрес_ВМ>
    
  2. Установите Postfix и необходимые модули:

    sudo apt update
    sudo apt install -y postfix libsasl2-modules
    
  3. После установки в терминале появится интерфейс настройки Postfix:

    1. На первом шаге выберите Internet with smarthost, затем с помощью клавиш TAB и Enter нажмите OK.
    2. Нажмите OK на всех последующих шагах.
    3. Дождитесь завершения настройки.
  4. Выполните команду настройки Postfix:

    sudo postconf -e \
    "relayhost = postbox.cloud.yandex.net:587" \
    "smtp_sasl_auth_enable = yes" \
    "smtp_sasl_security_options = noanonymous" \
    "smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd" \
    "smtp_use_tls = yes" \
    "smtp_tls_security_level = secure" \
    "smtp_tls_note_starttls_offer = yes"
    
  5. Проверьте, не задана ли в конфигурации директива резервного узла доставки, и отключите ее:

    1. Откройте файл /etc/postfix/master.cf и найдите строку:

      -o smtp_fallback_relay=
      
    2. Если такая строка есть, закомментируйте ее, добавив символ # в начало строки.

    3. Сохраните файл.

  6. Укажите учетные данные SMTP для Yandex Cloud Postbox:

    1. Откройте (или создайте) файл /etc/postfix/sasl_passwd и добавьте в него строку:

      postbox.cloud.yandex.net:587 SMTP_USERNAME:SMTP_PASSWORD
      
    2. Аутентифицируйтесь:

      API-ключ
      Cтатический ключ доступа

      В файле /etc/postfix/sasl_passwd:

      • Замените SMTP_USERNAME на идентификатор API-ключа, который вы получили при подготовке ресурсов.
      • Замените SMTP_PASSWORD на секретную часть API-ключа.
      1. Создайте файл generate.py и вставьте в него код:

        #!/usr/bin/env python3
        
        import hmac
        import hashlib
        import base64
        import argparse
        import sys
        
        # These values are required to calculate the signature. Do not change them.
        DATE = "20230926"
        SERVICE = "postbox"
        MESSAGE = "SendRawEmail"
        REGION = "ru-central1"
        TERMINAL = "aws4_request"
        VERSION = 0x04
        
        
        def sign(key, msg):
            return hmac.new(key, msg.encode("utf-8"), hashlib.sha256).digest()
        
        
        def calculate_key(secret_access_key):
            signature = sign(("AWS4" + secret_access_key).encode("utf-8"), DATE)
            signature = sign(signature, REGION)
            signature = sign(signature, SERVICE)
            signature = sign(signature, TERMINAL)
            signature = sign(signature, MESSAGE)
            signature_and_version = bytes([VERSION]) + signature
            smtp_password = base64.b64encode(signature_and_version)
            return smtp_password.decode("utf-8")
        
        
        def main():
            if sys.version_info[0] < 3:
                raise Exception("Must be using Python 3")
        
            parser = argparse.ArgumentParser(
                description="Convert a Secret Access Key to an SMTP password."
            )
            parser.add_argument("secret", help="The Secret Access Key to convert.")
            args = parser.parse_args()
        
            print(calculate_key(args.secret))
        
        
        if __name__ == "__main__":
            main()
        
      2. Сгенерируйте пароль:

        python3 generate.py <секретный_ключ>
        

        Где <секретный_ключ> — секретный ключ статического ключа доступа сервисного аккаунта, который вы получили при подготовке ресурсов.

        Используйте Python не ниже версии 3.

      3. В файле /etc/postfix/sasl_passwd:

        • Замените SMTP_USERNAME на идентификатор статического ключа доступа.
        • Замените SMTP_PASSWORD на сгенерированный пароль.
    3. Сохраните файл /etc/postfix/sasl_passwd.

  7. Создайте хеш-таблицу с учетными данными:

    sudo postmap hash:/etc/postfix/sasl_passwd
    
  8. (Рекомендуется) Ограничьте доступ к файлам с учетными данными:

    sudo chown root:root /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db
    sudo chmod 0600 /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db
    
  9. Укажите корневой сертификат для проверки TLS-соединения:

    sudo postconf -e 'smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt'
    
  10. Перезапустите Postfix, чтобы применить настройки:

    sudo systemctl restart postfix
    

Отправьте письмоОтправьте письмо

В этом примере вы отправите письмо с простым текстом без вложений.

  1. Выполните команду:

    sendmail -f <адрес_отправителя> <адрес_получателя>
    

    Важно

    Здесь и далее адрес отправителя должен соответствовать домену, для которого вы проходили проверку владения при подготовке ресурсов.

  2. Вставьте в терминал следующий текст и нажмите Enter:

    From: <адрес_отправителя>
    Subject: Test Yandex Cloud Postbox via Postfix
    
    This is a test message sent via Yandex Cloud Postbox (SMTP, Postfix).
    .
    
  3. Проверьте почтовый ящик получателя.

    Если письмо не пришло, изучите лог Postfix: /var/log/mail.log.

Подробности отправки сообщения
  • После запуска команды sendmail -f ... <адрес_получателя> терминал перейдет в интерактивный режим ввода письма.

  • Сначала введите заголовки, по одному на строку. Минимум: From: и Subject:.

    • Заголовок From: должен соответствовать домену, разрешенному в Yandex Cloud Postbox.
    • Заголовок To: можно добавить для наглядности, но он не обязателен — получатель уже задан в команде.
  • Вставьте пустую строку, чтобы отделить заголовки от тела письма.

  • Введите текст письма. Можно несколько строк.

  • Завершите ввод, поставив одиночную точку на отдельной строке и нажав Enter. В этой строке не должно быть пробелов.

  • При успешной отправке sendmail завершится без вывода. Для подробного отладочного вывода используйте ключ -v:

    sendmail -v -f <адрес_отправителя> <адрес_получателя>
    
  • Чтобы отменить ввод без отправки, нажмите Ctrl+C.

  • Для нескольких получателей перечислите их через пробел в команде:

    sendmail -f <адрес_отправителя> <адрес_получателя_1> <адрес_получателя_2>
    
  • Не используйте в примере не-ASCII-текст. Если требуется не-ASCII (UTF-8), кодируйте:

    • Заголовки по RFC 2047 (пример для темы): Subject: =?UTF-8?B?BASE64_ENCODED_SUBJECT?=.
    • Тело письма через MIME с charset=UTF-8 и Content-Transfer-Encoding: quoted-printable или base64.
  • Для адресов с международными доменами используйте Punycode (IDNA), например:

    sendmail -f user@xn--d1acpjx3f.xn--p1ai recipient@xn--e1afmkfd.xn--p1ai
    From: <user@xn--d1acpjx3f.xn--p1ai>
    

Отправьте MIME-письмо с вложениемОтправьте MIME-письмо с вложением

В этом примере вы отправите письмо с текстом в формате HTML и прикрепленным файлом example.txt.

  1. Создайте файл mime-email.txt и вставьте в него код:

    From: <адрес_отправителя>
    Subject: Test email via Yandex Cloud Postbox
    MIME-Version: 1.0
    Content-Type: multipart/mixed; boundary="BOUNDARY-OUTER"
    
    --BOUNDARY-OUTER
    Content-Type: multipart/alternative; boundary="BOUNDARY-INNER"
    
    --BOUNDARY-INNER
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: quoted-printable
    
    This is the plain text part sent via Yandex Cloud Postbox SMTP.
    
    --BOUNDARY-INNER
    Content-Type: text/html; charset=UTF-8
    Content-Transfer-Encoding: quoted-printable
    
    <html>
      <body>
        <h1>Hello!</h1>
        <p>This is the HTML part sent via Yandex Cloud Postbox SMTP.</p>
      </body>
    </html>
    --BOUNDARY-INNER--
    
    --BOUNDARY-OUTER
    Content-Type: application/octet-stream
    MIME-Version: 1.0
    Content-Transfer-Encoding: base64
    Content-Disposition: attachment; filename="example.txt"
    
    U2FtcGxlIGF0dGFjaG1lbnQgY29udGVudA==
    --BOUNDARY-OUTER--
    

    Где:

    • From: — адрес отправителя.
    • Subject: — тема письма.
  2. Отправьте письмо:

    sendmail -f <адрес_отправителя> <адрес_получателя> < mime-email.txt
    
  3. Проверьте почтовый ящик получателя.

    Если письмо не пришло, изучите лог Postfix: /var/log/mail.log.

Удалите созданные ресурсыУдалите созданные ресурсы

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

  1. Удалите ВМ postfix-server.
  2. Удалите адрес.
  3. Удалите зону DNS, если создавали в ней ресурсную запись.

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

Предыдущая
Создание AI-агента с помощью Yandex Cloud Functions
Следующая
Все руководства
Проект Яндекса
© 2025 ООО «Яндекс.Облако»