Ruby on rails rails,action mailer不发送,尽管日志上说是

Ruby on rails rails,action mailer不发送,尽管日志上说是,ruby-on-rails,devise,actionmailer,Ruby On Rails,Devise,Actionmailer,我正在使用Desive,在有人使用actionmailer注册后,我正在尝试发送一封欢迎电子邮件 我用…改写了设备上的注册控制器 def create build_resource if resource.save if resource.active_for_authentication? set_flash_message :notice, :signed_up if is_navigational_format? Use

我正在使用Desive,在有人使用actionmailer注册后,我正在尝试发送一封欢迎电子邮件

我用…改写了设备上的注册控制器

  def create
    build_resource

    if resource.save
      if resource.active_for_authentication?
        set_flash_message :notice, :signed_up if is_navigational_format?


        UserMailer.welcome_email(resource).deliver


        sign_in(resource_name, resource)
        respond_with resource, :location => after_sign_up_path_for(resource)
      else
        set_flash_message :notice, :"signed_up_but_#{resource.inactive_message}" if is_navigational_format?
        expire_session_data_after_sign_in!
        respond_with resource, :location => after_inactive_sign_up_path_for(resource)
      end
    else
      clean_up_passwords resource
      respond_with resource
    end
  end
在那一行

UserMailer.welcome_email(resource).deliver
我打电话给我的用户_mailer.rb

  default :from => "blink@gmail.com"

  def welcome_email(user)
    @user = user
    @url = "http://example.com/login"
    mail(:to => user.email, :submit => "Welcome YEAH!")     
  end
我在app/views/user\u mailer/welcome\u email.text.erb下有一个视图

在我的initializers文件夹中,我有一个setup_mail.rb

ActionMailer::Base.smtp_settings = {
    :address                => "smtp.gmail.com",
    :port                   => 587,
    :domain                 => "gmail.com",
    :user_name              => "blink@gmail.com",
    :password               => "example",
    :authentication     => "plain",
    :enable_starttls_auto   => true
}
在我的发展中,我有

config.action_mailer.delivery_method = :sendmail
config.action_mailer.perform_deliveries = true
我非常困惑为什么这一直不起作用。我写了一个比较老的项目,我让action mailer开始工作。现在的代码几乎与我的旧项目相同。唯一的例外是我现在正在使用Deave

在我的终端窗口中,当我运行“rails服务器”时,在该窗口上还显示

Sent mail to blink@gmail.com (140ms)
Date: Thu, 12 Apr 2012 12:32:48 -0700
From: blink@gmail.com
To: blink@gmail.com
Message-ID: <4f872de096f4e_1805f3fdba4834cd493153@spiderman.local.mail>
Subject: Welcome email
Mime-Version: 1.0
Content-Type: multipart/alternative;
boundary="--==_mimepart_4f872de0883d4_1805f3fdba4834cd49281a";
charset=UTF-8
Content-Transfer-Encoding: 7bit
submit: Welcome YEAH!
已将邮件发送到blink@gmail.com(140毫秒)
日期:2012年4月12日星期四12:32:48-0700
发件人:blink@gmail.com
致:blink@gmail.com
消息ID:
主题:欢迎电邮
Mime版本:1.0
内容类型:多部分/备选;
boundary=“-->=”mimepart_4f872de0883d4_1805f3fdba4834cd49281a”;
字符集=UTF-8
内容传输编码:7bit
提交:欢迎!
用户注册后。但我不认为这是真的。我的gmail从来没有收到过它,它也不在我的垃圾邮件中。这可能与Deave的邮件/视图有关吗?但是我在控制器中显式地使用UserMailer,这就是我过度编写它的原因

我被困了好几天了!非常感谢您的帮助。非常感谢

你试过了吗

config.action_mailer.delivery_method = :smtp
看看mailcatcher在开发中测试电子邮件的功能,我发现它比实际发送邮件要容易得多。

你试过了吗

config.action_mailer.delivery_method = :smtp

看看mailcatcher在开发中测试电子邮件的功能,我发现它比实际发送邮件要容易得多。

首先,您必须确保告诉Desive我们要寻找您的控制器(因为我认为您已经对它进行了子类化)。您可以这样编辑
config/routes.rb

