
以下、メール送信のプログラムがあるのですが、
ATコマンドのようなものを使用して、指定された時間にPHPのメール送信プログラムが動作するようにしたいと考えています。無理でしょうか。
## `at -t $seireki$tuki$niti$jikan` とかで可能??
指定した時間にPHPプログラムを実施する良い方法があれば、ご教示頂けければと思います。ぼやけた質問で申し訳ありません。
<?
## PHP Version5のため、変数の事前定義。
$email = $_POST{'email'};
$word1 = $_POST{'word1'};
$word2 = $_POST{'word2'};
$word3 = $_POST{'word3'};
$seireki = $_POST{'seireki'};
$tuki = $_POST{'tuki'};
$niti = $_POST{'niti'};
$jikan = $_POST{'jikan'};
## 以下、メール送信
$mail_to = "$email";
$mail_from = "test@test.co.jp";
$mail_bcc = "test@test.co.jp";
$mail_from_title = mb_encode_mimeheader("TEST___")."<".$mail_from.">";
$mail_xmailer = "PHP-" . phpversion();
$mail_subject = mb_encode_mimeheader("TEST");
$mail_body = $mail_body . "\n";
$mail_body = $mail_body . "\n";
$mail_body = $mail_body . "\n";
$mail_encode = "EUC-JP";
$mail_body = mb_convert_encoding($mail_body, $mail_encode);
$mail_header_array["X-Mailer"] = $mail_xmailer;
$mail_header_array["From"] = $mail_from_title;
$mail_header_array["Bcc"] = $mail_bcc;
foreach($mail_header_array as $key => $value){
$mail_header .= $key . ": " . $value . "\r\n";
}
$mail_result = @mb_send_mail($mail_to,
$mail_subject,
$mail_body,
$mail_header,
"-f" . $mail_from);
if(!$mail_result){
die("メールを送信できません\n");
}
?>
No.4ベストアンサー
- 回答日時:
> 送信時間をHTMLより変数で渡そうと思っておりますが、それをCRONの設定ファイルに反映させるのって、無理っぽいですね。
。恐らく、とても面倒ですね(笑。
#2さんの言っている事をもう一度見直してみましょう。良くない用途という言葉にはこだわらないように(笑。悪い事に使わないと言う事ですので、もう少し具体的にしますか。
指定時間を分単位で設定するならば、cronを毎分設定します。PHPでプログラミングする事を前提とすれば、例えばcron.phpをいうプログラムを作成し、wget等でアクセスすれば良いでしょう。
すなわち、crontab -eで
* * * * * wget http://localhost/cron.php
のようにwebアクセスすれば良いです。コマンドのwgetの部分はフルパスでないと動かない可能性もあります。
同様に、10分間隔で設定したい場合は、
*/10 * * * * wget http://localhost/cron.php
とするだけですね。詳しくはcrontabで調べてみて下さい。
cron.php指定時間の時だけ、指定されたプログラムを動かすようになっています。指定時間以外はまったく無駄に(笑)起動しています。
例えば、メール送信関数を mySendMail()とでもしておき、外部ファイル"at.txt"に指定時刻 Y-m-d H:i 形式で書いておいて、
$now = date("Y-m-d H:i");
$atfile = "at.txt";
$atarr = file($atfile);
if(count($atarr)>0){
foreach($atarr as $at){
if($at == $now) mySendMail();
}
}
と言うようなスクリプトが書けます。外部ファイルではなくMySQL等に格納されたデータの方が簡単かもしれませんね。
参考まで。
ご回答いただきましてありがとうございます。
なるほど、そういうやり方もあるわけですね。
勉強になります。
記載されたやり方のイメージとしては、
1) HTMLページから、日時の値を"at.txt"ファイルに追加していく。
2) "at.txt"ファイルを読み、時間が一致すると、mySendMail();で送信予約する。
3) CRONTABで定期的にメール送信プログラムを動作させる。
こんなイメージでよいでしょうか。
送信するメールの値も一意ではないため、少し検討が必要になりますが、大変参考になるご意見どうもありがとうございました。
No.5
- 回答日時:
この辺まで来るともはや設計の話になってきますな。
私だったらDB使いますね。
file名はどうするか(何を一意にするか)、fileが増えたときの対処は、mail送るごとにunlinkするのはHDDに環境に地球に優しくないし、permissionは、fileの形式はcsvなのかiniなのか
などと考えることが多いので避けます。
送信時間と本文、To、CC、BCCと一意のキーとしてuniqueな数字を入れるcolumnがあれば十分ですね。
あとcron起動はwgetを用いてわざわざhttpを介すよりも
* * * * * php /home/hoge/lib/mySendmail.php
としたほうが効率いいですよ。
その場合は相対パスだと動かないことに注意です。
必ず絶対パスを書くようにしましょう。
どうもご回答ありがとうございます。
DB使ったやり方もよいですね。
日時の変数もDB管理した場合、指定時間にプログラムを動かす仕組みがちょっと思いつかないですね。
参考になる回答を2つ頂いているので、ちょっと検討してみることにします。どうもありがとうございます。
No.3
- 回答日時:
悪いこと、と言ってもSPAM業者はphp介した送信なんてしないと思う
という突っ込みはだめですか(;>
通常業務でメルマガ発行の仕事だってありますし。
とりあえず私もcronを薦めておきます。
WindowsServerならbatファイルを書いてタスクに突っ込んでおけばよいかと。
関係ないのですがmailはeuc-jpだと(大半のクライアントアプリは)文字化けすると思いますよ。
記載ありがとうございます。
> 関係ないのですがmailはeuc-jpだと(大半のクライアントアプリは)文字化けすると思いますよ。
変更します。どうもありがとうございます。
OSはCentOSですので、CRONを利用した方法を検討してみます。
CRONだと一度変数を含めた文章をテキストに落として、メール送信のような形になるんでしょうか。
送信時間をHTMLより変数で渡そうと思っておりますが、それをCRONの設定ファイルに反映させるのって、無理っぽいですね。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
phpでメール送信できません 原...
-
PHPで、一度に大量のメールの送...
-
phpのheader("Location:#pos")...
-
.htaccessにphp_valueが使用できな
-
*.php、*.php3、*.phtmlの違い
-
mysql→EUC-JP、php→UTF-8の時の...
-
phpのextension_dirを複数指定...
-
phpの中でphpを書けないか
-
PHP PDOライブラリが読み込まれ...
-
mamp環境でのcronの使い方で困...
-
PHPでメールを受信するには?
-
再度、xamppにおけるjpgraphの...
-
セッションについての設定なの...
-
2つの画像ファイルが異なるファ...
-
require_once()でファイルが読...
-
PHP版のPDFlibのインストール
-
PHPのif文でその処理を途中で抜...
-
header(Location:~)で$_SESS...
-
PHPからMSSQLへの接続結果の文...
-
includeでHTMLファイルを呼出し...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA 添付ファイルをつけてメー...
-
さくらサーバーにて、phpからメ...
-
mb_send_mail でスパム扱いとなる
-
XAMPPでPHPのmb_send_mailが動...
-
excel VBAでメールを送る方法に...
-
ワードプレス 予約システム
-
phpでのメール転送(添付ファイ...
-
mb_send_mail関数が利用出来ない
-
PHPからメールを送る@さくらイ...
-
mb_send_mail内でif文を使いた...
-
指定した時間にPHPプログラムを...
-
phpでのメール送信
-
mail関数を使った場合のReturn-...
-
サーバーによってはmb_send_mai...
-
複数行の文字列をメールのヘッ...
-
if( mb_send_mail( ・・・) ) {...
-
ローカル環境でのメール送信
-
PHPからのメールがこない
-
mail関数に送信について
-
メール受信 件名が文字化け
おすすめ情報