允许用户指定他们自己的邮件服务器设置。 Rails 5.x 与 ActionMailer

Allowing users to specify their own mail server settings. Rails 5.x with ActionMailer

所以我几乎完成了在我的 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 (Connection refused - connect(2) for "localhost" port 25)

它几乎完全忽略了我传递给 mail 函数的 smtp 设置。我在这里做错了什么?

我查看了 How to send emails with multiple, dynamic smtp using Actionmailer/Ruby on Rails 中的示例,但这种方法不起作用:

delivery_method.settings.merge!(smtp_settings)

因为 delivery_method 实际上是 :smtp 而这是不可能的。

delivery_method 选项似乎有效,但我需要传递其他内容,例如身份验证、SSL/TLS,甚至端口。 delivery_method 选项似乎没有提供这些。

尝试在 post 上实施解决方案之一给我这个错误:

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

对于动态邮件服务器设置,您需要按照以下方式进行配置

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