具有2个域的Rails应用程序:在initializers / devise.rb&中定义2个SMTP。环境/ development.rb?

时间:2014-08-23 21:21:34

标签: ruby-on-rails ruby-on-rails-4

我有一个处理两个域的Rails应用程序。该应用的设置与this blogpost中所述的相同。在我的控制器和视图中,我使用request.domain来确定访问者访问的应用。

当有人注册帐户时,Devise会发送一封确认电子邮件。此过程取决于以下几行:

# config/environments/development.rb

MyApp::Application.configure do
  ...
  config.action_mailer.smtp_settings = {
    :address              => "smtp.gmail.com",
    :port                 => 587,
    :domain               => 'localhost',
    :user_name            => 'my@email.com',
    :password             => 'MyPassword',
    :authentication       => 'plain',
    :enable_starttls_auto => true
  }
  ...
end

# config/initializers/devise.rb

Devise.setup do |config|
  ...
  # ==> Mailer Configuration
  # Configure the e-mail address which will be shown in Devise::Mailer,
  # note that it will be overwritten if you use your own mailer class with default "from" parameter.
  config.mailer_sender = "my@email.com"
  ...
end

我需要:username中的development.rbconfig.mailer_sender中的devise.rb依赖request.domain,因为用户当然应该收到来自{{1}}的电子邮件他注册的域名。

1 个答案:

答案 0 :(得分:0)

我使用SiteSetting模型为每个Site指定不同的邮箱 SiteSetting包含每个邮箱的配置 邮件的代码是:

# app/mailers/invitation_mailer.rb
class InvitationMailer < ActionMailer::Base
  def invitation(invitation)
    @site = invitation.site
    @invitation = invitation
    email_settings = @site.email_settings.first

    mail(to: invitation.email,
         from: email_settings.try(:from) || 'notifier@example.com',
         subject: "Invitation",
         delivery_method_options: delivery_options(email_settings))
  end
  private

    def delivery_options(email_settings)
       @_delivery_options ||= 
         if email_settings
           {
             address:              email_settings.address,
             port:                 email_settings.port,
             domain:               email_settings.domain,
             user_name:            email_settings.user_name,
             password:             email_settings.password,
             authentication:       email_settings.authentication,
             enable_starttls_auto: email_settings.enable_startls_auto
           }
         else
           {
             address:              'smtp.google.com',
             port:                 587,
             domain:               'example.com',
             user_name:            'notifier@example.com',
             password:             'secret',
             authentication:       'plain',
             enable_starttls_auto: true
           }
         end
    end

end

更新

您可以在此次考试中通过username invitation 然后你就可以在username课程中找到Mailer(例如InvitationMailer

# app/controller/users_controller.rb
class UsersController < ApplicationController
  def invitation
    invitation = Invitation.find(params[:invitation_id])
    InvitationMailer.invitation(invitation).deliver
  end
end