Как начать работать с Yandex Cloud Postbox
С помощью этой инструкции вы создадите свой адрес и отправите проверочное письмо.
Перед началом работы
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Создайте сервисный аккаунт и ключи
- Создайте сервисный аккаунт
postbox-user
c рольюpostbox.sender
. - Создайте статические ключи доступа. Надежно сохраните идентификатор и секретный ключ. После того как вы закроете окно, параметры секретного ключа станут недоступны.
- Сгенерируйте ключ для создания DKIM-подписи:
openssl genrsa -out privatekey.pem 2048
Создайте адрес
-
В консоли управления
выберите каталог, в котором создали сервисный аккаунт. -
Выберите сервис Cloud Postbox.
-
Нажмите кнопку Создать адрес.
-
Укажите Домен, с которого будете отправлять письма. Домен может быть любого уровня.
-
Укажите Селектор:
postbox
.Примечание
Вы можете указать селектор, отличный от
postbox
. Указанный селектор должен использоваться только в одной ресурсной записи — той, которую вы создадите на шаге Пройдите проверку владения доменом. -
Скопируйте в поле Приватный ключ содержимое файла приватного ключа
privatekey.pem
, созданного ранее. -
(Опционально) Настройте логирование.
-
Нажмите кнопку Создать адрес.
Пройдите проверку владения доменом
Чтобы отправлять письма, подтвердите владение доменом. После создания адреса на его странице сформируются настройки DKIM-подписи. Их нужно указать в качестве значений ресурсной записи, которую необходимо добавить в вашу доменную зону. Вы можете добавить запись у вашего регистратора или в сервисе Yandex Cloud DNS, если вы делегировали ваш домен.
Пример создания ресурсной записи в Cloud DNS
-
В консоли управления
выберите каталог, в котором находятся адрес и ваша доменная зона. -
Выберите сервис Cloud DNS.
-
Выберите вашу доменную зону.
-
Нажмите кнопку Создать запись.
-
В поле Имя укажите часть имени, сгенерированного при создании адреса, без домена. Например
postbox._domainkey.
.Примечание
Для других DNS-сервисов может потребоваться скопировать запись целиком. Итоговая запись должна иметь вид
postbox._domainkey.example.com.
. -
В списке Тип выберите
TXT
. -
В поле Значение скопируйте содержимое поля Значение из блока Подтверждение подписи. Обратите внимание, что значение записи нужно взять в кавычки, например:
"v=DKIM1;h=sha256;k=rsa;p=M1B...aCA8"
-
Нажмите кнопку Создать.
-
Перейдите в сервис Cloud Postbox.
-
Выберите созданный адрес.
-
Нажмите кнопку Проверить адрес. Если запись верна, статус проверки на странице адреса изменится на
Success
.
Ответы DNS-сервера кешируются, поэтому возможны задержки при обновлении ресурсной записи.
Отправьте проверочное письмо
Отправить проверочное письмо можно с помощью:
- AWS CLI.
- протокола SMTP.
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
-
Получите пароль, используя секретный ключ сервисного аккаунта
postbox-user
. Для этого вызовите скрипт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()
-
Укажите следующие параметры в вашем почтовом клиенте:
- имя сервера —
postbox.cloud.yandex.net
; - порт —
587
; - имя пользователя — идентификатор статического ключа сервисного аккаунта
postbox-user
; - пароль, полученный на предыдущем шаге.
Примечание
Почтовый клиент должен поддерживать расширение STARTTLS
для шифрования передаваемых писем. - имя сервера —
-
Отправьте письмо с помощью вашего почтового клиента и убедитесь, что оно пришло на указанные адреса.