代码之家  ›  专栏  ›  技术社区  ›  Amit

Actionmailer不传送邮件,使用rails 3

  •  15
  • Amit  · 技术社区  · 14 年前

    我想做一个应用程序,当用户注册时发送一封电子邮件。

    我将gmail的smtp设置放在config/application.rb文件中,邮件功能如下所示

    mail(:to => "me@me.com", :subject => "Mail!", :from => "another@me.com", :content_type => "text/html")
    

    现在当我看到日志,我看到它说邮件已经发送,但我从来没有收到任何邮件。。。

    另外,当我调用邮件传递函数时, Emails.signed(@user).deliver

    Emails.signed(@user).deliver
    

    邮件(:收件人=>me@me.com“,:主题=>”邮件!,:开始=>another@me.com“,:内容类型=>”文本/html“)
    

    编辑:development.rb

    App::Application.configure do
      # Settings specified here will take precedence over those in config/environment.rb
    
      # In the development environment your application's code is reloaded on
      # every request.  This slows down response time but is perfect for development
      # since you don't have to restart the webserver when you make code changes.
      config.cache_classes = false
    
      # Log error messages when you accidentally call methods on nil.
      config.whiny_nils = true
    
      # Show full error reports and disable caching
      config.consider_all_requests_local       = true
      config.action_view.debug_rjs             = true
      config.action_controller.perform_caching = false
    
      # Don't care if the mailer can't send
      config.action_mailer.raise_delivery_errors = true
      config.action_mailer.perform_deliveries = true
    
      # Print deprecation notices to the Rails logger
      config.active_support.deprecation = :log
    
    end
    
    4 回复  |  直到 14 年前
        1
  •  35
  •   AmitA    14 年前

    有点晚了,不过也许这能帮你省去几个小时的头痛。这可能只与从gmail发送电子邮件有关。 首先,为了帮助调试这种情况,请将development.rb中的以下行设置为true(假设您处于开发模式):

    config.action_mailer.raise_delivery_errors = true
    

    当我这么做的时候,我意识到gmail拒绝了我的用户名和密码。

      config.action_mailer.delivery_method = :smtp
      config.action_mailer.smtp_settings = {
      :address              => "smtp.gmail.com",
      :port                 => 587,
      :domain               => 'thedomain.com',
      :user_name            => 'admin@thedomain.com',
      :password             => '<password>',
      :authentication       => 'plain',
      :enable_starttls_auto => true  }
    

    参考文献:

    http://forums.pragprog.com/forums/43/topics/541 http://edgeguides.rubyonrails.org/action_mailer_basics.html

        2
  •  7
  •   Peter    13 年前

    还有一件事不要忘记:在环境配置文件中进行更改后,必须重新启动应用程序。当使用乘客时,很快就会错过:)

    当ActionMailer不想在不显示任何错误的情况下发送电子邮件时,这就解决了我的“问题”。。

        3
  •  6
  •   AndroC    10 年前

    写在这里的东西对我没有帮助。

    .deliver() Mail::Message 返回的对象 mail(:to => @user.email, :subject => 'Welcome to the Site') 方法调用。

    一切都按合同上的规定处理 official RoR tutorial .

    也就是说,在开发/生产环境文件中,创建一个类似以下内容的部分:

      # mailer
      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:               'gmail.com',
          user_name:            '<username>@gmail.com',
          password:             '<password>',
          authentication:       'plain',
          enable_starttls_auto: true
      }
    

    然后您将ActionMailer::Base子类化,例如:

    class InfoMailer < ActionMailer::Base
      default from: "<username>@gmail.com"
    
      def welcome_user_and_send_password(user, password)
        default_url_options = self.default_url_options()
    
    
        @user = user
        @password = password
        @url = default_url_options[:host]
        mail(:to => @user.email, :subject => 'Welcome to the Site').deliver()
      end
    
    end
    

    在那之后,你可以简单地使用这个 InfoMailer

    InfoMailer.welcome_user_and_send_password(user, password)
    
        4
  •  0
  •   Natasha Jaques    9 年前

    config.action_mailer.delivery_method = :test