# config/routes.rb
devise_for :users, :controllers => {:registrations => "registrations"}
# app/observers/user_observer.rb
class UserObserver < ActiveRecord::Observer
  def after_create(user)
    UserMailer.welcome_email(user).deliver
  end
end
如果您已经这样做了,请确保您的控制器是正在使用的控制器。此外,特别是关于
sendmail
,我还没有尝试使用它,但假设
sendmail
使用主机操作系统的内部邮件代理,并且您处于动态IP地址(ISP在连接时提供给其用户),我相信像GMail这样的邮件提供商会阻止您的邮件,因为它们不允许动态IP作为邮件提供者。他们这样做主要是为了安全。也许您可以通过编辑
config/environments/development.rb
来检查这一点:

# config/environments/development.rb
config.action_mailer.raise_delivery_errors = true
config.active_record.observers = :user_observer
看看引擎盖下面有没有什么东西。如果这没有多大帮助(并且由于您实际上是在尝试使用有效的邮件帐户发送电子邮件-给定ActionMailer设置),您可以使用SMTP传递而不是sendmail,以及您的配置,编辑以下行:

# config/environment/development.rb
config.action_mailer.delivery_method = :smtp
在您的初始值设定项中,它实际上将通过指定的帐户向指定的收件人发送电子邮件

作为最后一个(离题)建议,我建议您使用,在这种情况下,您不需要覆盖Desive的注册控制器。这将使您的生活更加简单、干燥,并遵循传统而非配置的理念。然后,您可以创建一个观察者,如下所示:

# config/routes.rb
devise_for :users, :controllers => {:registrations => "registrations"}
# app/observers/user_observer.rb
class UserObserver < ActiveRecord::Observer
  def after_create(user)
    UserMailer.welcome_email(user).deliver
  end
end

首先,您必须确保您告诉Deviate要查找您的控制器(因为我假设您已经对它进行了子类化)。您可以这样编辑
config/routes.rb

# config/routes.rb
devise_for :users, :controllers => {:registrations => "registrations"}
# app/observers/user_observer.rb
class UserObserver < ActiveRecord::Observer
  def after_create(user)
    UserMailer.welcome_email(user).deliver
  end
end
如果您已经这样做了,请确保您的控制器是正在使用的控制器。此外,特别是关于
sendmail
,我还没有尝试使用它,但假设
sendmail
使用主机操作系统的内部邮件代理,并且您处于动态IP地址(ISP在连接时提供给其用户),我相信像GMail这样的邮件提供商会阻止您的邮件,因为它们不允许动态IP作为邮件提供者。他们这样做主要是为了安全。也许您可以通过编辑
config/environments/development.rb
来检查这一点:

# config/environments/development.rb
config.action_mailer.raise_delivery_errors = true
config.active_record.observers = :user_observer
看看引擎盖下面有没有什么东西。如果这没有多大帮助(并且由于您实际上是在尝试使用有效的邮件帐户发送电子邮件-给定ActionMailer设置),您可以使用SMTP传递而不是sendmail,以及您的配置,编辑以下行:

# config/environment/development.rb
config.action_mailer.delivery_method = :smtp
在您的初始值设定项中,它实际上将通过指定的帐户向指定的收件人发送电子邮件

作为最后一个(离题)建议,我建议您使用,在这种情况下,您不需要覆盖Desive的注册控制器。这将使您的生活更加简单、干燥,并遵循传统而非配置的理念。然后,您可以创建一个观察者,如下所示:

# config/routes.rb
devise_for :users, :controllers => {:registrations => "registrations"}
# app/observers/user_observer.rb
class UserObserver < ActiveRecord::Observer
  def after_create(user)
    UserMailer.welcome_email(user).deliver
  end
end

难以置信的我真的以为我试过把它改成smtp。我一定是在别的地方做的。它也可以通过不配置来工作,因为我猜它默认为smtp(至少根据我的设置)。太谢谢你了。非常感谢!难以置信的我真的以为我试过把它改成smtp。我一定是在别的地方做的。它也可以通过不配置来工作,因为我猜它默认为smtp(至少根据我的设置)。太谢谢你了。非常感谢!