【问题标题】:How to (with a mailer-observer) delete a temporary (generated attachement) file after the e-mail has been sent?发送电子邮件后,如何(使用邮件观察者)删除临时(生成的附件)文件?
【发布时间】:2013-04-06 02:01:57
【问题描述】:

我基本上是在向用户发送电子邮件,其中包含在 ActionMailer 的帮助下自动生成的附件(报告)文件。

这是我的 app/mailer/report_mailer.rb :

class ReportMailer < ActionMailer::Base
  default from: "server.email@my_domaine.com"

  def generated_report(user, file_name, report_name, file_path)
    @user = user
    @report_name = report_name
    attachments[file_name] = File.read(file_path)
    mail(:to => user.email, :subject => "Generated report #{report_name} (automatic message)")
  end
end

从我的控制器调用:

...
  t = Time.now
  file_name = "#{generated_name}_#{t.strftime("%Y-%m-%d_%HH-%M-%Ssec")}_#{t.usec}.xls"
  file_path = '/tmp/' + file_name
  ReportMailer.generated_report(current_user, file_name, generated_name, file_path).deliver
...

我的 app/models/generated_report_observer.rb :

class GeneratedReportObserver < ActiveRecord::Observer

  def self.delivered_email(message)
    file_path = ????
    File.delete file_path if File.exist? file_path
  end
end

在 config/initilizer/my_mailer_observer_initializer.rb 中为我的邮件程序初始化我的观察者:

ReportMailer.register_observer(GeneratedReportObserver)

感谢您的帮助

【问题讨论】:

    标签: ruby-on-rails-3.2 actionmailer email-attachments observers


    【解决方案1】:

    在深入挖掘rails library 之后,我设法找到了正确的指令:

    所以我最终得到以下 app/models/generated_report_observer.rb :

    class GeneratedReportObserver < ActiveRecord::Observer
    
      def self.delivered_email(message)
        file_path = '/tmp/' + message.attachments[0].filename
        File.delete file_path if File.exist? file_path
      end
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多