我想实现真正的简化通讯。 因此,我可以选择我想要的收件人。
对于该简报,我可以附上一份文件。这适用于第一封邮件。所有下一封邮件都有损坏的附件(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(...)”来发送。
答案 0 :(得分:1)
可能会发生这种情况,因为file.read
会将您留在文件末尾,而无需阅读任何内容。我会在你的ApplicationController中添加一个file_contents = file.read
,然后将其作为附加参数传递给每个send_newsletter
调用,假设文件很小。