新订单电子邮件发送了两次


25

我正在使用Magento 1.9.1,并且在创建新订单时,无论是从前端还是在Admin,系统都会发送2封电子邮件-两者相同!

我在网上查看并发现了一个较旧的错误,我找不到提到的代码来注释掉,这也似乎与Paypal订单有关,事实并非如此。

我已经禁用了所有扩展程序,并尝试过并且仍然存在相同的问题,因此我有信心这不是扩展程序问题。


1
你解决了这个问题吗?我有时会得到同样奇怪的双重订单确认,也使用密件抄送作为确认邮件。不知道客户是否还会收到两封邮件,但我不希望如此。
福克斯

电子邮件发送给谁?您是否正在查看其中一封管理员电子邮件?
SR_Magento 2015年

我遇到了同样的问题(下新订单后,用户收到两封电子邮件)。我不确定下面的答案,我的两个表“ core_email_queue”和“ core_email_queue_recipients”都为空,所以我认为这不是我的情况。请帮我。
阿比·沙尔玛

Abi Sharma,我有同样的问题,但是,我收到重复的电子邮件...您解决了这个问题吗?请让我知道
Lior Loria

Answers:


48

此问题必须与新的Magento电子邮件队列系统有关,该系统将孤立记录保留在“收件人”表上。如果这是您的问题,我会给您发送修复程序。

新的Magento电子邮件队列系统管理以下两个表:core_email_queuecore_email_queue_recipients。前者处理电子邮件消息,而后者处理这些消息的收件人。

core_email_queue表清理作为Magento的邮件队列的电子邮件发送。清理是通过名为core_email_queue_clean_up的cron选项卡作业执行的,该作业在app / code / core / Mage / Core / etc / config.xm l配置文件中定义。在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任务执行一次。

但是,有可能发生的情况是core_email_queue_recipients表(保存电子邮件收件人的表,并通过message_id字段链接到core_email_queue表)没有与core_email_queue表(保存电子邮件的表)一起被清除,从而留下了孤立记录然后清除“邮件”表时的“收件人”表。

当重置core_email_queue表(消息)并将该表上的autoincrement message_id字段重新初始化为1 时,会出现此处描述的问题。

因为没有相应地清理core_email_queue_recipients表(收件人),所以当将新电子邮件添加到Magento电子邮件队列时,将在core_email_queue表上创建新记录(message_id从1再次开始),同时创建新记录。在具有相同ID(再次从1开始)的core_email_queue_recipients表上。

问题是这些ID可能已经作为孤儿记录存在于“收件人”表上(由于以前的电子邮件)。然后,这些新的消息ID在core_email_queue_recipients表中重复出现。最后,不同的电子邮件消息通过message_id链接到其相应的收件人,但它们也错误地链接到先前的收件人,这些收件人从以前的电子邮件中分配了相同的message_id

因此,当搜索收件人以发送给定消息时,除了适当的收件人之外,还会出现其他错误的收件人。

幸运的是,此问题的修复很容易执行。

需要做的就是清除core_email_queue_recipients表上所有重复的消息id ,并确保在core_email_queue表上删除消息时,同时在core_email_queue_recipients表上删除其相应的收件人。

实现此目的的最佳方法是创建一个外键,以链接这些记录并按级联方式将其删除(但是您需要先进行一些清理,然后才能执行此操作)。

这是解决问题的过程:

1)执行以下两个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)在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表时,core_email_queue_recipients表上将不会留下任何孤立的记录,将来也不会向错误的收件人发送重复的消息。


2
出色的研究并为César提供了解决方法。这是Magento团队的主要疏忽,因为这可能会将客户的姓名和地址发送给其他客户。自发现此问题以来,有人知道是否已经在(哪个)补丁程序/发行版中解决了此问题?
zigojacko

实施上述解决方案后,仍然面临多次向同一电子邮件地址多次发送同一订单电子邮件的问题。请您帮忙?
aton1004'9

我正在检查我的两个表已经为空,所以我必须运行这两个步骤(查询)吗?
Abi Sharma

无论我如何执行这些查询,都无济于事。.仍然两次收到订单电子邮件
Abi Sharma

5

我有同样的问题。对于每笔订单,我都会收到客户的电子邮件和一封分别发送到我的商店地址的电子邮件-都发送到我的商店电子邮件帐户的邮箱中。

在Magento管理员中:系统>配置>销售电子邮件>订单

我已经将电子邮件“发送订单电子邮件复制方法”从“单独的电子邮件”设置为“密件抄送”,并且现在可以使用。我现在每个订单只收到一封电子邮件。


3
我已经在使用密件抄送方法,所以不幸的是,这对我来说不是问题:(
Christopher Thrower

我也已经在使用此设置,但是用户下新订单后会收到2封电子邮件。
阿比·沙尔玛

1

我有同样的问题。就我而言,问题是由cron.sh脚本的源代码引起的。

我的托管服务提供商为Magento cron-job 使用了自己的cron.shcron.php脚本版本。

当我从cron.sh脚本更改为用于启动Magento-Cron-Job 的cron.php脚本时,新订单电子邮件仅发送了一次,因此解决了我的问题。

也许您的问题与cron.shcron.php脚本的代码有关。


嗨,我们已经在Magento cron工作中使用了cron.php脚本,但是我收到了两次电子邮件。
Abi Sharma
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.