Разрешение пользователям указывать свои настройки почтового сервера. Rails 5.x с ActionMailer - PullRequest
0 голосов
/ 07 сентября 2018

Итак, я почти завершил настройку почтовой программы в своем приложении на Rails, но я не могу понять одну из частей информации на https://guides.rubyonrails.org/action_mailer_basics.html.

В соответствии с этим руководством вы можете указать собственную опцию smtp_settings, чтобы отправлять почту, например:

def welcome_email
    smtp_settings = {
        address:              'smtp.gmail.com',
        port:                 587,
        domain:               'example.com',
        user_name:            'myfromemail@example.com',
        password:             "myPassword",
        authentication:       :plain,
        enable_starttls_auto: true
    }

    mail(to: "destination@example.com",
        subject: "Test Notification",
        smtp_settings: smtp_settings
        )
end

но на самом деле это не работает. Тот же самый пример внизу использует delivery_method и передает хеш точно так же, как я использовал в этом примере.

Если я пытаюсь использовать метод .deliver в почтовой программе, я получаю следующую ошибку:

Errno :: ECONNREFUSED (соединение отклонено - connect (2) для "localhost" порт 25)

Это почти как полное игнорирование настроек smtp, которые я передал функции mail. Что я тут не так делаю?

Я посмотрел примеры из Как отправлять электронные письма с несколькими динамическими SMTP-сообщениями с помощью Actionmailer / Ruby on Rails , но этот метод не работает:

delivery_method.settings.merge!(smtp_settings)

потому что delivery_method на самом деле :smtp и это невозможно.

Опция delivery_method, кажется, работает, но мне нужно передать дополнительные вещи, такие как аутентификация, SSL / TLS и даже порт. Похоже, они не предлагаются опцией delivery_method.

Попытка реализовать одно из решений, приведенных в этом посте, приводит к ошибке:

MyMailer.delivery_method.settings.merge!(smtp_settings)
Traceback (most recent call last):
        1: from (irb):3
NoMethodError (undefined method `settings' for :smtp:Symbol)

1 Ответ

0 голосов
/ 07 сентября 2018

Для настроек динамического почтового сервера вам необходимо выполнить настройку следующим образом

instance_email = Mailer.welcome_email
config_settings = {address: 'xyz.com', port: 587}
instance_email.delivery_method.settings.merge! 
config_settings instance_email.deliver
...