0

そのため、デバッグ方法がわからない興味深い動作を作成することができました。モデルとテーブルに裏打ちされたメーラーがあります。ユーザーがメッセージを作成すると、メソッドが電子メールの送信先の連絡先の配列を生成します。コンソールでテストされているので、そこから取り上げます。

モデルは、受信者の配列を単純に反復します...

class ContactMessage < ActiveRecord::Base
  ...
  def send_message(user)
    self.recipients.each do |rec|
      unless rec.include?("@")
        contact = Contact.find(rec)
        to = "\"#{contact.first_name} #{contact.last_name}\" <#{contact.email}>"
      else
        to = rec
        contact = user.contact.new('email' => rec)
      end
     ContactMail.direct_mail(user, self, to, contact).deliver
    end
  end

end

次に、ContactMail.direct_mail メソッドに対して n 回の新しい呼び出しを行う必要があります。

class ContactMail < ActionMailer::Base
  helper :mail
  def direct_mail(user, contact_message, to, contact)
    @user = user
    @contact = contact
    @contact_message = contact_message
    @theme = @contact_message.theme
    mail(:to => to, :subject => contact_message.subject, :from => "no-reply" << @user.website.domain, :reply_to => @user.email)
  end

  ...
end

mail() メソッドは、提供された @instance 変数を使用してビューをレンダリングします。

<%= @user.website.title %>
<%= @user.website.motto %> 
============================================================
<%= @contact_message.message.html_safe.gsub(/<\/?[^><]*>/i, "") %>
============================================================
This message is from <%= @user.first_name << " " << @user.last_name << " of " << @user.business%>
Please reply to <%= @user.email %>
<%= @user.telephone %>
<%= @user.address_l1%>
<%= @user.address_l2 unless @user.address_l2.blank?%>
<%= @user.city << ", " << @user.state << " " << @user.zip %>
<%= @user.website.domain %>

すべて順調です。私は MailCatcher を使用してすべてのメールを受信して​​おり、端末は送信されたと表示しています。

ただし、最初の << @instance の後に送信される各メールは、互いに積み重なっていきます! それは次のようなものを生成します

Healthy Living
Where massage makes health. 
============================================================
asdfasdfasdfasd
============================================================
This message is from Adam Fluke of Healthy Living LLC Fluke of Healthy Living LLC Fluke of Healthy Living LLC Fluke of Healthy Living LLC Fluke of Healthy Living LLC Fluke of Healthy Living LLC Fluke of Healthy Living LLC Fluke of Healthy Living LLC Fluke of Healthy Living LLC Fluke of Healthy Living LLC
Please reply to fluke.a@gmail.com
504-638-2222
1822 Moss St
Apt E
New Orleans, AL 70119, AL 70119, AL 70119, AL 70119, AL 70119, AL 70119, AL 70119, AL 70119, AL 70119, AL 70119, AL 70119, AL 70119, AL 70119, AL 70119, AL 70119, AL 70119, AL 70119, AL 70119, AL 70119, AL 70119
healthyliving.org

(これは送信された 5 番目のメッセージであり、電子メールが送信されるたびに次第に悪化します。)

これは私が理解していないことです。メールとメソッド呼び出しに関する私の理解に基づいて、送信される各メッセージは独自の一意のオブジェクトである必要があり、相互にまったくやり取りしてはなりません。それでも、明らかにそうです。これは += と <<、text と html で発生します。なんてこと?

任意の考えや助けをいただければ幸いです。

4

1 に答える 1

0

を使用して、実際にインスタンス変数を変更しています<<。使えば動く+と思います。

于 2012-07-30T06:45:52.723 に答える