日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

rails3使用ActionMail发送邮件

發布時間:2025/3/20 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 rails3使用ActionMail发送邮件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

首先要安裝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.rbconfig/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 ? 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根目錄那里、非常簡單吧、哈哈


轉載自:http://www.cnblogs.com/klobohyz/archive/2011/11/02/2233155.html


轉載于:https://blog.51cto.com/bohsu/1201013

總結

以上是生活随笔為你收集整理的rails3使用ActionMail发送邮件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。