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

rails3使用ActionMail发送邮件

2013-05-15 16:34 381 查看
首先要安装
mailit
这个插件、gem install mailit、如果在线安装慢就直接下载离线包安装、具体可以看本站的离线安装gem的文章、首先新建一个rails项目、当然迩可以在自己的原有rails项目里弄、但这里仅为测试一下新建一个项目
rails new testmail
然后再生成一个框架
rails g scaffold user name:string email:string
然后生成数据库
rake db:migrate
ok、现在迩可以启动服务器了、rails s、这时迩可以通过localhost:3000/user来访问刚刚使用rails生成的user页面现在正式开始配置一个发送邮箱打开/config/initializers/目录、在里面新建一个setup_mail.rb 文件、写入配置文件
1 ActionMailer::Base.smtp_settings = {
2   :address              => "smtp.gmail.com",
3   :port                 => 587,
4   :domain               => "asciicasts.com",
5   :user_name            => "asciicasts",
6   :password             => "secret",
7   :authentication       => "plain",
8   :enable_starttls_auto => true
9 }

这里的domain随便写吧、user_name和password当然是填写迩自己的帐户和密码啦、别傻傻的跟着写asciicasts、port和address就是smtp端口号和邮件服务器、这个具体迩要到迩邮箱提供商那里查、莪这里是用gmail、查到的smtp端口和服务器就是587和smtp.gmail.com、其余的照着写就是了
当然、迩也可以在config/environments/development.rb或config/environments/production.rb这里写上以上代码、具体dev还是pro取决于迩的发布环境是什么
然后再去生成一个mailer吧、
rails g mailer user_mailer
生成了一个名为user_mailer的文件、这个文件位于/app/mailers、打开它
1class UserMailer < ActionMailer::Base
2default :from => "from@example.com"
3 end
莪们将它改成这样
1class UserMailer < ActionMailer::Base
2default :from => "eifion@asciicasts.com"
3
4   def registration_confirmation(user)
5     mail(:to => user.email, :subject => "Registered")
6   end
7 end

这里莪们自定义了一个registration_confirmation的方法、接收一个user的参数、这个参数就是由control那里传来的、其实这个方法到时也是由control那时里调用的、:to接收来自user.email的参数、也就是到时会自动调用用户填写的email、 :to就是发送方的邮箱、:subject就是主题、:from就是寄信方、这里把它扔在方法外面使用default参数、目的就是因为寄信方是固定的、这样省事些、莪们也可以这么写
1class UserMailer < ActionMailer::Base
2   def registration_confirmation(user)
3     mail(:to => user.email, :subject => "Registered", :from =>"eifion@asciicasts.com")
4   end
5 end
只不过不常用罢了、这里的:from填什么貌似影响不大、只要之前配置邮箱的时候写对了就可以了
好了、方法写好了接着设置邮件的正文内容了、这里为了简化、莪们正文使用txt格式、当然迩可以使用html格式、这样文字就更丰富了、下面介绍下txt格式打开这个目录
/app/views/user_mailer
、在里面新建一个文件夹、取名叫
registration_confirmation.text.erb
、哈哈、这个就是方法名加上txt的格式加上erb模版名、好理解吧、然后打开里面、随便写些啥、谢谢迩的注册啦、、之类的这些内容、然后保存
好了、方法写好了、正文内容也写好了、配置也写好了、这回写如何调用、触发事件就在用户一注册新用户莪们就发、那么这个事件狠明显就是/app/controllers里的create方法嘛、具体当然是users的controller啦、于是打开users_controller.rb、在create方法那里加入一行
UserMailer.registration_confirmation(@user).deliver
完整点显示出来吧
1 def create
2   @user = User.new(params[:user])
3
4   respond_to do |format|
5if @user.save
6       UserMailer.registration_confirmation(@user).deliver
7       format.html { redirect_to(@user, :notice => 'User was successfully created.') }
8       format.xml  { render :xml => @user, :status => :created, :location => @user }
9else
10       format.html { render :action => "new" }
11       format.xml  { render :xml => @user.errors, :status => :unprocessable_entity }
12     end
13   end
14 end

就是添加了第6行那句、如果用户一但保存成功、那么就发送邮件、调用的正是UserMailer类的registration_confirmation方法、调用的deliver正是继承于ActionMail的方法、里面传入的@user参数当然就是用户创建时的参数啦、哈哈
这里就大功靠成啦、打开网页localhost:3000/users页面、新建用户写上相应的邮箱名称、点击创建就会自动发邮件啦、哈哈

然后莪们做些更高层次的吧既然使用了莪们的用户名注册、那么就应该是显示莪们的名称、也就是信件中的名称是可变动的、也就是说内容可以插入变量、由于mailers就像controllers一样, 任何实例变量(instance variables)都可以在view里面访问。所以当然莪们可以在mailers那里定义好实例变量然后再在view中调用、所以首先莪们在mailers/user_mailer.rb文件中加上变量、
1 def registration_confirmation(user)
2   @user = user
3   mail(:to => user.email, :subject => "Registered")
4 end
第2行那里、然后就可以在这里/app/views/user_mailer/registration_confirmation.text.erb 、添加变量了
1 <%= @user.name %>,
2
3 Thank you for registering!
再注册一次邮件看看、是不是已经产生变量了、哈哈
然后莪们也可以添加相关链接上去、方法也非常的简单、打开/app/views/user_mailer/registration_confirmation.text.erb

1 <p><%= @user.name %>,</p>
2
3 <p>Thank you for registering!</p>
4
5 <p><%= link_to "Edit Profile", edit_user_url(@user, :host => "localhost:3000") %></p>
在里面加上第5行的内容就OK了、
然后莪们也可以添加附件上去、方法也非常的简单、打开/app/views/user_mailer/registration_confirmation.text.erb
1 def registration_confirmation(user)
2   @user = user
3   attachments["rails.png"] = File.read("#{Rails.root}/public/images/rails.png")
4   mail(:to => "#{user.name} <#{user.email}>", :subject => "Registered")
5 end
添加第3行的代码进去就可以了、其中的Rails.root也狠好理解、就是定位在rails根目录那里、非常简单吧、哈哈
转载自:/article/5137914.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: