Rails 3:使用附件发送邮件 – 首次发送后损坏的文件

我想实现一个真正的简化通讯。 因此,我可以选择我想要的收件人。

对于那个时事通讯,我可以附上一个文件。 这适用于第一封邮件。 所有下一封邮件都有损坏的附件(1个字节大小)。

的ActionMailer:

def send_newsletter(recipient,subject,content,file) @content = content if file attachments[file.original_filename] = { :content=> file.read, :mime_type=> file.content_type } end mail(:to => recipient, :template_name => "deliver_newsletter", :subject => subject).deliver! end 

ApplicationController中:

  def create @customers = Customer.where("CHAR_LENGTH(email) > 0") @recipients = params[:sent_to] @subject = params[:subject] @content = params[:content].html_safe @file = params[:file] if @recipients @recipients.each do |mail_recipient| Newsletter.send_newsletter(mail_recipient,@subject,@content,@file) end end respond_to do |format| format.html { redirect_to bills_path, notice: "everything works fine" } end end 

最后是发送新闻通讯的表格:

   true do %> :
true, :class => 'sent_to' %>

:


:
"20x8" %>

:


"btn btn-primary", :disable_with => t('views.buttons.newsletter_sending') %>

另一个小问题:为什么“延迟”来自“delay_jobs”gem不能在这里工作? 所有其他邮件都可以通过输入“Newsletter.delay.send_newsletter(…)”发送

这可能发生了,因为file.read会在文件末尾留下您没有任何内容可供阅读。 我会在ApplicationController中添加一个file_contents = file.read ,然后将其作为附加参数传递给每个send_newsletter调用,假设文件很小。