在Rails中发送邮件4.1

时间:2014-07-05 01:45:29

标签: ruby-on-rails ruby email

所以我遇到了一个我以前从未见过的有趣错误。我正在尝试在开发中设置邮件,以便我可以向我自己发送实际的电子邮件。那么让我们来看看我如何设置邮件

我有一个名为setup_mail.rb

的初始化程序
ActionMailer::Base.smtp_settings = {
  :address => 'smptp.gmail.com',
  :port => 587,
  :domain => "gmail.com",
  :user_name =>  Figaro.env.EMAIL,
  :password =>  Figaro.env.PASSWORD,
  :authentication => 'plain',
  :enable_starttls_auto => true
}

ActionMailer::Base.default_url_options[:host] =  Figaro.env.HOST

从那里我们在邮件程序目录中有一个名为user_mailer.rb

的邮件程序类
class UserMailer < ActionMailer::Base
  default from: "AisisPlatForm@AisisPlanner.com"

  def registration_confirmation(user)
    @user = user
    mail(:to => "#{user.first_name} <#{user.email}>", :subject => 'Welcome to AisisPlatform!')
  end

  def password_reset(user)
    @user = user
    mail(:to => "#{user.first_name} <#{user.email}>", :subject => 'Password Reset (AisisPlatform)')
  end
end

它对所述邮件的HTML和非HTML版本都有适当的视图。然后我们做:

UserMailer.registration_confirmation(@user).deliver

在用户create控制器中发送邮件,但在提交表单并创建用户后,我立即获得:

SocketError (getaddrinfo: nodename nor servname provided, or not known)

所以我想,让我们看看日志(警告它很长):

UserMailer#registration_confirmation: processed outbound mail in 520.0ms

Sent mail to trolololololololo@mmmmmm.com (89.3ms)
Date: Fri, 04 Jul 2014 19:36:17 -0600
From: AisisPlatForm@AisisPlanner.com
To: trolololololololo <trolololololololo@mmmmmm.com>
Message-ID: <53b7569190dcc_957f3fc5b1ce122c939c1@Adams-Mac-mini.local.mail>
Subject: Welcome to AisisPlatform!
Mime-Version: 1.0
Content-Type: multipart/alternative;
 boundary="--==_mimepart_53b756918f0f4_957f3fc5b1ce122c93864";
 charset=UTF-8
Content-Transfer-Encoding: 7bit


----==_mimepart_53b756918f0f4_957f3fc5b1ce122c93864
Content-Type: text/plain;
 charset=UTF-8
Content-Transfer-Encoding: 7bit

trolololololololo,

Welcome and thank you for signing up to AisisPlatform.

We believe that our small, simple and yet very powerful API will allow you to create blog you have always wanted to create.
We are constently growing and evolving the feature set and coming out with new ideas and concepts we hope to share with you.

We are more then grateful for your participation in our services and hope we can be of use to you in any way shape or form that will
help make you happy and excited to use and share our services and products.<

sincerly,

AisisPlatform

----==_mimepart_53b756918f0f4_957f3fc5b1ce122c93864
Content-Type: text/html;
 charset=UTF-8
Content-Transfer-Encoding: 7bit

<h3>trolololololololo,</h3>

<p>Welcome and thank you for signing up to AisisPlatform.</p>

<p>We believe that our small, simple and yet very powerful API will allow you to create blog you have always wanted to create.
We are constently growing and evolving the feature set and coming out with new ideas and concepts we hope to share with you.</p>

<p>We are more then grateful for your participation in our services and hope we can be of use to you in any way shape or form that will
help make you happy and excited to use and share our services and products.</p>

<p>sincerly,</p>

<p><em>AisisPlatform</em></p>

----==_mimepart_53b756918f0f4_957f3fc5b1ce122c93864--

Completed 500 Internal Server Error in 1048ms

