我有一个处理两个域的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.rb
和config.mailer_sender
中的devise.rb
依赖request.domain
,因为用户当然应该收到来自{{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