php - 如何为 PHP 应用程序设置水滴电子邮件系统

标签 php email cakephp

我的网络应用程序正在使用 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/

相关文章:

asp.net - 由于目标机器主动拒绝而无法建立连接 72.14.213.109 :587

email - Coldfusion 9,如何清空 "Undelivered Mail Queue"

mysql - 未找到列 : 1054 Unknown column 'Comment.deferred_id' in 'field list'

php - Cakephp 3.x 记住我登录功能

jquery - 删除 cakephp 默认模板中的额外代码

php - 一个文件中有 2 个数据库连接 - 这将如何影响性能?

php - 如何在 PHP 或 MySQL 中对随机文本字符串使用类似 mod 的操作

javascript - 如何根据复选框设置另一个表单字段?

php - mysql 到 php 日期函数

email - 骡子 ESB : how to filter emails based on subject or sender?