新しい注文メールが2回送信されています


25

私はMagento 1.9.1を使用しています。新しい注文を作成するとき、それがフロントエンドであろうと管理者であろうと、システムは2つのメールを送信しています。両方とも同じです!

私はネットを調べて、古いバグを発見しましたが、コメントするコードが見つかりませんでした。また、Paypalの注文に関係しているように見えましたが、そうではありません。

すべての拡張機能を無効にしましたが、同じ問題が引き続き発生したため、拡張機能の問題ではないと確信しています。


1
この問題を解決しましたか?時々同じ奇妙な二重注文の確認を受け取り、確認メールにもbccを使用しました。顧客が2通のメールも受け取るかどうかはわかりませんが、そうは望んでいません。
フォックス

メールの宛先は誰ですか?管理者のメールでチェックアウトしていますか?
SR_Magento

同じ問題が発生しています(新規注文後にユーザーに2つのメールが届きます)。Answer以下についてはわかりませんが、「core_email_queue」と「core_email_queue_recipients」の両方のテーブルが空であるため、これは私のケースではないはずです。これで私を助けてください。
アビシャルマ

アビ・シャルマ、私は同じ問題を抱えていますが、それでも重複したメールを受け取ります...あなたは問題を解決しましたか?お知らせください
Lior Loria

回答:


48

この問題は、受信者テーブルに孤立したレコードを残す新しいMagento電子メールキューシステムに関連する必要があります。これが問題である場合、修正をお送りします。

新しいMagento電子メールキューシステムは、これら2つのテーブルcore_email_queueおよびcore_email_queue_recipientsを管理します。前者は電子メールメッセージを処理し、後者はこれらのメッセージの受信者を処理します。

core_email_queue Magentoのメールキューに電子メールが送信されるように、テーブルが一掃されます。このクリーニングは、app / code / core / Mage / Core / etc / config.xm l構成ファイル内で定義されているcore_email_queue_clean_upというcron タブジョブによって実行されます。クリーニングを実行するコードは、Mage_Core_Model_Resource_Email_QueueクラスのremoveSentMessages関数で定義されてます。

/**
 * Remove already sent messages
 *
 * @return Mage_Core_Model_Resource_Email_Queue
 */
public function removeSentMessages()
{
    $this->_getWriteAdapter()->delete($this->getMainTable(), 'processed_at IS NOT NULL');
    return $this;
}

上記のコードは、cronタスクによって1日に1回実行されます。

ただし、core_email_queue_recipientsテーブル(電子メールの受信者を保持し、message_idフィールドによってcore_email_queueテーブルにリンクされているテーブル)がcore_email_queueテーブル(電子メールメッセージを保持するテーブル)と一緒にクリーニングされず、孤立したレコードが内部に残ることがありますその受信者テーブルは、その後メッセージテーブルが消去されます。

ここで説明されている問題は、core_email_queueテーブル(メッセージ)がリセットされ、このテーブルのautoincrement message_idフィールドが1に再起動されたときに発生します。

core_email_queue_recipientsテーブル(Recipients)はそれに応じてクリーンアップされていないため、新しい電子メールがMagento電子メールキューに追加されると、core_email_queueテーブルに新しいレコードが作成され(message_idが1から再び始まります)、同時に新しいレコードが作成されます上core_email_queue_recipientsのこれらの同じIDを持つテーブル(1から再度開始します)。

問題は、これらのIDが(以前の電子メールメッセージにより)孤立レコードとしてRecipientsテーブルに既に存在する可能性があることです。これらの新しいメッセージIDは、core_email_queue_recipientsテーブル内で繰り返されます。最終的に、異なる電子メールメッセージはmessage_idによって対応する受信者にリンクされますが、以前の電子メールから同じmessage_idが割り当てられた以前の受信者にも誤ってリンクされます。

したがって、適切な受信者に加えて、特定のメッセージを送信するために受信者が検索されると、他の誤った受信者が発生する可能性があります。

