以下、メール送信のプログラムがあるのですが、
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.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.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.3
- 回答日時:
悪いこと、と言ってもSPAM業者はphp介した送信なんてしないと思う
という突っ込みはだめですか(;>
通常業務でメルマガ発行の仕事だってありますし。
とりあえず私もcronを薦めておきます。
WindowsServerならbatファイルを書いてタスクに突っ込んでおけばよいかと。
関係ないのですがmailはeuc-jpだと(大半のクライアントアプリは)文字化けすると思いますよ。
記載ありがとうございます。
> 関係ないのですがmailはeuc-jpだと(大半のクライアントアプリは)文字化けすると思いますよ。
変更します。どうもありがとうございます。
OSはCentOSですので、CRONを利用した方法を検討してみます。
CRONだと一度変数を含めた文章をテキストに落として、メール送信のような形になるんでしょうか。
送信時間をHTMLより変数で渡そうと思っておりますが、それをCRONの設定ファイルに反映させるのって、無理っぽいですね。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP phpのメールフォームの完了画面でメール受信のコードを書いています。 1 2023/05/31 11:39
- PHP php 完了画面の送信メールのコードを書いているのですが・・・ 2 2023/06/02 12:01
- 英語 この"e-mail"が複数形でもなく、無冠詞なのはなぜですか? 「表現のための実践ロイヤル英文法」に 1 2022/07/10 16:12
- Gmail 【お助け!】サーバーからのメール送信でGmailに送信されない問題について 1 2023/06/20 22:03
- その他(プログラミング・Web制作) laravel 本番環境でメールが送れません。 1 2023/02/17 17:57
- Gmail 家から自分のg-mailで添付ファイル付きのメールを4通、職場の自分宛てに送りました。次の日に見ると 3 2022/09/08 12:35
- Gmail mail. 1 2023/04/26 18:00
- 消費者問題・詐欺 詐欺 5 2022/08/31 10:00
- その他(メールソフト・メールサービス) メールサーバーについて、自身のアカウントのサーバー占有量を知るには? 1 2022/07/16 16:51
- Gmail パソコンからLine へ加入手続きをとりたいのですが、・・・・・・・ 5 2022/07/24 14:19
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
php 完了画面の送信メールのコ...
-
メールフォームのタイトルが文...
-
指定した時間にPHPプログラムを...
-
PHPMailerのコードエラーが解決...
-
PHPからロリポップ!のメールサ...
-
ローカル環境でのメール送信
-
mb_send_mail関数が利用出来ない
-
mail関数を使った場合のReturn-...
-
こちらはただの直列処理ですか?
-
onedrive にexcelファイルをア...
-
フォントの色を変えるには?
-
VBでメールを送る時のSMT...
-
ワードプレスサイト PHP8.0.25...
-
FTPコマンドでディレクトリごと...
-
アップロード画像数でCSSを分け...
-
二重投稿防止方法
-
PHPのif文でその処理を途中で抜...
-
入力フォームの空白や改行を制...
-
php5のrename()は日本語をリネ...
-
sqlで日付が一番古いデータの月...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
php 完了画面の送信メールのコ...
-
さくらサーバーにて、phpからメ...
-
メールフォームのタイトルが文...
-
PHPsendmailにて送信元を変更
-
mb_send_mail関数が利用出来ない
-
PHPからロリポップ!のメールサ...
-
VBA 添付ファイルをつけてメー...
-
mailやmb_send_mail関数で、本...
-
sendmailでエラーがでます
-
PHPでの仮登録時の会員認証メー...
-
phpでメール送信できません 原...
-
mb_send_mail() 第 4、5 引数の...
-
PHPMailerのコードエラーが解決...
-
ローカル環境でのメール送信
-
PHPからメールを送る@さくらイ...
-
PHPでメールを送信するには
-
mb_send_mailについて
-
mail関数を使った場合のReturn-...
-
メールの本文をSmartyにしたい
-
サーバーによってはmb_send_mai...
おすすめ情報