Welcome

首页 / 软件开发 / 数据结构与算法 / Rails测试《十一》添加邮件发送程序及测试邮件发送程序

Rails测试《十一》添加邮件发送程序及测试邮件发送程序2014-03-15讲到测试邮件发送程序,我们首先要让系统可以发送邮件。我们先来给系统添加发送邮件的功能。

Action Mailer in Rails 3是一个不错的视频教程,大家可以参考。

还有就是http://guides.rubyonrails.org/action_mailer_basics.html中更加详细的介绍。

添加邮件发送程序

发送邮件要保证我们有目标邮箱,所以呢,我们的用户要有一个属性:email。

还是拿我的blog项目作为练习项目。

我们在用户注册的时候给他发一封邮件。

首先我们创建一个初始化文件

config/initializers/setup_mail.rb,初始化邮箱相关的信息。

ActionMailer::Base.smtp_settings = { :address=> "smtp.163.com", :port => 25, :domain => "163.com", :user_name=> "woaiguanshui2012", :password => "123456asdf", :authentication => "plain", :enable_starttls_auto => true}
我们使用163的邮箱作为邮件发送服务器,需要我们在上面有一个注册用户,这里我注册一个woaiguanshui201,密码是123456asdf。

创建邮件发送程序

然后用rails g mailer命令创建一个mailer程序。

rails g mailer user_mailer

命令会创建app/mailers/user_mailer.rb文件。

class UserMailer < ActionMailer::Base default :from => "woaiguanshui2012@163.com"end
在里面添加一个方法,用来在用户注册的时候给用户发邮件。

class UserMailer < ActionMailer::Base default :from => "woaiguanshui2012@163.com"def registration_confirmation(user) mail(:to => user.email, :subject => "Registered") end end
创建邮件内容模板

邮件的内容也可以通过模板来实现,和controller的action对应有一个view一样。我们的mailer的方法也需要一个view来做模板。

创建app/views/user_mailer/registration_confirmation.text.erb文件,在文件中写入下面的内容。

Thank you for registering!  

调用邮件发送程序

上下最后一步了,就是在用户注册成功之后,调用这个mailer程序的registration_confirmation方法,就可以发送我们预定义的模板文件中的内容了。

我们把用户注册的方法修改一下,userscontroller的create方法。

def create @user = User.new(params[:user])if @user.save UserMailer.registration_confirmation(@user).deliverflash[:notice] = "sign up successfully!"signin(@user) redirect_to root_path elseflash.now[:notice] = "sign up failed!"render :newend end
UserMailer.registration_confirmation(@user).deliver

上面这一行是我们新加入的,就是发邮件用的。

这时候启动我们的服务rails s,然后注册一个用户,然后看看用户的邮箱,就应该有了一封从woaiguanshui2012@163发来的邮件,标题是Registered,内容是thank you for registering!。

这就说明我们的邮件发送程序正常工作了。

丰富邮件内容模板

我们还可以丰富一下邮件的内容,比如添加用户的信息。修改registration_confirmation.text.erb文件。

Hi, <%= @user.nickname %>Thank you for registering!Welcome to come back!
这就需要我们在registration_comfirmation方法中添加一个返回的变量@user。

def registration_confirmation(user) @user = usermail(:to => user.email, :subject => "Registered")end