Как отправлять вложения электронной почты с помощью AWS Lambda и AWS Simple Email Service (SES)
Прогрессивные веб-приложения, бессерверная архитектура, микросервисы в облаке… если вы обращали внимание на последние тенденции веб-разработки, вы, несомненно, слышали эти ключевые фразы. Воспользуемся одним из них сегодня. Лямбда-функции - это исполняемые функции, размещенные на AWS, которые запускаются только при вызове или вызове Lambda.
Но прежде чем продолжить во времена Короны -
Да! читайте прямо, оставайтесь дома и читайте мой блог, потому что это безопасно :) Теперь давайте двигаться вперед.
Одним из основных преимуществ лямбда-выражений является то, что с вас взимается плата только за время, необходимое для выполнения функции, как и для приложений-функций Azure, работающих в планах потребления.
Отправить письмо от AWS lambda с вложением довольно просто. Просто создайте модуль tempfile для создания временного каталога с помощью mkdtemp (). И тогда вы готовы сбросить туда свои данные JSON!
Или вы можете использовать каталог «tmp». Это твой выбор. Вот еще один способ.
tempdir = tempfile.mkdtemp() path = os.path.join(tempdir) with open(path + '/temp.json', 'w') as fp: json.dump(response_content, fp)
Следующим шагом будет написание кода для отправки писем. Но перед этим зарегистрируйте AWS Simple Simple Email Service. Просто перейдите в раздел «Адреса электронной почты» на консоли SES.
У меня есть два фрагмента кода из исходной лямбда-функции. Ознакомьтесь с ними ниже:
Для обычного письма -
И просто вызовите метод по шаблону
send_email('[email protected]', '[email protected]', 'us-east-1', 'AWS LAMBDA TEST')
- Для писем с вложениями требуется сообщение MIMEMultipart -
# Display an error if something goes wrong. except ClientError as e: return(e.response['Error']['Message']) else: return("Email sent! Message ID:", response['MessageId'])
JSON в CSV -
И просто вызовите метод по шаблону
json_to_csv(path, '/xxx.json', '/xxx.csv') send_email('[email protected]', '[email protected]', 'us-east-1', 'AWS LAMBDA TEST', path + '/xxx.json')
Если вы хотите отправить его нескольким получателям, вы можете изменить сценарий следующим образом:
- прокомментируйте эту строку
# msg['To'] = recipient
2. Измените эту часть кода так, чтобы "Пункты назначения" принимал список.
response = client.send_raw_email( Source=msg['From'], Destinations=recipient, RawMessage={ 'Data':msg.as_string(), } )
Вызов этого просто будет иметь список в параметре получателей.
send_email('[email protected]', ['[email protected]','[email protected]'], 'us-east-1', 'AWS LAMBDA TEST', path + '/xxx.json')
Роль IAM для работы вышеуказанного
{
"Effect":"Allow",
"Action":[
"ses:SendEmail",
"ses:SendRawEmail"
],
"Resource":"*"
}
Чтобы добавить триггер в AWS Lambda, щелкните событие Cloudwatch и добавьте расписание, используя шаблон cron. Для выражения Cron (0 0 1 *? *), Т.е. для 1-го дня всех месяцев для всех лет. Для получения дополнительной информации - https://docs.aws.amazon.com/lambda/latest/dg/tutorial-scheduled-events-schedule-expressions.html
Мой окончательный дизайн выглядит так -
Я надеюсь, что теперь вы сможете быстро настроить архитектуру Cloudwatch + Lambda + SES, которая требует вложений электронной почты. Дайте мне знать в комментариях ниже, если вы застряли. Что ж, если вам понравилось, не забудьте подарить мне один из этих - 👏 и подписывайтесь на меня, чтобы получать обновления!
Больше контента на plainenglish.io