来自数据库的自定义SMTP设置在Ruby on Rails上吗?

时间:2018-10-25 15:32:34

标签: ruby-on-rails-4 smtp

通常情况下,我们可以配置smtp设置,例如:

ActionMailer::Base.smtp_settings = {
:address              => "smtp.gmail.com",
:port                 => 587,
:domain               => "anythingworks",
:user_name            => "mygmailaddress@gmail.com",
:password             => "somePW",
:authentication       => "plain",
:enable_starttls_auto => true
}

但是我需要将来自数据库值的多个连接设置为smtp,并且如果数据库中没有任何值,则应使用默认的smtp设置。

我该如何实现?

1 个答案:

答案 0 :(得分:0)

只需根据数据库值进行设置,例如:

ActionMailer::Base.smtp_settings = {
:address              => Setting.find_by(key: :smtp_address)&.value || 'smtp.gmail.com',
:port                 => 587,
:domain               => "anythingworks",
:user_name            => "mygmailaddress@gmail.com",
:password             => "somePW",
:authentication       => "plain",
:enable_starttls_auto => true
}

这假设您有一个名为“ settings”的数据库表,其中包含keyvalue列,因此您可以在其中设置任何通用配置,每条记录一个配置项。还有一个ActiveRecord类Setting可以访问它。

如果不存在该设置或该值为空,它将返回硬编码值。

另一件事是确保在ActiveRecord已经存在的引导周期中的某个时间点建立此配置代码。例如,您可以将其放在config/initializers/mail.rb中。