Отправка письма
В Yandex Cloud Postbox можно отправить письмо:
- с помощью AWS CLI;
- из почтового клиента по протоколу SMTP;
- с помощью AWS SDK;
- с помощью утилиты cURL.
Примечание
Для обеспечения безопасности передачи данных сервис Yandex Cloud Postbox поддерживает версии протокола TLS 1.2 и 1.3.
Перед началом работы
-
Создайте сервисный аккаунт в том же каталоге, в котором находится адрес. Если вы создадите сервисный аккаунт и адрес в разных каталогах, при попытке отправить письмо возникнет ошибка.
-
Создайте ключ для сервисного аккаунта:
-
API-ключ. При создании API-ключа задайте область действия
yc.postbox.send. Надежно сохраните полученный секретный ключ. После того как вы закроете окно, параметры секретного ключа станут недоступны. -
Статический ключ доступа. Надежно сохраните идентификатор и секретный ключ. После того как вы закроете окно, параметры секретного ключа станут недоступны.
-
IAM-токен. Этот способ авторизации подходит для отправки писем из функций Cloud Functions и контейнеров Serverless Containers, а также для виртуальных машин Compute Cloud, к которым привязан сервисный аккаунт. Выбирайте его, если не хотите создавать и хранить статические ключи доступа.
Важно
Учитывайте, что IAM-токен действует не больше 12 часов. Если нужно прописать данные для авторизации в конфигурационном файле почтового клиента, используйте аутентификацию по API-ключу или паролю.
Доступные комбинации способов аутентификации и отправки письма:
Способ отправки письма
Способ аутентификацииAWS CLI SMTP AWS SDK cURL API-ключ Статический ключ доступа IAM-токен -
Отправить письмо
AWS CLI
-
Установите
утилиту командной строки AWS CLI. -
Настройте AWS CLI:
- Запустите интерактивную настройку профиля:
aws configure - Укажите полученный ранее идентификатор ключа сервисного аккаунта
postbox-user:AWS Access Key ID [****************ver_]: <идентификатор_ключа_сервисного_аккаунта> - Укажите полученный ранее секретный ключ сервисного аккаунта
postbox-user:AWS Secret Access Key [****************w5lb]: <секретный_ключ_сервисного_аккаунта> - Укажите имя региона по умолчанию kz1:
Default region name [kz1]: kz1 - Укажите формат выходных данных по умолчанию 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-сервера вашего почтового клиента укажите следующие параметры:
Почтовый клиент поддерживает STARTTLS
Почтовый клиент не поддерживает STARTTLS, но поддерживает SMTPS
Имя сервера
postbox.cloud.yandex.netПорт
587465Имя пользователя
Идентификатор созданного API-ключа
Пароль
Секретная часть созданного 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 = "kz1" 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Порт
587465Имя пользователя
Идентификатор созданного ранее статического ключа доступа
Пароль
Пароль, полученный на предыдущем шаге
-
Отправьте письмо с помощью вашего почтового клиента и убедитесь, что оно пришло на указанные адреса.
-
В настройках вашего почтового SMTP-клиента укажите следующие параметры:
Почтовый клиент поддерживает STARTTLS
Почтовый клиент не поддерживает STARTTLS, но поддерживает SMTPS
Имя сервера
postbox.cloud.yandex.netПорт
587465Имя пользователя
IAM_TOKENПароль
IAM-токен сервисного аккаунта
-
Отправьте письмо с помощью вашего почтового клиента и убедитесь, что оно пришло на указанные адреса.
AWS SDK
Вы можете отправить письмо с помощью AWS SDK для .NET Core, Go, JavaScript и Python. Подробнее см. в руководствах:
- Отправка писем с помощью AWS SDK для .NET Core
- Отправка писем с помощью AWS SDK для Go
- Отправка писем с помощью AWS SDK для JavaScript
- Отправка писем с помощью AWS SDK для Python
cURL
Чтобы отправить письмо с помощью утилиты cURL
curl \
--request POST \
--url 'https://postbox.cloud.yandex.net/v2/email/outbound-emails' \
--header 'Content-Type: application/json' \
--user "${KEY_ID}:${SECRET_KEY}" \
--aws-sigv4 "aws:amz:ru-central1:ses" \
--data-binary '@email.json'
curl \
--request POST \
--url 'https://postbox.cloud.yandex.net/v2/email/outbound-emails' \
--header 'Content-Type: application/json' \
--header 'X-YaCloud-SubjectToken: <IAM-токен>' \
--data '{
"FromEmailAddress": "<отправитель>",
"Destination": {
"ToAddresses": ["<получатель>"]
},
"Content": {
"Simple": {
"Subject": {
"Data": "<тема>"
},
"Body": {
"Text": {
"Data": "<текст письма>"
}
}
}
}
}'
Тело запроса можно передавать в аргументе командной строки или файле.
Пример файла
{
"FromEmailAddress": "<отправитель>",
"Destination": {
"ToAddresses": ["<получатель>"]
},
"Content": {
"Simple": {
"Subject": {
"Data": "<тема>"
},
"Body": {
"Text": {
"Data": "<текст письма>"
}
}
}
}
}
Чтобы использовать AWS Signature Version 4--aws-sigv4. Как формировать подпись самостоятельно, см. в разделе Подписывание запросов.