【问题标题】:Sending email using action mailer in rails version 3.2.5在 rails 3.2.5 版中使用 action mailer 发送电子邮件
【发布时间】:2012-07-25 01:46:15
【问题描述】:

我知道这是一个简单的问题,并且被问了很多次,我也问过这个问题,因为我检查过的所有以前的问题都是基于 rails 3.0.0 版本,我使用的是最新版本。我有一个包含姓名和电子邮件字段的用户注册表单。我想这样做,当用户单击提交按钮时,我使用 rails 3.2.5 版本的用户应将电子邮件发送到指定的电子邮件地址,而 gem 'mail' 版本 2.4.4 开发日志文件显示邮件是发送到电子邮件地址,但在收件箱中找不到。我也知道在开发模式下,action mailer 不会向任何地址发送邮件,但我想在开发阶段这样做。我的代码是:

/config/initializers/setup_mail.rb

ActionMailer::Base.smtp_settings = {
:address              => "smtp.gmail.com",
:port                 => 587,
:domain               => "asciicasts.com",
:user_name            => "asciicasts",
:password             => "secret",
:authentication       => "plain",
:enable_starttls_auto => true
}

/app/mailers/user_mailer.rb

class UserMailer < ActionMailer::Base
default :from => "eifion@asciicasts.com"

def registration_confirmation(user)
mail(:to => user.email, :subject => "Registered")
end
end

/app/controllers/users_controller.rb

def create
@user = User.new(params[:user])

respond_to do |format|
if @user.save
UserMailer.registration_confirmation(@user).deliver
format.html { redirect_to(@user, :notice => 'User was successfully created.') }
format.xml  { render :xml => @user, :status => :created, :location => @user }
else
format.html { render :action => "new" }
format.xml  { render :xml => @user.errors, :status => :unprocessable_entity }
end
end
end

所以请任何人帮助我。

【问题讨论】:

  • 默认config.action_mailer.raise_delivery_errors=false用于开发环境,这意味着rail不会尝试发送电子邮件,但您仍然可以在日志文件中查看整个电子邮件以进行验证。所以先把这个属性值设为true,重启服务器,再尝试发送。这可以帮助您通过分析日志找到问题。
  • 我仍然遇到同样的问题,已发送邮件条目添加到 development.log 文件中但未显示在我的收件箱中我也完成了 config.action_mailer.raise_delivery_errors=true 但它不起作用欢迎您的建议跨度>
  • 哦,我通过在 development.rb 文件中指定 smtp 设置来做到这一点,代码是 'config.action_mailer.raise_delivery_errors = true config.action_mailer.delivery_method = :smtp config.action_mailer.smtp_settings = { :address = > "smtp.gmail.com", :port => 587, :domain => 'triffort.com', :user_name => '你的完整邮件地址', :password => '你的密码', :authentication => '平原', :enable_starttls_auto => true }'

标签: ruby-on-rails ruby


【解决方案1】:

我最近也遇到过类似的事情。

来自config/environments/development.rb

config.action_mailer.perform_deliveries = true # 这个条目让我觉得应该发送电子邮件,它们是在其他开发人员升级之前。

我还发现这些电子邮件没有被发送。挖了一圈,发现config/email.yml 长这样:

development:
  :delivery_method: test
  :settings:
    :address: <email_server_address>
    :port: 25

当我将 :delivery_method: test 更改为 :delivery_method: sendmail(这是我们公司使用的)时,它开始工作了。

总而言之,我发现config/email.yml 中的设置是最后评估的,并且会胜过您个人环境文件中的任何设置。

【讨论】:

    猜你喜欢
    • 2013-05-21
    • 2015-08-23
    • 1970-01-01
    • 1970-01-01
    • 2015-09-08
    • 2011-07-14
    • 2011-05-15
    • 1970-01-01
    • 2021-01-22
    相关资源
    最近更新 更多