簡體   English   中英

具有2個域的Rails應用程序:在initializers / devise.rb和environment / development.rb中定義2個SMTP?

[英]Rails app with 2 domains: Define 2 SMTP's in initializers/devise.rb & environments/development.rb?

我有一個處理兩個域的Rails應用程序。 該應用程序的設置如本博客文章中所述 在我的控制器和視圖中,我正在使用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

我需要development.rb:usernameconfig.mailer_sender中的devise.rb依賴於request.domain ,因為用戶當然應該從他注冊的域中接收電子郵件。

我使用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在此examle,然后你可以得到acsess到usernameMailer類(例如InvitationMailer

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM