- ベストアンサー
時間を指定してメール送信
フォームに 送信先、題名、本文のほかに 時間を入力し、指定した時間にメール送信する phpスクリプトを考えています。 どういう手順ができるのかアドバイスください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
サーバなんかだと、at は cron を使って、 プログラムを時間通りに実行できるんですけどねー。 基本的に、PerlやPHPは実行した時がすべてなので、 無理・・・なのかな? (何かで特別な方法でできたような気がするけど。 うろ覚えなので忘れてください。) 特別な方法ではないのですが、HPのアクセス数が 多いなら、そのページに仕込んでおいて、 アクセスした時に if(3時~4時&&一度){メール実行}って感じで、 送信することは可能と言えば、可能。 さらにこれを発展させれば、win&携帯で、仕込んだ ページに手動なり、winのタスクなりでアクセスすれば、 メールは、送信できるけどあんまりスマートじゃない ッスねー。 そもそも、メールって相手に届く時間が、すぐとは かぎらないし。 最近でもチャットなんかでメール交換しても、20分 くらいかかる場合もあるし。 なかなか、難しいと思います。
その他の回答 (3)
- campanella_77
- ベストアンサー率66% (35/53)
こんにちは。 結論から言ってしまうと、皆さんが言うように、むずかしいと思います。 No1さんが言ったように、ApacheのようなWebサーバのモジュールとして、もしくはCGIとして動作するのを前提に作られたPHPは、そもそも永久に作動させるといった概念はないでしょう。もしくはすべきではないでしょう。(シェルスクリプトのように、Webサーバなしでも動作させることは出来ますが) そして、デフォルトで30秒しか作動しないようになっています。 php.iniをいじれば、永遠に作動させることも出来ますがすべきではないと思います。PHPはApacheのようなWebサーバの力を借りて動いているわけですからWebサーバの設定と、いくつメールを出すために予約待ちしているかにもよりますが、仮に私が起動させているサーバで実現させると、数十通で誰もアクセスできなくなります。いわゆるブラウザの地球儀がぐるぐる回った状態。 こうした状態を悪意で起こすことを、DOS攻撃といいます。つまり、自分でDOS攻撃を発生させていることになります。 レンタルサーバで、やった場合は・・・。他の借りている人やレンタルサーバ会社にも迷惑がかかるので、場合によっては損害賠償が発生する可能性も・・・。 よって、PHPやWebサーバ以外の力を借りる必要があります。 その方法は皆さんが言っておられるように「corn」を使うか、そういう専用のサーバを用意するかどちらかになるわけですが、まず前提として自分でサーバを立ち上げているか、専用サーバを借りているかが最低条件になります。 簡単な方法としては、「cron」ですが「cron」に登録するメール送信シェル(Perlでもいいんですけど)スクリプトが必要になってきます。 この辺は、御自分でサーバを立ち上げているのでしたら、簡単にできると思いますよ。 がんばってください。
- logistello
- ベストアンサー率50% (1/2)
私の開発環境(Linux+Mysql)でしたら、、、 まず、送信先、題名、本文、時間、送信したかどうかのフラグ、、など条件をDBに格納 ↓ 時間などの条件にマッチした未送信のデータがDBに格納されているときのみメール送信するプログラムを作る。 ↓ 1時間おきにこのプログラムが起動するようにcrontabコマンドでセットする。 という感じでバリバリ稼動中です。
- re13b
- ベストアンサー率58% (18/31)
php が実行されるタイミングを見ればわかると思うのですが、これをスクリプトだけで実 現するのは無理ではないでしょうか? 何かしらのページを開いて、その中のフォームに入力するわけですよね? その状態から php スクリプトに出来ることは フォームの内容をメールサーバーに投げる。 フォームの内容をデータとして保存する。 の2つです。 実際にメールを投げるエージェントは、時間などは関係なく送信してしまうので 指定した時間まで待ってから送信、ということは無理です。 『保存されたフォームデータをチェックして、指定時刻であれば送信する』 というスクリプトを作って、このスクリプトをサーバーのシェルで定期的に実行する必要があります。 それでも、定時間サイクルでこのスクリプトを実行する「なにか」が必要になります。 # Linux で言うところのcron とか、Win のタスクスケジューラとか・・・