gpt4 book ai didi

drupal - 如何延迟电子邮件递送?

转载 作者:行者123 更新时间:2023-12-01 15:50:08 25 4
gpt4 key购买 nike

我目前正在学习 Drupal 电子邮件功能,例如 drupal_mail 和 hook_mail 以及 hook_mail_alter,我面前有一个问题,我需要能够将电子邮件排队以延迟传递。例如,在用户注册事件后需要等待一个小时的事件注册通知。而且该电子邮件具有用户特定数据,因此不能只是通用模板电子邮件...

我正在使用 MailQ模块,主要是因为它的日志功能,但我想知道是否可以修改它(或其他东西)以添加可配置的延迟功能?

有任何想法吗?

=======================

一些额外的想法:

D6 中有 2 个模块可用于排队电子邮件,MailQ 和作业队列(在下面 Nikit 的列表中)。它们都具有邮件队列功能,这非常有用,并且都具有不同的方法、优势和劣势——从粗略的调查来看。 EG:MailQ 有一个很棒的日志功能,有一个非常有用的管理界面来处理邮件的类别,例如排队、发送、发送、失败等。你可以设置每次 cron 运行时要发出多少封电子邮件。

但是,据我所知,虽然 Job Queue 没有这些类别和日志归档,但它确实允许对不同的工作进行优先级排序,如果您同时发出不同的电子邮件类型,这将非常有用,例如联系确认、事件例如,注册确认和“邀请 friend ”电子邮件。

因此,我对完美队列的想法是将这两个模块集成在一起(它们相处得不太好),并为每种作业类型提供额外的延迟功能。

但是写这样的东西远远超出了我微薄的才能,所以我只需要编写一个由 cron 激活的小自定义模块,它将查找创建日期至少在过去一个小时之前的标记联系人,并找到将相关信息直接写入 MailQ DB 表的方法。

当我的新功能由 cron 触发以及 MailQ 功能由同一个 cron 运行触发时,似乎发生了一些冲突,所以我试图弄清楚如何对 MailQ 进行 cron 优先级排序我的函数 - 这样我的函数将在 MailQ 运行后添加表数据。

最佳答案

这不是最优雅的解决方案,但是在我知道使用 hook_mail_alter 的事务性电子邮件服务之前,我在 D6 中做了一些事情,我将电子邮件参数加载到数据库表中,将消息值设置为 null,因此它不会在钩子(Hook)之后发送,并且然后稍后每 5 分钟运行一次 cron 作业将检查表并一次发送几条消息(如果有任何等待)。发送后,我将状态翻转为已发送。您将收到一个看门狗错误,指出电子邮件发送失败。

但是使用这种方法,您可以调用诸如 Mailgun/Mandrill 之类的东西并在钩子(Hook)中发送预定的电子邮件,或者将其放入带有时间戳字段(如 strtotime('+2 周'))的数据库表中,然后进行 cron 作业检查每 x 分钟在表上,并在满足时间戳条件时发送。 hook_mail_alter 为您提供了一个字段来识别消息,因此您可以拥有一个仅在需要时捕获特定电子邮件的开关。

如果您对自定义模块感到满意,请查看 Mandrill 模块。它可能有一个比我上面描述的更优雅的接管 Drupal 电子邮件的解决方案。

关于drupal - 如何延迟电子邮件递送?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2535290/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com