1

本物のシンプルなニュースレターを実装したい。そのため、必要な数の受信者を選択できます。

そのニュースレターにファイルを添付できます。これは、最初のメールに最適です。次のメールはすべて添付ファイルが破損しています (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 %>

もう 1 つの小さな質問: 「delay_jobs」gem の「delay」がここで機能しないのはなぜですか? 他のすべてのメールは、「Newsletter.delay.send_newsletter(...)」と入力して送信できます。

4

1 に答える 1

1

これはおそらくfile.read、ファイルの最後に何も読み取るものが残っていないために発生しています。ファイルが小さいと仮定してfile_contents = file.read、ApplicationController にを追加し、それを追加のパラメータとして各呼び出しに渡します。send_newsletter

于 2013-03-27T21:56:43.297 に答える