2010-06-14 47 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(); 
} 

我不知道你如何能夠訪問數據,所以上述不太可能按原樣使用。假設您可以通過閱讀狀態和日期來過濾收件箱的內容,但是,原則上不應該這樣工作?