2010-06-14 45 views
0

我正在编写一个小型php-cli脚本,它将循环播放我的个人收件箱,然后通过网关向我发送短信。未读电子邮件通知程序,最实用的方法

我的问题是:

如通过cron有剧本推出每10分钟,如果有一个电子邮件坐在我的收件箱是不是下一个剧本发射前阅读,然后我会收到2条短信。

任何一个(伪代码都可以)都知道php5中的最佳做法是确保只发送一条短信吗?

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

回答

0

经过几个小时的睡眠(从上午4点看澳大利亚vs德国,世界杯)我提出了一个更好的方法,稍微复杂一些,然后使用sqlite数据库,但有一些额外的好处。

我使用imap_mail将短信发送到网关,并将短信通知的message_id存储为传出电子邮件中的自定义“X-Relationship:”标题,然后将该邮件复制到我的已发送邮件。

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

这是什么我有一个记录(发送项目)的电子邮件发送到SMS网关 - 似乎运作良好。

0

什么我目前学习对被存储信息ID在一个SQLite数据库和标记字段短信是否已发送或不

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

0

我没有看到你离开而没有坚持某些地方。

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

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

1

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

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

if($sendMessage){ 
    sendMessage(); 
} 

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