rails3.1.0 发邮件 与问题
配置:
??
? Rails在config/environments目錄下針對不同執行環境會有不同的郵件伺服器設定:
??
config.action_mailer.delivery_method
?
支援的選項包括:test
、:sendmail
和smtp
。在config/environments/test.rb中,預設是:test
,也就是並不會實際寄信,而是將信件存在ActionMailer::Base.deliveries
陣列中方便做功能測試。sendmail
則是使用伺服器的/usr/bin/sendmail程式,不過因為因為不是每台伺服器都有適當安裝sendmail,所以最推薦的方式是採用:smtp
協定來寄信,例如以下是一個使用Gmail寄信的範例,請修改config/environments/development.rb或config/environments/production.rb:
config.action_mailer.delivery_method=:smtpconfig.action_mailer.smtp_settings = { :address => "smtp.gmail.com", :port => "587", :domain => "gmail.com", :authentication => "plain", :user_name => "example@gmail.com", :password => "123456", :enable_starttls_auto => true }
?和Controller一樣,Rails也用generate指令產生Mailer類別,此類別中的一個方法就對應一個Email樣板。以下是一個產生Mailer的範例:
rails generate mailer UserMailer confirm
?如此便會產生 app/mailers/user_mailer.rb 檔案,並包含一個 confirm 的動作,其 template 在 app/views/user_mailer/ 下,也就是 confirm.text.erb (純文字格式)或 confirm.html.erb (HTML格式)。如果兩種格式的樣板檔案都有,那麼Rails會合併成一封Multiple Content Types的Email。
?
class UserMailer < ActionMailer::Base default :from => "foobar@example.org" def confirm(email) @message = "Thank you for confirmation!" mail(:to => email, :subject => "Registered") end end
?
其中 default 可以設定預設的寄件人。而 mail 方法可以設定收件人和郵件主旨。和View一樣,@user
物件變數可以在app/views/user_mailer/confirm.text.erb或app/views/user_mailer/confirm.html.erb或樣板中存取到。
我們可以在 rails console 中測試,執行 UserMailer.confirm(“someone@example.org”).deliver 就會寄信出去。
同时修改:
# Don't care if the mailer can't send config.action_mailer.raise_delivery_errors = true
?可以查看当邮件没发送时的错误信息。
注册时应用,我們會在 controller 之中,例如使用者註冊之後寄發信件:
def create user = User.new(params[:user]) if user.save UserMailer.confirm(user.email).deliver redirect_to users_path else render :action => :new endend
?以上内容来自 Ruby on Rails 实战圣经
?
config.action_mailer.delivery_method=:smtp #使用smtp协议发送:address => "smtp.gmail.com", #发件箱stmp协议,与作用smtp有关 :port => "587", #发件箱使用端口号,与最后一句有关 :domain => "gmail.com", #发件箱域 :authentication => "plain" #authentication是否允许SMTP客户机使用用户ID AND PASSWORD或其他认证技术向服务器正确标识自己的身份。plain 使用文本方式的用户名和认证id和口令 :user_name => "example@gmail.com", #邮箱用户名 :password => "123456", #邮箱密码 :enable_starttls_auto => true #是否使用ttl/lls加密,当为'true'时,必须使用官网提供的ttl端口号,gmail为587???与此同时,如果想要用其它发件箱,就必须找对应端口号和协议,如果不知道,可以使用普通smtp 发送端口25 来发送邮件,修改: :enable_starttls_auto => false,:port=>25。献给和我一样的初学者想要了解更多邮箱信息 阅读? “电子邮件基础知识”?? http://hi.baidu.com/wjmd521/blog/item/9e998c018d8e72041d9583ed.html ?