SocketError (getaddrinfo: nodename nor servname provided, or not known):
  /Users/Adam/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/net/smtp.rb:541:in `initialize'
  /Users/Adam/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/net/smtp.rb:541:in `open'
  /Users/Adam/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/net/smtp.rb:541:in `tcp_socket'
  /Users/Adam/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/net/smtp.rb:551:in `block in do_start'
  /Users/Adam/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/timeout.rb:91:in `block in timeout'
  /Users/Adam/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/timeout.rb:101:in `call'
  /Users/Adam/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/timeout.rb:101:in `timeout'
  /Users/Adam/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/net/smtp.rb:550:in `do_start'
  /Users/Adam/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/net/smtp.rb:520:in `start'
  mail (2.5.4) lib/mail/network/delivery_methods/smtp.rb:112:in `deliver!'
  mail (2.5.4) lib/mail/message.rb:2129:in `do_delivery'
  mail (2.5.4) lib/mail/message.rb:232:in `block in deliver'
  actionmailer (4.1.0) lib/action_mailer/base.rb:527:in `block in deliver_mail'
  activesupport (4.1.0) lib/active_support/notifications.rb:159:in `block in instrument'
  activesupport (4.1.0) lib/active_support/notifications/instrumenter.rb:20:in `instrument'
  activesupport (4.1.0) lib/active_support/notifications.rb:159:in `instrument'
  actionmailer (4.1.0) lib/action_mailer/base.rb:525:in `deliver_mail'
  mail (2.5.4) lib/mail/message.rb:232:in `deliver'
  /Users/Adam/.rvm/gems/ruby-2.1.1/bundler/gems/Xaaron-2ee49cf0018e/app/controllers/xaaron/users_controller.rb:20:in `create'
  actionpack (4.1.0) lib/action_controller/metal/implicit_render.rb:4:in `send_action'
  actionpack (4.1.0) lib/abstract_controller/base.rb:189:in `process_action'
  actionpack (4.1.0) lib/action_controller/metal/rendering.rb:10:in `process_action'
  actionpack (4.1.0) lib/abstract_controller/callbacks.rb:20:in `block in process_action'
  activesupport (4.1.0) lib/active_support/callbacks.rb:113:in `call'
  activesupport (4.1.0) lib/active_support/callbacks.rb:113:in `call'
  activesupport (4.1.0) lib/active_support/callbacks.rb:149:in `block in halting_and_conditional'
  activesupport (4.1.0) lib/active_support/callbacks.rb:229:in `call'
  activesupport (4.1.0) lib/active_support/callbacks.rb:229:in `block in halting'
  activesupport (4.1.0) lib/active_support/callbacks.rb:229:in `call'
  activesupport (4.1.0) lib/active_support/callbacks.rb:229:in `block in halting'
  activesupport (4.1.0) lib/active_support/callbacks.rb:166:in `call'
  activesupport (4.1.0) lib/active_support/callbacks.rb:166:in `block in halting'
  activesupport (4.1.0) lib/active_support/callbacks.rb:166:in `call'
  activesupport (4.1.0) lib/active_support/callbacks.rb:166:in `block in halting'
  activesupport (4.1.0) lib/active_support/callbacks.rb:166:in `call'
  activesupport (4.1.0) lib/active_support/callbacks.rb:166:in `block in halting'
  activesupport (4.1.0) lib/active_support/callbacks.rb:86:in `call'
  activesupport (4.1.0) lib/active_support/callbacks.rb:86:in `run_callbacks'
  actionpack (4.1.0) lib/abstract_controller/callbacks.rb:19:in `process_action'
  actionpack (4.1.0) lib/action_controller/metal/rescue.rb:29:in `process_action'
  actionpack (4.1.0) lib/action_controller/metal/instrumentation.rb:31:in `block in process_action'
  activesupport (4.1.0) lib/active_support/notifications.rb:159:in `block in instrument'
  activesupport (4.1.0) lib/active_support/notifications/instrumenter.rb:20:in `instrument'
  activesupport (4.1.0) lib/active_support/notifications.rb:159:in `instrument'
  actionpack (4.1.0) lib/action_controller/metal/instrumentation.rb:30:in `process_action'
  actionpack (4.1.0) lib/action_controller/metal/params_wrapper.rb:250:in `process_action'
  activerecord (4.1.0) lib/active_record/railties/controller_runtime.rb:18:in `process_action'
  /Users/Adam/.rvm/gems/ruby-2.1.1/bundler/gems/promiscuous-9bda9a49ac13/gemfiles/lib/promiscuous/railtie.rb:6:in `process_action'
  actionpack (4.1.0) lib/abstract_controller/base.rb:136:in `process'
  actionview (4.1.0) lib/action_view/rendering.rb:30:in `process'
  actionpack (4.1.0) lib/action_controller/metal.rb:195:in `dispatch'
  actionpack (4.1.0) lib/action_controller/metal/rack_delegation.rb:13:in `dispatch'
  actionpack (4.1.0) lib/action_controller/metal.rb:231:in `block in action'
  actionpack (4.1.0) lib/action_dispatch/routing/route_set.rb:80:in `call'
  actionpack (4.1.0) lib/action_dispatch/routing/route_set.rb:80:in `dispatch'
  actionpack (4.1.0) lib/action_dispatch/routing/route_set.rb:48:in `call'
  actionpack (4.1.0) lib/action_dispatch/journey/router.rb:71:in `block in call'
  actionpack (4.1.0) lib/action_dispatch/journey/router.rb:59:in `each'
  actionpack (4.1.0) lib/action_dispatch/journey/router.rb:59:in `call'
  actionpack (4.1.0) lib/action_dispatch/routing/route_set.rb:676:in `call'
  railties (4.1.0) lib/rails/engine.rb:514:in `call'
  railties (4.1.0) lib/rails/railtie.rb:194:in `public_send'
  railties (4.1.0) lib/rails/railtie.rb:194:in `method_missing'
  actionpack (4.1.0) lib/action_dispatch/journey/router.rb:71:in `block in call'
  actionpack (4.1.0) lib/action_dispatch/journey/router.rb:59:in `each'
  actionpack (4.1.0) lib/action_dispatch/journey/router.rb:59:in `call'
  actionpack (4.1.0) lib/action_dispatch/routing/route_set.rb:676:in `call'
  rack (1.5.2) lib/rack/etag.rb:23:in `call'
  rack (1.5.2) lib/rack/conditionalget.rb:35:in `call'
  rack (1.5.2) lib/rack/head.rb:11:in `call'
  actionpack (4.1.0) lib/action_dispatch/middleware/params_parser.rb:27:in `call'
  actionpack (4.1.0) lib/action_dispatch/middleware/flash.rb:254:in `call'
  rack (1.5.2) lib/rack/session/abstract/id.rb:225:in `context'
  rack (1.5.2) lib/rack/session/abstract/id.rb:220:in `call'
  actionpack (4.1.0) lib/action_dispatch/middleware/cookies.rb:560:in `call'
  activerecord (4.1.0) lib/active_record/query_cache.rb:36:in `call'
  activerecord (4.1.0) lib/active_record/connection_adapters/abstract/connection_pool.rb:621:in `call'
  activerecord (4.1.0) lib/active_record/migration.rb:380:in `call'
  actionpack (4.1.0) lib/action_dispatch/middleware/callbacks.rb:29:in `block in call'
  activesupport (4.1.0) lib/active_support/callbacks.rb:82:in `run_callbacks'
  actionpack (4.1.0) lib/action_dispatch/middleware/callbacks.rb:27:in `call'
  actionpack (4.1.0) lib/action_dispatch/middleware/reloader.rb:73:in `call'
  actionpack (4.1.0) lib/action_dispatch/middleware/remote_ip.rb:76:in `call'
  actionpack (4.1.0) lib/action_dispatch/middleware/debug_exceptions.rb:17:in `call'
  actionpack (4.1.0) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
  railties (4.1.0) lib/rails/rack/logger.rb:38:in `call_app'
  railties (4.1.0) lib/rails/rack/logger.rb:20:in `block in call'
  activesupport (4.1.0) lib/active_support/tagged_logging.rb:68:in `block in tagged'
  activesupport (4.1.0) lib/active_support/tagged_logging.rb:26:in `tagged'
  activesupport (4.1.0) lib/active_support/tagged_logging.rb:68:in `tagged'
  railties (4.1.0) lib/rails/rack/logger.rb:20:in `call'
  actionpack (4.1.0) lib/action_dispatch/middleware/request_id.rb:21:in `call'
  rack (1.5.2) lib/rack/methodoverride.rb:21:in `call'
  rack (1.5.2) lib/rack/runtime.rb:17:in `call'
  activesupport (4.1.0) lib/active_support/cache/strategy/local_cache_middleware.rb:26:in `call'
  rack (1.5.2) lib/rack/lock.rb:17:in `call'
  actionpack (4.1.0) lib/action_dispatch/middleware/static.rb:64:in `call'
  rack (1.5.2) lib/rack/sendfile.rb:112:in `call'
  railties (4.1.0) lib/rails/engine.rb:514:in `call'
  railties (4.1.0) lib/rails/application.rb:144:in `call'
  rack (1.5.2) lib/rack/lock.rb:17:in `call'
  rack (1.5.2) lib/rack/content_length.rb:14:in `call'
  rack (1.5.2) lib/rack/handler/webrick.rb:60:in `service'
  /Users/Adam/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/webrick/httpserver.rb:138:in `service'
  /Users/Adam/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/webrick/httpserver.rb:94:in `run'
  /Users/Adam/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/webrick/server.rb:295:in `block in start_thread'


  Rendered /Users/Adam/.rvm/gems/ruby-2.1.1/gems/actionpack-4.1.0/lib/action_dispatch/middleware/templates/rescues/_source.erb (0.5ms)
  [1m[36mPromiscuous Recovery Delete (23.8ms)[0m  [1mDELETE FROM _promiscuous WHERE id = 17[0m
  Rendered /Users/Adam/.rvm/gems/ruby-2.1.1/gems/actionpack-4.1.0/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (1.0ms)
  Rendered /Users/Adam/.rvm/gems/ruby-2.1.1/gems/actionpack-4.1.0/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (1.0ms)
  Rendered /Users/Adam/.rvm/gems/ruby-2.1.1/gems/actionpack-4.1.0/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (15.3ms)

发生了什么事?为什么我收到此错误?我跟着Ryan Bates设置邮件。它已经过时了吗?

1 个答案:

答案 0 :(得分:2)

该错误告诉您Ruby无法找到SMTP服务器的DNS条目。

这是因为您的配置中存在拼写错误,smtp.gmail.com而非smptp.gmail.com。此外,domain应该是您的域名,而不是gmail.com

ActionMailer::Base.smtp_settings = {
  :address              => 'smtp.gmail.com',
  :port                 => 587,
  :domain               => 'aisisplanner.com',
  :user_name            => Figaro.env.EMAIL,
  :password             => Figaro.env.PASSWORD,
  :authentication       => 'plain',
  :enable_starttls_auto => true
}

请参阅:http://guides.rubyonrails.org/action_mailer_basics.html#action-mailer-configuration-for-gmail