从 Ruby on Rails 中的数据库自定义 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 设置。

我怎样才能做到这一点?

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

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 类设置。

如果该设置不存在或该值为 null,它将回退到硬编码值。

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

最新更新