rails3使用ActionMail发送邮件
首先要安裝mailit這個插件、gem install mailit、如果在線安裝慢就直接下載離線包安裝、具體可以看本站的離線安裝gem的文章、
首先新建一個rails項目、當然邇可以在自己的原有rails項目里弄、但這里僅為測試一下新建一個項目
rails new testmail然后再生成一個框架
rails g scaffold user name:string email:string然后生成數據庫
rake db:migrateok、現在邇可以啟動服務器了、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::Base2default :from => "from@example.com"
3 end
莪們將它改成這樣
1class UserMailer < ActionMailer::Base2default :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::Base2 ? 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 create2 ? @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文件中加上變量、
2 ? @user = user
3 ? mail(:to => user.email, :subject => "Registered")
4 end
第2行那里、然后就可以在這里/app/views/user_mailer/registration_confirmation.text.erb 、添加變量了
2
3 Thank you for registering!
再注冊一次郵件看看、是不是已經產生變量了、哈哈
然后莪們也可以添加相關鏈接上去、方法也非常的簡單、打開/app/views/user_mailer/registration_confirmation.text.erb
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 ? p_w_uploads["rails.png"] = File.read("#{Rails.root}/public/p_w_picpaths/rails.png")
4 ? mail(:to => "#{user.name} <#{user.email}>", :subject => "Registered")
5 end
添加第3行的代碼進去就可以了、其中的Rails.root也狠好理解、就是定位在rails根目錄那里、非常簡單吧、哈哈
轉載于:https://blog.51cto.com/bohsu/1201013
總結
以上是生活随笔為你收集整理的rails3使用ActionMail发送邮件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 学习知识[置顶] C++学习方式方法
- 下一篇: 【ASP.NET Web API教程】5