Добавление TLS-сертификата вместе с настройкой SMTP

Я пытаюсь использовать свой собственный сервер только для отправки электронной почты. Я запускаю этот SMTP-шлюз с использованием TLS, из-за чего клиент, который я использую для отправки писем, требует сертификат. Я использую самоподписанный сертификат, который очень легко настроить, если я использую postfix/ssmtp для отправки писем, но я не уверен, как можно использовать собственный сертификат в почтовом клиенте Discourse.

Для краткого представления ситуации:

Простой сценарий:
Discourse —отправка—письма—> mailgun —отправка—письма—> пользователь

Мой сценарий:
Discourse —отправка—письма—> мой сервер с SMTP-шлюзом —реле—письма—через—AWS SES API—> пользователь

Спасибо.

Я хотел бы уточнить свой вопрос. На самом деле мне не нужно добавлять какие-либо сертификаты для работы, но соединение по TLS всё равно не устанавливается. При тестировании с помощью swaks всё работает нормально. Пример команды:

swaks --to user@example.com --from me@example.com --auth PLAIN --auth-user myusername -tls -s smtp.somehost.com:2525

Вы можете напрямую использовать AWS SES SMTP для этого. Зачем вам нужен локальный релей?

@itsbhanusharma AWS SES предоставляет 60 000 писем в месяц бесплатно, и, насколько мне известно, эти вызовы для отправки писем должны инициироваться с экземпляра EC2, иначе они тарифицируются как обычные. Мой экземпляр Discourse размещён на droplet от DigitalOcean. Возможно, я ошибаюсь, но это моё понимание и причина, по которой я так думаю.

Таким образом, даже если ваш API SES получает письма с IP-адреса DigitalOcean, это может привести к их тарификации. Вы можете рассмотреть возможность использования другого сервиса или развернуть Exim на экземпляре EC2 в качестве моста между вашим Droplet в DigitalOcean и AWS SES. Я не думаю, что это сработает, но вы можете попробовать.

В теории это должно работать следующим образом:

  1. Discourse (на DO) отправляет письма на IP-адрес Exim в EC2.
  2. EC2 пересылает полученные от DO письма в SES.
  3. SES доставляет письма конечному пользователю.

Я уже решил проблему ретрансляции, запустив локальный SMTP-сервер на EC2, который в конечном итоге пересылает SMTP-запросы в SES. Проблема заключается в том, что Discourse не может завершить рукопожатие TLS с этим SMTP-сервером, тогда как Postfix, swaks и подобные приложения работают без проблем.

Решение этой проблемы должно быть таким же простым, как использование порта 25 (без шифрования)

Есть ли способ посмотреть, где обрабатывается это рукопожатие SMTP? Например, какие библиотеки Discourse использует в Ruby под капотом? Я не хочу отключать TLS.

Затем используйте действительный SSL-сертификат (даже Let’s Encrypt должен подойти)

Использование действительного сертификата от Let’s Encrypt по какой-то причине не помогло. Не знаю почему.
Но после добавления этого в app.yaml электронная почта теперь работает.

DISCOURSE_SMTP_OPENSSL_VERIFY_MODE: none

Кто-то, кто лучше разбирается в SMTP, возможно, объяснит, почему это работает, но пока я, кажется, доволен.

В конечном итоге это окажется дешевле, чем просто перенести экземпляр Discourse в S3?

У меня есть экземпляр EC2 за $5 на AWS, который я использую для ретрансляции нескольких доменов. Перенос Discourse на EC2 был бы немного дороже, чем DigitalOcean, хотя на самом деле разница невелика (всего несколько долларов в целом).

Но суть в том, что даже если я перенесу Discourse на EC2, мне всё равно понадобится эта служба ретрансляции для поддержки остальных дроплетов, которые у меня есть на DO для других доменов, которыми я владею. Так почему бы просто не исправить Discourse :slight_smile:

Что ж, по вашему собственному признанию, Discourse не сломан, он отлично взаимодействует с SES.

Вы делаете это, чтобы обойти ограничение SES на бесплатную пересылку писем.

Это правда, но в данном случае Discourse не имеет отношения к SES. Discourse — это клиент для общения с SMTP-сервером, который может быть чем угодно (сейчас это релейный сервис). Меня интересовало, почему postfix, swaks и подобные инструменты работают с этим SMTP-сервером (из того же VPC DigitalOcean) без проблем, а Discourse — нет. После установки этой переменной всё заработало. Тем не менее, я хотел бы узнать, какая библиотека используется в Discourse для рукопожатия SMTP, чтобы я мог лично проверить, есть ли что-то, что можно улучшить в Discourse.