新しいメールが IMAP 経由でメールボックスに届いたときに通知を受け取る方法について少し調べました。どうやらこれにはいくつかの方法があります。1 つは cron ジョブを実行すること (私はそうしたくありません) で、もう 1 つは IMAP-IDLE という関数を使用することです。PHP APIでそれについて何も見つけることができませんでしたが、私が見つけたのは、まさにそれを行うと思われるimap_pingメソッドでした。上記の説明では、「新しいメールを検出する可能性があります」と書かれています。接続が有効な場合に TRUE \ FALSE しか返されない場合、新しいメールが到着したことをどのように知ることができますか?
1 に答える
PHP を使用して新着メールを即座にチェックする
サーバー上の新しいメールをチェックするために使用しようとする際の問題imap_ping()
は、関数が実際には 2 つの目的しか果たさないことです。
- ストリームがまだアクティブかどうかを確認します
- ストリームを維持するには
現在、新しいメールがある場合、 はこの関数に戻るstream
可能性true
がありますが、後でそれを取得する必要があります。
本当の問題
PHP はスクリプト言語です。スクリプトの実行が終了するunset
と、すべて変数になり、次に実行するときに最初からやり直す必要があります。つまり、実行時間を延長して目的のスクリプトを実行している PHP プロセスを fork しない限り、PHP 内の関数は新しいメールが届いているかどうかを即座に確認するのに役立ちません。しかし、実際にはそうすべきではありません。これは悪い習慣であり、PHP が設計された目的ではありません。
可能な解決策
やりたいことを実行するには、ac/c++ デーモンまたはバックグラウンドで常に実行されているようなものを作成するのが最善の策です。新しいメールをチェックしてからモバイル デバイスに通知することができます。または、C/C++ よりも PHP の方が得意な場合は、デーモンが新しいメールを見つけたときに通知を行うスクリプトを作成できます。 . 実装はあなた次第ですが、新しいメールをいつ受信したかをチェックするための解決策は、PHP で実行できるものではありません (実行する必要もありません)。