幸いなことに、この問題の修正は簡単に実行できます。

必要なのはそのすべてが上のすべての繰り返しのメッセージIDを掃除されcore_email_queue_recipientsのテーブル、と確認して、メッセージがで削除されたときにcore_email_queue、それに対応する受信者が上削除されますと同時に、テーブルcore_email_queue_recipientsのテーブル。

これを実現する最善の方法は、これらのレコードをリンクしてカスケードで削除する外部キーを作成することです(ただし、それを行う前にいくつかのクリーニングを行う必要があります)。

これは問題を修正する手順です:

1)次の2つのSQLクエリを実行して、孤立レコードと繰り返しメッセージIDからcore_email_queue_recipientsテーブルを消去します。

DELETE FROM core_email_queue_recipients WHERE message_id NOT IN (SELECT message_id FROM core_email_queue);
DELETE FROM core_email_queue_recipients WHERE recipient_id < (SELECT recipient_id FROM (SELECT recipient_id FROM core_email_queue_recipients ORDER BY message_id ASC, recipient_id DESC LIMIT 1) AS r);

最初のクエリは孤立したレコードを削除し、2番目のクエリは無効になった古いレコードを削除します。

2)core_email_queue_recipientsテーブルに外部キーを作成して、カスケードの受信者レコードを削除します。この外部キーを作成するSQLクエリは次のとおりです。

ALTER TABLE core_email_queue_recipients ADD FOREIGN KEY(message_id) REFERENCES core_email_queue(message_id) ON DELETE CASCADE;

この新しい外部キーを使用することにより、全く孤立したレコードが上に残しませんcore_email_queue_recipientsの清掃時にテーブルcore_email_queueテーブルを、そして間違った受信者への重複したメッセージは、将来的には送信されません。


2
素晴らしい研究と提供された作業修正セザール。これは、顧客の名前と住所を他の顧客に送信する可能性があるため、Magentoチームによる主要な監視です。この問題が発見されてから、これが(どの)パッチ/リリースで対処されているかは誰にもわかりませんか?
ジゴジャック

上記のソリューションを実装した後、同じ注文メールが同じメールアドレスに複数回送信されるという問題が引き続き発生しています。ご協力ください。
-aton1004

両方のテーブルがすでに空になっていることを確認しているので、これらの2つのステップ(クエリ)を実行する必要がありますか?
アビシャルマ

どのようにこれらのクエリを実行したが、助けはありません。.まだ注文メールを2回
受け取ってい

5

同じ問題がありました。注文ごとに、顧客の電子メールと店舗のアドレス宛ての個別の電子メールを受け取ります。両方とも私の店舗の電子メールアカウントのメールボックスに届きます。

Magento管理画面:システム>設定>販売メール>注文

「注文メールのコピー方法を送信」という電子メールを「メールの分離」から「Bcc」に設定しましたが、現在は機能しています。現在、注文ごとに1つの電子メールのみを受信して​​います。


3
私はすでにBccメソッドを使用しているので、残念ながら私にとっては問題ではありません。(
クリストファースロー

私もすでにこの設定を使用していますが、ユーザーは新しい注文を出した後に2つのメールを受け取ります。
アビシャルマ

1

同じ問題がありました。私の場合、問題はcron.shスクリプトのソースコードが原因でした。

私のホスティングプロバイダーは、Magento cronジョブ用に独自のバージョンのcron.shおよびcron.phpスクリプトを使用しました。

Magento-Cron-Jobを開始するためにcron.shスクリプトからcron.phpスクリプトに変更したとき、新しい注文の電子メールは1回だけ送信され、問題は解決しました。

たぶんあなたの問題はcron.shまたはcron.phpスクリプトのコードと関係があるかもしれません。


こんにちは、Magentoのcronジョブにcron.phpスクリプトを既に使用していますが、メールが2回届きます。
アビシャルマ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.