Rails 邮件程序在电子邮件上发送空正文

Posted

技术标签:

【中文标题】Rails 邮件程序在电子邮件上发送空正文【英文标题】:Rails mailer sending Empty Body on EMail 【发布时间】:2013-12-19 09:16:28 【问题描述】:

我在 config/application.rb 上有关注

config.action_mailer.default_url_options =  :host => 'xxxxx.com' 
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = false
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = 
:address              => "smtp.mandrillapp.com",
:port                 => 587,
:domain               => 'xxxxx.com',
:user_name            => 'xxx.xxxxx@gmail.com',    
:password             => 'xxxxxxxxxxxxxxxx',
:authentication       => 'plain',
:enable_starttls_auto => true  

在 app/mailers/welcome_mailer.rb 中

 def welcome_email(user)    
     @user = user
     @lang=I18n.locale       
     if @user.email.present?      
       begin
       headers = 
        :subject       => welcome_email_subject(@user).to_s,
        :from          => ADMINISTRATIVE_EMAIL,
        :to            => user.email 
       
       mail(headers) 
       rescue Exception => e
         abort      
       end
     end
 end

我在 /app/views/welcome_mailer/welcome_email.html.erb 上有一个模板

我正在使用此邮件操作通过 devise 发送欢迎电子邮件和确认链接。为此,我在 /config/initializers/welcome_mailers.rb 上做了以下操作

module Devise::Models::Confirmable
def send_on_create_confirmation_instructions
  if self.email
     WelcomeMailer.welcome_email(self).deliver      
  end
end

def send_reset_password_instructions
  generate_reset_password_token! if should_generate_reset_token?
  WelcomeMailer.generate_password(self).deliver
end
end

即使我在开发中使用了相同的 smtp 配置,但在生产环境中发送的邮件的正文却是空的,并且在开发环境(本地)中也能正常工作。顺便说一下,我的生产环境是 Amazon EC2。最初 15 天前我遇到了同样的问题,我通过更改 smtp 帐户解决了。现在它没有按任何顺序发生。建议您的反馈或 cmets。

【问题讨论】:

【参考方案1】:

您可以在邮件配置中覆盖模板路由:

class WelcomeMailer < ActionMailer::Base
  ...
  self.template_root = "#RAILS_ROOT/app/views/mailers" # Rails.root in 3.x
  ...
end

【讨论】:

config/production.rb有action_mailer设置吗? 不,我只有在 config/application.rb 有邮件设置

以上是关于Rails 邮件程序在电子邮件上发送空正文的主要内容,如果未能解决你的问题,请参考以下文章

Ruby on Rails 中的 Sendgrid / 电子邮件发送问题(托管在 Heroku 上)

Rails Mailer - 无法从 Mailer 视图访问实例变量

Rails 应用程序在卡住发布表单时向同一地址发送多封电子邮件

Mandrill 在 Rails 上发送电子邮件 ruby

在 Rails 应用程序中发送自动电子邮件

邮件未在 rails 上使用 devise、heroku 和邮戳发送