代码之家  ›  专栏  ›  技术社区  ›  Adrian

Rails3:发送带有附件的邮件-第一次发送后文件已损坏

  •  1
  • Adrian  · 技术社区  · 11 年前

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

    我可以在那份时事通讯上附上一份文件。这对第一封邮件非常有效。接下来的所有邮件都有损坏的附件(1字节大小)。

    操作邮件:

    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
    

    应用程序控制器:

      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”宝石中的“延迟”在这里不起作用?所有其他邮件都可以通过键入“时事通讯.delay.send_Newsletter(…)”发送

    1 回复  |  直到 11 年前
        1
  •  1
  •   Dan Wich    11 年前

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