Я пытаюсь использовать свой собственный сервер только для отправки электронной почты. Я запускаю этот SMTP-шлюз с использованием TLS, из-за чего клиент, который я использую для отправки писем, требует сертификат. Я использую самоподписанный сертификат, который очень легко настроить, если я использую postfix/ssmtp для отправки писем, но я не уверен, как можно использовать собственный сертификат в почтовом клиенте Discourse.
Для краткого представления ситуации:
Простой сценарий:
Discourse —отправка—письма—> mailgun —отправка—письма—> пользователь
Мой сценарий:
Discourse —отправка—письма—> мой сервер с SMTP-шлюзом —реле—письма—через—AWS SES API—> пользователь
Я хотел бы уточнить свой вопрос. На самом деле мне не нужно добавлять какие-либо сертификаты для работы, но соединение по TLS всё равно не устанавливается. При тестировании с помощью swaks всё работает нормально. Пример команды:
@itsbhanusharma AWS SES предоставляет 60 000 писем в месяц бесплатно, и, насколько мне известно, эти вызовы для отправки писем должны инициироваться с экземпляра EC2, иначе они тарифицируются как обычные. Мой экземпляр Discourse размещён на droplet от DigitalOcean. Возможно, я ошибаюсь, но это моё понимание и причина, по которой я так думаю.
Таким образом, даже если ваш API SES получает письма с IP-адреса DigitalOcean, это может привести к их тарификации. Вы можете рассмотреть возможность использования другого сервиса или развернуть Exim на экземпляре EC2 в качестве моста между вашим Droplet в DigitalOcean и AWS SES. Я не думаю, что это сработает, но вы можете попробовать.
В теории это должно работать следующим образом:
Discourse (на DO) отправляет письма на IP-адрес Exim в EC2.
Я уже решил проблему ретрансляции, запустив локальный SMTP-сервер на EC2, который в конечном итоге пересылает SMTP-запросы в SES. Проблема заключается в том, что Discourse не может завершить рукопожатие TLS с этим SMTP-сервером, тогда как Postfix, swaks и подобные приложения работают без проблем.
Есть ли способ посмотреть, где обрабатывается это рукопожатие SMTP? Например, какие библиотеки Discourse использует в Ruby под капотом? Я не хочу отключать TLS.
Использование действительного сертификата от Let’s Encrypt по какой-то причине не помогло. Не знаю почему.
Но после добавления этого в app.yaml электронная почта теперь работает.
DISCOURSE_SMTP_OPENSSL_VERIFY_MODE: none
Кто-то, кто лучше разбирается в SMTP, возможно, объяснит, почему это работает, но пока я, кажется, доволен.
У меня есть экземпляр EC2 за $5 на AWS, который я использую для ретрансляции нескольких доменов. Перенос Discourse на EC2 был бы немного дороже, чем DigitalOcean, хотя на самом деле разница невелика (всего несколько долларов в целом).
Но суть в том, что даже если я перенесу Discourse на EC2, мне всё равно понадобится эта служба ретрансляции для поддержки остальных дроплетов, которые у меня есть на DO для других доменов, которыми я владею. Так почему бы просто не исправить Discourse
Это правда, но в данном случае Discourse не имеет отношения к SES. Discourse — это клиент для общения с SMTP-сервером, который может быть чем угодно (сейчас это релейный сервис). Меня интересовало, почему postfix, swaks и подобные инструменты работают с этим SMTP-сервером (из того же VPC DigitalOcean) без проблем, а Discourse — нет. После установки этой переменной всё заработало. Тем не менее, я хотел бы узнать, какая библиотека используется в Discourse для рукопожатия SMTP, чтобы я мог лично проверить, есть ли что-то, что можно улучшить в Discourse.