电子邮件未通过主机名中的点发送default_url_options [:host]

时间:2013-06-26 13:00:38

标签: devise ruby-on-rails-3.2 actionmailer

这是一个特别奇怪的问题...... 我使用Devise,当我要求重置密码时,我希望收到电子邮件。

所以我将这一行添加到我的development.rb文件中:

ActionMailer::Base.default_url_options[:host] = "localhost:3000"

这很有效......

但是,如果我更改地址并在其中写入带点的内容,例如我的生产地址“xxx.herokuapp.com”,则不发送邮件。我没有收到任何错误,在日志中我看到一条消息告诉邮件已发送,但我什么都没收到。

如果我提供的主机名中没有点('。'),我只会收到一封电子邮件。


修改

如果我使用默认的Devise:Mailer,一切正常。 这对我的自定义邮件程序来说一定是个问题。

这是: Mailer.rb

class Mailer < Devise::Mailer

  include Devise::Mailers::Helpers

  def headers_for(action, opts={})
    headers = {
        :subject       => t("devise.mailer.#{action}.subject"),
        :from          => mailer_sender(devise_mapping),
        :to            => resource.email,
        :bcc           => "myadresse",
        :template_path => template_paths
    }
  end

  def confirmation_instructions(record, opts={})
    devise_mail(record, :confirmation_instructions, opts)
  end

  def reset_password_instructions(record, opts={})
    devise_mail(record, :reset_password_instructions, opts)
  end

  def unlock_instructions(record, opts={})
    devise_mail(record, :unlock_instructions, opts)
  end

end

1 个答案:

答案 0 :(得分:0)

正如here所述,您可能需要像这样调用super

def headers_for(action, opts={})
    headers = super.merge({
        :subject       => t("devise.mailer.#{action}.subject"),
        :from          => mailer_sender(devise_mapping),
        :to            => resource.email,
        :bcc           => "myadresse",
        :template_path => template_paths
    })
end