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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |