2013-03-27 55 views
1

我想实现一个真正的simpel通讯。为此我可以选择尽可能多的收件人。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 

终于为发送简讯的形式:

<%= form_tag ('/newsletters'), :multipart => true do %> 
      <%= t 'views.newsletter.to_recipient' %>:<br> 
      <%= select_tag 'sent_to', options_from_collection_for_select(@customers, 'email', 'name'), :multiple => true, :class => 'sent_to' %><br><br> 
      <%= t 'views.newsletter.subject' %>:<br> 
      <%= text_field_tag 'subject' %><br><br> 
      <%= t 'views.newsletter.content' %>:<br> 
      <%= text_area_tag 'content', "".html_safe, :size=>"20x8" %><br><br> 
<%= t 'views.newsletter.attachment' %>:<br> 
<%= file_field_tag 'file' %><br><br> 
      <%= submit_tag t('views.buttons.newsletter_send_now'), :class => "btn btn-primary", :disable_with => t('views.buttons.newsletter_sending') %> 
    <% end %> 

另一个小问题:为什么是 “延迟”,从“delay_jobs “宝石不在这里工作?所有其他邮件可以通过键入“Newsletter.delay.send_newsletter(...)”发送。

回答

1

这可能是因为file.read让您在文件末尾留下了什么都没有留下来阅读。我将在您的ApplicationController中添加一个file_contents = file.read,然后将其作为附加参数传递给每个send_newsletter调用,假定文件很小。

+0

该解决方案如同简单有效。感谢那伟大的提示!现在它工作了! – Adrian 2013-03-28 09:05:58

相关问题