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