允许用户指定自己的邮件服务器设置.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::ECONNDENY (连接被拒绝 - 连接(2( for "localhost" 端口 25(

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

我已经查看了如何使用Actionmailer/Ruby on Rails发送具有多个动态smtp的电子邮件的示例,但是此方法不起作用:

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)

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

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

最新更新