2011-12-30 16 views
1

私は、遅れて送信したい電子メールを送信するためにPHPスクリプトを使用しています。私はそのためにsleep()を使用するつもりです。しかし、どこからメールを送信するのを遅らせるか?ここに私のコードです:睡眠を使ってPHPのメールを遅らせる方法

<?php  
if(isset($_POST['email'])) 
{ 

$headers = "From: Memory Jet <[email protected]>\r\n"; 


$to_visitor = $_POST["email"]; 
$common_data = $_POST["message"]; 
//I originally put the delay here, it didn't work 
mail($to_visitor, "Your Memory", $common_data, $headers); 

} ?> 

ありがとうございます! =)-Ben

+0

'mail()'関数の前に置いておくとスリープします。 –

+0

もう一度試してみます –

答えて

4

2つの質問:1)「うまくいかない」とはどういう意味ですか?何をしましたか? 2)なぜメールを送る前に長い時間待っていますか?

また、PHPのスクリプトでsleep()を呼び出すことを強くお勧めします。これにより、スクリプトの完了、つまりブラウザへのHTMLの処理が遅れることになります。

私は、より堅牢なメールキューイングシステムを実装します。基本的に、スクリプトで電子メールを送信する代わりに、送信する電子メールのキューを含むデータベースに行を挿入します。次に、cronまたはその他のバックグラウンドプロセスがあり、定期的にデータベースに送信する電子メールがあるかどうかがチェックされ、バッチで送信されます。

さらに、テーブルに「送信予定時刻」を指定すると、送信者スクリプトは、現在時刻がその「送信予定時刻」の後になるまで電子メールを送信しません。

sleep()の問題は、PHPスクリプトが起動して実行されてから消えてしまうことです。 (比較的)遠い将来に何かをするには、何かが必要です。 cronは単なる例でした。あなたはWindowsのタスクスケジューラ(あなたはターゲットプラットフォームは言及していませんでした)で何かを使うことができ、独自のプログラムを書くことができます。データベースをチェックして電子メールを送信するC言語(あるいは多分PHPでも)で何かを書くのは大変な作業ではありません。

+0

スクリプトが読み込まれませんでした。私は再びそれを試してみる必要があります私はそれがエラーだと思った –

+0

http://www.kirupa.com/forum/showthread.php?301942-Insert-time-delay-into-mail-sending – DGund

+1

@DevinGund、ああ、本当の人の遅れを模倣する。それは意味をなさない:-) –

0

私は、遅れて送信したい電子メールを送信するためにPHPスクリプトを使用しています。私はそのためにsleep()を使うつもりです。

Do not。ユーザートリガースクリプトでこれを行うと、スリープコールが終了するまでユーザーの最終ページレンダリングが遅れることになります。それはまた、Apacheサーバーワーカーを全期間にわたって結びつけます。負荷が重くて10秒遅れてしまった場合は、自分自身をインターネットから立ち去ることができます。また、遅延の終了前にユーザーがページを閉じると、電子メールは送信されません。

これを行うには、cronまたはデーモンを使用します。

+0

NOT TRUE!ユーザーがページを閉じた後もスクリプトは実行され続けます。 – Alexxus

+0

@Alexxus一般的に、 http://php.net/manual/en/function.ignore-user-abort.php – ceejayoz

+0

クラップ!あなたが正しいです!そのために残念!私はそれがデフォルトでオンであると思った.. – Alexxus