读书人

rails3.1.0 发邮件 与有关问题

发布时间: 2012-08-30 09:55:54 作者: rapoo

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 ?

读书人网 >网络基础

热点推荐