Отправка письма
В Yandex Cloud Postbox отправить письмо можно с помощью AWS CLI или из почтового клиента по протоколу SMTP.
Перед началом работы
- Создайте сервисный аккаунт в том же каталоге, в котором находится адрес. Если вы создадите сервисный аккаунт и адрес в разных каталогах, при попытке отправить письмо возникнет ошибка.
- Назначьте сервисному аккаунту роль
postbox.sender
. - Создайте ключ для сервисного аккаунта:
- Для отправки письма с помощью AWS CLI или по протоколу SMTP с аутентификацией по паролю создайте статический ключ доступа. Надежно сохраните идентификатор и секретный ключ. После того как вы закроете окно, параметры секретного ключа станут недоступны.
- Для отправки письма по протоколу SMTP с аутентификацией по API-ключу создайте API-ключ. При создании API-ключа задайте область действия
yc.postbox.send
. Надежно сохраните полученный секретный ключ. После того как вы закроете окно, параметры секретного ключа станут недоступны.
Отправьте письмо
AWS CLI
-
Установите
утилиту командной строки AWS CLI. -
Настройте AWS CLI:
- Запустите интерактивную настройку профиля:
aws configure
- Укажите полученный ранее идентификатор ключа сервисного аккаунта
postbox-user
:AWS Access Key ID [****************ver_]: <идентификатор_ключа_сервисного_аккаунта>
- Укажите полученный ранее секретный ключ сервисного аккаунта
postbox-user
:AWS Secret Access Key [****************w5lb]: <секретный_ключ_сервисного_аккаунта>
- Укажите имя региона по умолчанию ru-central1:
Default region name [ru-central1]: ru-central1
- Укажите формат выходных данных по умолчанию json:
Default output format [None]: json
- Запустите интерактивную настройку профиля:
-
Подготовьте два JSON-файла:
-
destination.json
— файл со списком адресов назначения:{ "ToAddresses": ["test@example.com"] }
-
message.json
— файл с темой и содержимым письма:{ "Simple": { "Subject": { "Data": "Test message", "Charset": "UTF-8" }, "Body": { "Text": { "Data": "Test message. Hello!", "Charset": "UTF-8" } } } }
-
-
Отправьте письмо с помощью AWS CLI:
aws sesv2 send-email \ --from-email-address mail@example.com \ --destination file://destination.json \ --content file://message.json \ --endpoint-url https://postbox.cloud.yandex.net
-
Проверьте почтовый ящик, указанный в
destination.json
, — туда должно прийти письмо.
SMTP
Отправка по протоколу SMTP возможна с аутентификацией по API-ключу сервисного аккаунта или по паролю, сгенерированному на основе статического ключа доступа сервисного аккаунта.
-
В настройках SMTP-сервера вашего почтового клиента укажите следующие параметры:
Почтовый клиент поддерживает STARTTLS
Почтовый клиент не поддерживает STARTTLS, но поддерживает SMTPS
Имя сервера
postbox.cloud.yandex.net
Порт
587
465
Имя пользователя
API_KEY
Пароль
Секретная часть созданного API-ключа
-
Отправьте письмо с помощью вашего почтового клиента и убедитесь, что оно пришло на указанные адреса.
-
Получите пароль, используя созданный ранее статический ключ доступа сервисного аккаунта. Для этого вызовите скрипт
generate.py
. Используйте Python не ниже версии 3.python generate.py <секретный_ключ_сервисного_аккаунта>
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()
-
В настройках SMTP-сервера вашего почтового клиента укажите следующие параметры:
Почтовый клиент поддерживает STARTTLS
Почтовый клиент не поддерживает STARTTLS, но поддерживает SMTPS
Имя сервера
postbox.cloud.yandex.net
Порт
587
465
Имя пользователя
Идентификатор созданного ранее статического ключа доступа
Пароль
Пароль, полученный на предыдущем шаге
-
Отправьте письмо с помощью вашего почтового клиента и убедитесь, что оно пришло на указанные адреса.