2

クライアントのWebサイトはRails3に組み込まれており、Herokuでホストされており、Railsメーラーを介して送信されるフォーム送信を受け入れます。彼らは電子メールの複製を受け取っています。開発環境で問題を再現できません。

メールは、標準のRailsメーラーでドメインに登録されているGmailアカウントを介して送信されます。

ActionMailer::Base.smtp_settings = {
  :address              => "smtp.gmail.com",
  :port                 => 587,
  :domain               => "clientdomain.com",
  :user_name            => "noreply@clientdomain.com",
  :password             => "password",
  :authentication       => "plain",
  :enable_starttls_auto => true
}

(gather data)
mail(:to => "staff@clientdomain.com", :subject => "Form Submittal", :from => @email)

複製は、元の配信から1分から3時間以上経過すると配信が異なるため、必ずしもすぐに送信されるとは限りません。

場合によっては、HTML文字がエンティティに置き換えられます。

次に例を示します。

From: noreply@clientdomain.com
> Subject: Form Submittal
> Date: December 14, 2012 10:38:18 PM EST
> To: staff@clientdomain.com
>=20
> Form Submittal
>=20
> Name: Potential Lead
>=20
> Phone: 1234567890
>=20
> Email: some.user@gmail.com 
>=20
> Message: Hi my names Some I'm from tennesse and I'd really like to =
> get info on your service thank you for all your help!!!
>=20

そして複製:

> From: noreply@clientdomain.com
> Subject: Form Submittal
> Date: December 15, 2012 1:46:54 AM EST
> To: staff@clientdomain.com
>=20
> Form Submittal
>=20
> Name: Potential Lead
>=20
> Phone: 1234567890
>=20
> Email: some.user@gmail.com
>=20
> Message: Hi my names Some I%27m from tennesse and I%27d really like =
> to get info on your service thank you for all your help%21%21%21
>=20

フォームが2回送信されただけだと思いたくなりましたが、3時間後にまったく同じ入力を送信する可能性は低く、大量の重複(60〜75%が報告されることもありますが、100%になることはありません)と相まって、非常に高くなります。それには懐疑的です。

また、重複する問題についての要点を見つけました。これにより、デフォルト設定を次のようにオーバーライドするように指示されました。

config.action_mailer.sendmail_settings = {
  :arguments => '-i'
}

...有益な結果はありません。

私の質問は、明白ではないにしても、レールが重複した電子メールを送信するのを防ぐ方法は?

4

1 に答える 1

1

同じ問題でGoogleからここに来る人のために、ここに解決策があります:.deliver最初にここに記載されているように、遅延ジョブを使用してメーリングをスケジュールする場合は使用しないでくださいhttps://stackoverflow.com/a/13000167/1870446およびここhttps:/ /github.com/collectiveidea/delayed_job#rails-3-mailers

したがって、代わりにUserMailer.delay.some_mail.deliverを使用する必要がありますUserMailer.delay.some_mail。乾杯!

于 2015-02-15T18:47:48.000 に答える