我的网络应用程序正在使用 CakePHP 2.4,我计划构建一个 "drip" email随着时间的推移发送后续电子邮件的功能。这是现代网站中非常常见的功能,但令我惊讶的是我能找到的资源如此之少。
我的问题:是否有任何既定的模式可以做到这一点?我对如何做到这一点有一些想法,但我不想重新发明轮子。
(我快速搜索了一下,结果一无所获。)
注意:我知道像 MailChimp 这样的服务可以做到这一点,但我的“滴注”需要动态完成,因为它们链接到可能已经发生或尚未发生的用户操作。例如:如果用户尚未完成其个人资料,我想每 3 天发送一封电子邮件。一旦这样做,他们就应该停止打点滴。
最佳答案
按照要求正确。
基本上,它更多的是逻辑/工作流程问题。
在您的情况下,您希望在 3 天后以及此后每 3 天警告用户他们的个人资料不完整。
因此,首先您需要某种方法来检测他们的个人资料是否不完整,在这种情况下,我将使用标志字段 IsComplete 0/1。默认情况下为 0(不完整)。我们还想知道用户注册的日期,因此我们将使用一个简单的 mysql 时间戳字段,其中填充了格式为 yyyy-mm-dd H:i:s 的 mysql 日期,我们还想知道用户的日期是最后一封电子邮件通知。为此,我们将使用另一个 mysql 字段,这次是一个格式相同的日期时间字段 yyyy-mm-dd H:i:s。
所以我们的用户数据库现在看起来像这样(注意 mysql 语法不正确)
IsComplete TINYINT 1 DEFAULT 0,
SignupDate TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
LastWarnDate DATETIME DEFAULT NULL
最后警告日期的 NULL 很重要!
在前端用户配置文件编辑/更新页面上,您只需将以下内容添加到保存位
if (PSEUDO_CODE_ALL_FIELDS_ARE_COMPELTED==TRUE) {
"UPDATE tblusers SET IsComplete=1";
}
现在我们已经解决了这个问题,让我们看看基本逻辑。
水滴邮件程序每天只需检查一次数据库中是否有待处理的操作,然后根据需要发送通知电子邮件。我们可以通过在 Linux crond 上运行的基本 headless cron 任务来实现这一点。您可以在 google 上找到通过 cron 运行 php 脚本的示例,几乎第一个响应正是您想要的。我不会深入讨论这个问题,而是更多地讨论实际的 cron 脚本。
现在我们知道用户何时注册您的网站、他们的个人资料是否完整以及我们上次警告他们的时间。 我们的 cronjob 很好很简单,它所要做的就是检查个人资料是否完整,如果不完整,则检查日期并发送电子邮件。
$query = "SELECT EmailAddress,SignupDate,LastWarnDate FROM tblusers WHERE IsComplete=0"; //we don't need to bring back the completed users so for speed we look at uncomplete only
if (strlen($query->LastWarnDate) < 5) { // this is a little nasty but will work NULL is in the db field which returns 4 characters on strlen so a quick check that its < 5 means that we don't have a proper date in the field. There's better ways of doing this i'm being brief
// ok no last warn date so check sign up date vs now
if (DATE_DIFF($query->SignupDate,now()) >=3) {
//3 days or longer since signups so do first warn
"update tblusers SET LastWarnDate=NOW()";
mail(); //standard php mail function for sending email you can use swiftmail or another component if you like
} // its been less than 3 days so do nothing no need for an else
} else {
//we have a last warn date so check warn date vs now
if (DATE_DIFF($query->LastWarnDate,now()) >=3) {
//3 days or longer since last warn date so update last warn date to now and email
"update tblusers SET LastWarnDate=NOW()";
mail(); //standard php mail function for sending email you can use swiftmail or another component if you like
} //its been less than 3 days so do nothing no need for an else
}
这就是非常基本的逻辑流程和示例,不是有效的 php,但您应该能够非常轻松地将最终解决方案基于代码。
安排 cron 作业在每晚午夜运行,然后就完成了。
关于php - 如何为 PHP 应用程序设置水滴电子邮件系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21093796/