未读电子邮件通知程序,最实用的方法

时间:2010-06-14 02:38:47

标签: php

我正在编写一个小的php-cli脚本,它将遍历我的个人收件箱,然后通过网关向我发送短信。

我的问题是:

如同每10分钟通过cron启动脚本一样,如果我的收件箱中有一封电子邮件在下一个脚本启动之前未读取,那么我将收到2个短信。

是否有人(伪代码会这样做)知道php5中的最佳做法是什么,以确保只发送1条短信?

我目前正在学习的是将消息ID存储在sqlite数据库中并标记字段是否已发送短信 - 但想知道是否有更简单的方法?

4 个答案:

答案 0 :(得分:1)

您不需要存储任何东西。如果我理解正确,您只需要程序在最近10分钟内收到新的未读电子邮件时向您发送消息。在那种情况下,你能不能做到以下几点?

foreach($inbox[] as $message){
    if(($message.isUnread) && ($message.receiveTime > NOW() - 10 minutes)){
        $sendMessage = TRUE;
    }
}

if($sendMessage){
    sendMessage();
}

我不知道您是如何访问数据的,所以上述内容不太可能按原样使用。假设您可以按读取状态和日期到达来过滤收件箱的内容,但原则上不应该这样做吗?

答案 1 :(得分:0)

  

我目前正在学习的是将消息ID存储在sqlite数据库中并标记字段是否已发送SMS

这是最简单直接的方法之一。无论存储方法如何,您都必须在某处保留已查看但未读取的消息ID列表。也可以在一个简单,自包含的SQLite文件中。我想你可以将它们保存在平面文件的列表中。根据定义,这更简单,但它真的更容易吗?

答案 2 :(得分:0)

我没有看到你在某个地方没有坚持的情况下离开。

那些东西应该是不断增加的性质 - 消息ID可能,时间戳肯定。只要您可以查看它并确定新消息是否已经到达。

如果您希望与SMS通信的是,有未读消息,我认为不需要保留更多的单个ID或时间戳。

答案 3 :(得分:0)

经过几个小时的睡眠(从早上4点开始观看澳大利亚对阵德国,世界杯),我想出了一个更好的方法,比使用sqlite DB稍微复杂一些,但有一些额外的好处。

我正在使用imap_mail将SMS发送到网关,并将SMS通知的message_id存储为外发电子邮件中的自定义“X-Relationship:”标头,然后将邮件复制到我的已发送邮件。

然后,通知程序只扫描我的已发送邮件,以查看我已发送邮件中是否存在X-Relationship邮件头。

这是我发送到SMS网关的电子邮件的记录(已发送项目) - 似乎运行良好。