我正在使用Magento 1.9.1,并且在创建新订单时,无论是从前端还是在Admin,系统都会发送2封电子邮件-两者相同!
我在网上查看并发现了一个较旧的错误,我找不到提到的代码来注释掉,这也似乎与Paypal订单有关,事实并非如此。
我已经禁用了所有扩展程序,并尝试过并且仍然存在相同的问题,因此我有信心这不是扩展程序问题。
我正在使用Magento 1.9.1,并且在创建新订单时,无论是从前端还是在Admin,系统都会发送2封电子邮件-两者相同!
我在网上查看并发现了一个较旧的错误,我找不到提到的代码来注释掉,这也似乎与Paypal订单有关,事实并非如此。
我已经禁用了所有扩展程序,并尝试过并且仍然存在相同的问题,因此我有信心这不是扩展程序问题。
Answers:
此问题必须与新的Magento电子邮件队列系统有关,该系统将孤立记录保留在“收件人”表上。如果这是您的问题,我会给您发送修复程序。
新的Magento电子邮件队列系统管理以下两个表:core_email_queue和core_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表上将不会留下任何孤立的记录,将来也不会向错误的收件人发送重复的消息。
我有同样的问题。对于每笔订单,我都会收到客户的电子邮件和一封分别发送到我的商店地址的电子邮件-都发送到我的商店电子邮件帐户的邮箱中。
在Magento管理员中:系统>配置>销售电子邮件>订单
我已经将电子邮件“发送订单电子邮件复制方法”从“单独的电子邮件”设置为“密件抄送”,并且现在可以使用。我现在每个订单只收到一封电子邮件。
我有同样的问题。就我而言,问题是由cron.sh脚本的源代码引起的。
我的托管服务提供商为Magento cron-job 使用了自己的cron.sh和cron.php脚本版本。
当我从cron.sh脚本更改为用于启动Magento-Cron-Job 的cron.php脚本时,新订单电子邮件仅发送了一次,因此解决了我的问题。
也许您的问题与cron.sh或cron.php脚本的代码有关。