您的位置:首页 > 大数据 > 人工智能

rails中使用邮件激活账户

2016-08-11 16:32 267 查看
生成邮件程序模版

rails generate mailer UserMailer account_activation password_reset


开发环境中的邮件配置

config.action_mailer.raise_delivery_errors = true
config.action_mailer.delivery_method = :test
host = 'localhost:3000'
config.action_mailer.default_url_options = { host: host }


生成application的邮件程序

app/mailers/application_mailer.rb

设置默认的发件人地址

class ApplicationMailer < ActionMailer::Base default
from: "noreply@example.com"
layout 'mailer'
end


生成user的邮件程序

app/mailers/user_mailer.rb

发送账户激活链接

class UserMailer < ApplicationMailer

def account_activation(user)
@greeting = "Hi"
@user = user

mail to: user.email, subject: "Account activation"
end

def password_reset
@greeting = "Hi"

mail to: "to@example.org"
end


账户激活的纯文本视图

app/views/user_mailer/account_activation.text.erb

Hi <%= @user.name %>,
Welcome to the Sample App! Click on the link below to activate your account:
<%= edit_account_activation_url(@user.activation_token, email: @user.email) %>


账户激活的HTML视图

app/views/user_mailer/account_activation.html.erb

<h1>Sample App</h1>
<p>Hi <%= @user.name %>,</p>
<p>
Welcome to the Sample App! Click on the link below to activate your account:
</p>
<%= link_to"Activate",
edit_account_activation_url(@user.activation_token,
email: @user.email) %>


生成的邮件预览程序

test/mailers/previews/user_mailer_preview.rb

class UserMailerPreview < ActionMailer::Preview

def account_activation
user = User.first
user.activation_token = User.new_token
UserMailer.account_activation(user)
end

def password_reset
UserMailer.password_reset
end

end


电子邮件测试

test/mailers/user_mailer_test.rb

require 'test_helper'

class UserMailerTest < ActionMailer::TestCase
test "account_activation" do
user = users(:michael)
user.activation_token = User.new_token
mail = UserMailer.account_activation(user)
assert_equal "Account activation", mail.subject
assert_equal [user.email], mail.to
assert_equal ["noreply@example.com"], mail.from
assert_match user.name, mail.body.encoded
assert_match user.activation_token, mail.body.encoded
assert_match CGI.escape(user.email), mail.body.encoded
end
end


执行
rails test
,发现测试无法通过,错误如下:

ActionView::Template::Error: Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true


错误原因:
config/environments/test.rb
中缺少
host
配置,添加
config.action_mailer.default_url_options = { host: 'localhost:3000' }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  rails 邮件