Отправление письма
В 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-сервера вашего почтового клиента укажите следующие параметры:
- имя сервера —
postbox.cloud.yandex.net
; - порт —
587
; - имя пользователя —
API_KEY
; - пароль — секретная часть созданного API-ключа.
Примечание
Почтовый клиент должен поддерживать расширение STARTTLS
для шифрования передаваемых писем. - имя сервера —
-
Отправьте письмо с помощью вашего почтового клиента и убедитесь, что оно пришло на указанные адреса.
-
Получите пароль, используя созданный ранее статический ключ доступа сервисного аккаунта. Для этого вызовите скрипт
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-сервера вашего почтового клиента укажите следующие параметры:
- имя сервера —
postbox.cloud.yandex.net
; - порт —
587
; - имя пользователя — идентификатор созданного ранее статического ключа доступа;
- пароль, полученный на предыдущем шаге.
Примечание
Почтовый клиент должен поддерживать расширение STARTTLS
для шифрования передаваемых писем. - имя сервера —
-
Отправьте письмо с помощью вашего почтового клиента и убедитесь, что оно пришло на указанные адреса.