Tôi đang sử dụng Rails 5 và tôi có tình huống tương tự, email được gửi chỉ cho người nhận cuối cùng nhưng cũng có thể nó đã được gửi cũng giống như văn bản đơn giản không phải là Email HTML.
Sau khi thử một số lời khuyên, tôi đã kết thúc sửa chữa nó theo cách này:
Bưu phẩm:
class BrochureMailer < ApplicationMailer
default from: "[email protected]"
def newsletter(sponsor, brochures_list)
@sponsor = sponsor
@brochures = brochures_list
mail(
to: @sponsor.email,
subject: "Interesting subject!"
)
end
end
Bộ điều khiển nơi bưu phẩm được gọi:
class Admin::DashboardController < Admin::BaseController
def send_newsletter
sponsors = params[:sponsor_ids]
brochures = params[:brochure_ids]
sponsors = Sponsor.where(id: sponsors)
brochures = Brochure.where(id: brochures).to_a
# Send Newsletter email to the given Sponsors
sponsors.each do |sponsor|
BrochureMailer.newsletter(sponsor, brochures).deliver_later
end
redirect_back(fallback_location: admin_root_path, success: 'Newsletter sent!')
end
end
Và trong chế độ xem, một cái gì đó như thế này:
<% @brochures.each do |brochure| %>
<table width="280" border="0" cellpadding="0" cellspacing="0" align="left" valign="top" class="floater">
<tr>
<td align="center" valign="top">
<a target="_blank" href="<%= brochure_url(brochure) %>">
<img border="0" vspace="0" hspace="0" src="<%= brochure.image.blank? ? 'default.png' : brochure.image.url(public: true) %>" width="250" height="142">
<b><%= brochure.title %></b>
</a>
<br>
<%= brochure.description.truncate(60) %>
</td>
</tr>
</table>
<% end %>
Và nó hoạt động như một sự quyến rũ! Tôi không chắc chắn nếu đây là cách chính xác hoặc cách tối ưu nhất để đi nhưng chỉ xem xét nó như là một khả năng thứ hai.
Tôi hy vọng nó có thể hữu ích cho người khác.
Nguồn
2018-01-07 04:59:52
Cuộc gọi tới #mail không thực sự gửi email, nó chỉ tạo đối tượng thư. Gọi #deliver trên đối tượng thư đó sẽ gửi nó. Do đó, chỉ lần tạo cuối cùng được gửi khi bạn gọi #deliver (có lẽ trong một bit mã khác). –