【问题标题】:How to configure to send email through localhost app server without authentication?如何配置通过 localhost 应用服务器发送电子邮件而无需身份验证?
【发布时间】:2011-07-15 14:57:38
【问题描述】:

我已经在 config/initializers/ 下配置了 Rails 邮件程序,如下所示:

/config/initializers/setup_email.rb

config.action_mailer.raise_delivery_errors = true

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

它工作正常,我可以发送电子邮件并接收它们。

但是如何配置它从本地主机发送电子邮件而无需身份验证(无需用户名和密码),即不使用gmail,而是通过应用程序的本地服务器发送电子邮件,那么如何配置呢?

---编辑--- 使用 localhost 时,我得到的错误信息是:

Connection refused - connect(2)
/home/user1/.rvm/rubies/ruby-1.8.7-p330/lib/ruby/1.8/net/smtp.rb:551:in `initialize'
/home/user1/.rvm/rubies/ruby-1.8.7-p330/lib/ruby/1.8/net/smtp.rb:551:in `open'
/home/user1/.rvm/rubies/ruby-1.8.7-p330/lib/ruby/1.8/net/smtp.rb:551:in `do_start'
/home/user1/.rvm/rubies/ruby-1.8.7-p330/lib/ruby/1.8/timeout.rb:67:in `timeout'
/home/user1/.rvm/rubies/ruby-1.8.7-p330/lib/ruby/1.8/timeout.rb:101:in `timeout'
/home/user1/.rvm/rubies/ruby-1.8.7-p330/lib/ruby/1.8/net/smtp.rb:551:in `do_start'
/home/user1/.rvm/rubies/ruby-1.8.7-p330/lib/ruby/1.8/net/smtp.rb:525:in `start'
/home/user1/.rvm/gems/ruby-1.8.7-p330@myapp/gems/mail-2.2.15/lib/mail/network/delivery_methods/smtp.rb:127:in `deliver!'
/home/user1/.rvm/gems/ruby-1.8.7-p330@myapp/gems/mail-2.2.15/lib/mail/message.rb:1967:in `do_delivery'
/home/user1/.rvm/gems/ruby-1.8.7-p330@myapp/gems/mail-2.2.15/lib/mail/message.rb:228:in `deliver'
/home/user1/.rvm/gems/ruby-1.8.7-p330@global/gems/actionmailer-3.0.3/lib/action_mailer/base.rb:401:in `deliver_mail'
/home/user1/.rvm/gems/ruby-1.8.7-p330@global/gems/activesupport-3.0.3/lib/active_support/messages.rb:52:in `instrument'
/home/user1/.rvm/gems/ruby-1.8.7-p330@global/gems/activesupport-3.0.3/lib/active_support/messages/instrumenter.rb:21:in `instrument'
/home/user1/.rvm/gems/ruby-1.8.7-p330@global/gems/activesupport-3.0.3/lib/active_support/messages.rb:52:in `instrument'
/home/user1/.rvm/gems/ruby-1.8.7-p330@global/gems/actionmailer-3.0.3/lib/action_mailer/base.rb:399:in `deliver_mail'
/home/user1/.rvm/gems/ruby-1.8.7-p330@myapp/gems/mail-2.2.15/lib/mail/message.rb:228:in `deliver'
/home/user1/myapp/app/mailers/my_mailer.rb:9:in `new_car_messages'
/home/user1/.rvm/gems/ruby-1.8.7-p330@global/gems/actionpack-3.0.3/lib/abstract_controller/base.rb:151:in `send_action'
/home/user1/.rvm/gems/ruby-1.8.7-p330@global/gems/actionpack-3.0.3/lib/abstract_controller/base.rb:151:in `process_action'
/home/user1/.rvm/gems/ruby-1.8.7-p330@global/gems/actionpack-3.0.3/lib/abstract_controller/base.rb:120:in `process'
/home/user1/.rvm/gems/ruby-1.8.7-p330@global/gems/actionpack-3.0.3/lib/abstract_controller/rendering.rb:40:in `process'
/home/user1/.rvm/gems/ruby-1.8.7-p330@global/gems/actionmailer-3.0.3/lib/action_mailer/old_api.rb:75:in `process'
/home/user1/.rvm/gems/ruby-1.8.7-p330@global/gems/actionmailer-3.0.3/lib/action_mailer/base.rb:446:in `process'
/home/user1/.rvm/gems/ruby-1.8.7-p330@global/gems/actionmailer-3.0.3/lib/action_mailer/base.rb:441:in `initialize'
/home/user1/.rvm/gems/ruby-1.8.7-p330@global/gems/actionmailer-3.0.3/lib/action_mailer/base.rb:425:in `new'
/home/user1/.rvm/gems/ruby-1.8.7-p330@global/gems/actionmailer-3.0.3/lib/action_mailer/base.rb:425:in `method_missing'
/home/user1/myapp/config/../lib/my/new_car_sender.rb:7:in `send_email'
/home/user1/.rvm/gems/ruby-1.8.7-p330@global/gems/activerecord-3.0.3/lib/active_record/relation.rb:13:in `each'
/home/user1/.rvm/gems/ruby-1.8.7-p330@global/gems/activerecord-3.0.3/lib/active_record/relation.rb:13:in `__send__'
/home/user1/.rvm/gems/ruby-1.8.7-p330@global/gems/activerecord-3.0.3/lib/active_record/relation.rb:13:in `each'
/home/user1/myapp/config/../lib/my/new_car_sender.rb:6:in `send_email'
/home/user1/myapp/lib/tasks/new_car_messages.rake:8
/home/user1/.rvm/gems/ruby-1.8.7-p330@global/gems/rake-0.8.7/lib/rake.rb:636:in `call'
/home/user1/.rvm/gems/ruby-1.8.7-p330@global/gems/rake-0.8.7/lib/rake.rb:636:in `execute'
/home/user1/.rvm/gems/ruby-1.8.7-p330@global/gems/rake-0.8.7/lib/rake.rb:631:in `each'
/home/user1/.rvm/gems/ruby-1.8.7-p330@global/gems/rake-0.8.7/lib/rake.rb:631:in `execute'
/home/user1/.rvm/gems/ruby-1.8.7-p330@global/gems/rake-0.8.7/lib/rake.rb:597:in `invoke_with_call_chain'
/home/user1/.rvm/rubies/ruby-1.8.7-p330/lib/ruby/1.8/monitor.rb:242:in `synchronize'
/home/user1/.rvm/gems/ruby-1.8.7-p330@global/gems/rake-0.8.7/lib/rake.rb:590:in `invoke_with_call_chain'
/home/user1/.rvm/gems/ruby-1.8.7-p330@global/gems/rake-0.8.7/lib/rake.rb:583:in `invoke'
/home/user1/.rvm/gems/ruby-1.8.7-p330@global/gems/rake-0.8.7/lib/rake.rb:2051:in `invoke_task'
/home/user1/.rvm/gems/ruby-1.8.7-p330@global/gems/rake-0.8.7/lib/rake.rb:2029:in `top_level'
/home/user1/.rvm/gems/ruby-1.8.7-p330@global/gems/rake-0.8.7/lib/rake.rb:2029:in `each'
/home/user1/.rvm/gems/ruby-1.8.7-p330@global/gems/rake-0.8.7/lib/rake.rb:2029:in `top_level'
/home/user1/.rvm/gems/ruby-1.8.7-p330@global/gems/rake-0.8.7/lib/rake.rb:2068:in `standard_exception_handling'
/home/user1/.rvm/gems/ruby-1.8.7-p330@global/gems/rake-0.8.7/lib/rake.rb:2023:in `top_level'
/home/user1/.rvm/gems/ruby-1.8.7-p330@global/gems/rake-0.8.7/lib/rake.rb:2001:in `run'
/home/user1/.rvm/gems/ruby-1.8.7-p330@global/gems/rake-0.8.7/lib/rake.rb:2068:in `standard_exception_handling'
/home/user1/.rvm/gems/ruby-1.8.7-p330@global/gems/rake-0.8.7/lib/rake.rb:1998:in `run'
/home/user1/.rvm/gems/ruby-1.8.7-p330@global/gems/rake-0.8.7/bin/rake:31
/home/user1/.rvm/gems/ruby-1.8.7-p330@global/bin/rake:19:in `load'
/home/user1/.rvm/gems/ruby-1.8.7-p330@global/bin/rake:19

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 actionmailer


    【解决方案1】:

    如果您已经设置了本地 SMTP 服务器,那么您应该只提供连接详细信息:

    config.action_mailer.delivery_method = :smtp
    config.action_mailer.smtp_settings = {
        :address              => "localhost",
        :port                 => 25
    }
    

    您应该在 config/environments/*.rb 文件中包含它。

    【讨论】:

    • 不..它对我不起作用,我收到“连接被拒绝 - 连接(2)”错误
    • 嗨,我已经把它放在 config/enviroments/development.rb 下,但是我从控制台“连接被拒绝 - 连接(2)”中得到了同样的错误:(
    【解决方案2】:

    为了发送电子邮件,您需要设置一个 smtp 服务器。它可以在本地设置,也可以使用 Gmail、SendGrid 或 Mandrill 等远程服务。在您的情况下,我建议使用mailcatcher

    来自文档:

    如何

    1. gem install mailcatcher
    2. 邮递员
    3. 转到http://localhost:1080/
    4. 通过smtp://localhost:1025发送邮件

    导轨

    要设置您的 rails 应用程序,我建议将其添加到您的 环境/development.rb:

    config.action_mailer.delivery_method = :smtp config.action_mailer.smtp_settings = { :address => "localhost", :port => 1025 }

    【讨论】:

    • 我真的很喜欢 Mailcatcher 用于开发测试。但问题实际上是关于使用 localhost MTA(邮件传输代理)发送邮件而不是使用 SMTP。 Mailcatcher 所做的只是为本地调试设置一个简单的 SMTP;它不会充当 MTA 将电子邮件发送到 localhost 以外的目的地。
    【解决方案3】:

    如果您正在从 localhost 测试电子邮件功能,则首先确定您是否安装了 sendmail 并正常工作,如果没有,则在终端中运行此命令:

    sudo apt-get install sendmail

    安装后尝试发送电子邮件..因为配置看起来不错..

    【讨论】:

    • 是'sudo apt-get install sendmail'
    【解决方案4】:

    letter_opener gem 添加到Gemfile 中的development gem 组。

    将这些行添加到development.rb:

    config.action_mailer.delivery_method = :letter_opener
    config.action_mailer.default_url_options = { host: "localhost, port: 3000" }
    

    您应该会在浏览器中看到触发的电子邮件弹出,而无需运行 STMP 服务器或身份验证。

    Chrome 中的电子邮件:

    【讨论】:

      【解决方案5】:

      添加 'enable_starttls_auto: false' 选项为我解决了问题。

      这是我的配置(..\config\environments\development.rb):

      config.action_mailer.perform_deliveries = true
      config.action_mailer.raise_delivery_errors = true
      config.action_mailer.delivery_method = :smtp
      config.action_mailer.smtp_settings = {
        address:  'localhost',
        port:     25,
        domain:   'exmaple.com',
            enable_starttls_auto: false
      }
      

      ruby 2.2.3p173 (2015-08-18 revision 51636) [x64-mingw32]
      Rails 4.2.5`

      【讨论】:

      • 谢谢约翰,我投了赞成票,以防有人遇到同样的问题。这为我解决了。 (轨道 3)
      【解决方案6】:

      甚至更短: 根本没有入口。 localhost 和端口号都是默认值。

      我在 config/development.rb 中的当前配置:

      #config.action_mailer.default_url_options = { :host => 'localhost' }
      

      当我使用远程 smtp 主机时,我保留它的注释以记住要更改的位置。

      编辑(因为我没有足够的声誉来评论正确的帖子): 我看到您对@HakonB 的帖子的评论说您收到“连接被拒绝 - 连接(2)”。您可以访问本地主机上的邮件服务器日志吗?我认为您应该在那里寻找有关如何解决此问题的提示。

      【讨论】:

      • @Mellon,对不起,我不清楚我的意思是哪个日志。我在考虑邮件服务器日志(/var/log/maillog 或类似的东西,具体取决于您正在运行的内容)。我花了几个小时对我的 Rails 应用程序在发送电子邮件时出现错误进行故障排除,结果却发现邮件服务器被拒绝了。
      • config.action_mailer.default_url_options = { :host => 'localhost:3000' } config.action_mailer.raise_delivery_errors = false config.action_mailer.delivery_method = :smtp config.action_mailer.perform_deliveries = true
      【解决方案7】:

      好吧,你可以:

      sudo apt-get install sendmail
      

      然后修改配置为:

      ActionMailer::Base.delivery_method = :sendmail
      

      最后,您会发现大多数电子邮件服务都会阻止您的主机(避免垃圾邮件的策略)。

      【讨论】:

        猜你喜欢
        • 2019-07-07
        • 2017-09-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多