我遇到的问题是,订单电子邮件不会同时发送,也会跳过一些电子邮件。我确实检查了core_email_queue和core_email_queue_recipients,发现第一个表中有10条记录,对于那些订单,客户和管理员没有收到任何电子邮件。我如何处理这个队列电子邮件,我该怎么做才能确保将来不会发生这种情况? 我确实检查了cron及其工作正常并设置为每5分钟运行一次。
SMTP Pro免费扩展是否会替换此默认Magento电子邮件队列流程并解决问题?
由于
答案 0 :(得分:0)
在Magento 1.9之后,订单确认电子邮件不再在结账时发送,而是与cron一起发送。确保您的Cron正常工作(您可以查看cron日志/var/log/cron
)。
还要确保Magento cron每五分钟运行一次。您应该在Crontab(在您的服务器中)中看到类似的内容:
*/5 * * * * /public_html/cron.sh
此扩展程序可帮助您管理Magento中的cron作业:AOE Scheduler
或强>
只需在order.php (public_html/app/code/core/Mage/Sales/Model/Order.php)
做一个小改动(别忘了覆盖这个)
这
$mailer->setQueue($emailQueue)->send();
要
$mailer->send();
或强>
另一种解决方案:
go to System -> Configuration -> ASCHRODER EXTENSIONS -> SMTP -> Queue Configuration -> Queue Usage -> Never
答案 1 :(得分:0)
从Magento 1.9.1开始,电子邮件不会在结账时直接发送,而是排队等候。该队列正在通过Magento cronjob进行处理。
Magento cronjobs没有问题。命令是正确的。电邮发送成功。即使邮件的接收者不正确。
Magento如何确定邮件的接收者?来自与表core_email_queue_recipients
有关系的表core_email_queue
。
MySQL支持外键,它允许您跨表交叉引用相关数据,以及外键约束,这有助于保持这种展开数据的一致性。
Magento向表message_id
添加CONSTRAINT和FOREIGN KEY core_email_queue_recipients
。
ALTER TABLE core_email_queue_recipients
添加约束FK_6F4948F3ABF97DE12127EF14B140802A
FOREIGN KEY(message_id
)引用core_email_queue
(message_id
)ON DELETE CASCADE ON UPDATE CASCADE;
FOREIGN KEY message_id
将引用表message_id
中的core_email_queue
。这两个表现在彼此绑定。表格core_email_queue
将是父级,core_email_queue_recipients
将作为子级。如果我从message_id
删除core_email_queue
= 1的行。来自message_id
的{{1}} = 1的每一行也将被MySQL自动删除。
那么,真正的问题是什么?我登录MySQL数据库服务器。我发现表core_email_queue_recipients
没有FOREIGN KEY CONSTRAINT。我不知道为什么。也许,他或他的开发人员删除了表。所以,每次cronjobs清理电子邮件队列。 MySQL服务器只删除电子邮件队列。已删除队列的电子邮件收件人将被忽略。表core_email_queue_recipients
的数据完整性现已破裂。