微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ruby-on-rails – 控制在不同环境中记录和发送电子邮件

在Rails应用程序中,我在其环境/文件中设置了一个新的临时环境,其中包含以下参数:
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = true
config.action_mailer.delivery_method = :smtp

但是,当系统生成电子邮件时,它会打印到staging.log文件而不是发送.我的SMTP设置在其他环境中正常工作.为了让电子邮件真正发送,我错过了什么配置?

编辑:是,设置了暂存框,其中包含有权访问的SMTP服务器的有效配置.似乎问题不在于SMTP设置(如果是,我不会在日志中得到错误吗?),但是使用Rails配置.应用程序仍然将电子邮件重定向到日志文件(说“已发送邮件:…”),而不是实际通过SMTP.

编辑#2:看起来电子邮件实际上已经正确发送,它们恰好也会打印到日志中.我正在尝试使用sanitize_email gem将邮件重定向到另一个地址,这似乎不起作用,这就是为什么我认为电子邮件没有出去.所以我认为这解决了我的问题,虽然我仍然很好奇ActionMailer的设置控制电子邮件是发送,记录到日志文件,还是两者.

编辑#3:sanitize_email的问题归结为我需要将新的临时环境添加到ActionMailer :: Base.local_environments.我会保持这个问题的开放,看看是否有人可以回答我的最后一个问题(什么决定了ActionMailer的电子邮件是否被发送出去,登录到日志文件,或者两者兼而有之?)

解决方法

关于第三次编辑,日志记录是您为应用程序本身设置的日志级别的函数,而不是ActionMailer中的任何特定设置.

在Rails 2.3中,ActionMailer :: Base只是将电子邮件发送到已配置的任何记录器(如果有).收件人将被发送到信息日志,电子邮件正文将发送到调试日志. (评论是我的.其余的都是源代码.)

def deliver!(mail = @mail)
  raise "no mail object available for delivery!" unless mail

  #
  # Logging happens first (or not)
  #
  unless logger.nil?
    logger.info  "Sent mail to #{Array(recipients).join(',')}"
    logger.debug "\n#{mail.encoded}"
  end

  #
  # And then we decide if an email should really get sent
  #
  begin
    __send__("perform_delivery_#{delivery_method}",mail) if perform_deliveries
  rescue Exception => e  # Net::SMTP errors or sendmail pipe errors
    raise e if raise_delivery_errors
  end

  return mail
end

您的environment.rb或staging.rb文件应该有一行控制日志级别.类似于以下内容

config.log_level = :debug

这些都与您已找到的邮件程序配置完全分开,后者控制是否发送电子邮件.

config.action_mailer.perform_deliveries = true

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