首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络技术 > 网络基础 >

rails3.1.0 发邮件 与有关问题

2012-08-30 
rails3.1.0发邮件 与问题配置:?? ? Rails在config/environments目錄下針對不同執行環境會有不同的郵件伺服

rails3.1.0 发邮件 与问题

配置:

??

? Railsconfig/environments目錄下針對不同執行環境會有不同的郵件伺服器設定:

??

config.action_mailer.delivery_method

?

支援的選項包括:test:sendmailsmtp。在config/environments/test.rb中,預設是:test,也就是並不會實際寄信,而是將信件存在ActionMailer::Base.deliveries陣列中方便做功能測試。sendmail則是使用伺服器的/usr/bin/sendmail程式,不過因為因為不是每台伺服器都有適當安裝sendmail,所以最推薦的方式是採用:smtp協定來寄信,例如以下是一個使用Gmail寄信的範例,請修改config/environments/development.rbconfig/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 TypesEmail

?

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.erbapp/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 ?

热点排行