Это заняло у меня большую часть 1-2 недель, чтобы понять, так что, надеюсь, этот код даст вам некоторое представление о том, что делать.
Вот мой контроллер списков, где я генерирую сообщение для отправки по почте:
def messages
@list = List.find(params[:id])
#@message = Message.new( :user_id => @list.user.id, :list_id => @list.id,
#:subject => params[:subject], :body => params[:body] )
@message = Message.new(params[:message])
@contacts = @list.contacts
respond_to do |format|
if @list.save && @message.save
#Blaster is my mailer, and blast is the send method in the blaster.rb mailer
Blaster.blast(@message, @contacts)
format.html {
redirect_to @list, notice: 'Message was saved.' }
format.json { render json: @list, status: :created, location: @list }
else
format.html { redirect_to @list, notice: 'There was an error, try again'}
format.json { render json: @list.errors, status: :unprocessable_entity }
end
end
конец
=========
Вот мой почтовик - он называется blast.rb
def blast(message, contacts)
# can't send without a message, and an array of contacts
@message = message
@contacts = contacts
# with variables set, let's create the loop to do its magic
@contacts.each do |contact|
mail = mail(
:to => "#{contact.email}",
:from => "noreply@foo.org",
:return_path => "noreply@foo.org",
:subject => @message.subject,
:body => @message.body
#:template_path => 'blaster',
#:template_name => 'blast'
) do |format|
format.html { render 'blast.html.erb'}
format.text { render 'blast.text.erb'}
end
mail.deliver
end # contacts.each loop
end #blast method
Я почти уверен, что этот код неоптимальный и низкого качества, поэтому будьте осторожны, но, возможно, вы найдете здесь что-нибудь, что поможет вам решить вашу уникальную реализацию. Надеюсь, поможет!
D.