- ベストアンサー
データーが更新されたらSendmailで自動送信
データーが更新されたらSendmailで自動送信 全くの初心者です。 phpかcgiでサーバーのtextファイル又はmysqlのデーターが更新されたらSendmailで 自動でメールを送信(配信)して「更新されました」とか通知されるような フリーでシンプルなプログラムを探しています。 ダウンロードできるところはありませんか? またはそのままペーストして使えるようなプログラムを教えて頂けませんでしょうか? どうかよろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> phpかcgiでサーバーのtextファイル又はmysqlのデーターが更新されたらSendmailで > 自動でメールを送信(配信)して「更新されました」とか通知されるような > フリーでシンプルなプログラムを探しています。 > ダウンロードできるところはありませんか? 質問文を読む限り、前の回答者様が答えた返答は的外れに感じました。 その返事に書かれている事で大部分実現できているように感じました。 #このままペーストしてhtmlを更新しても動きませんでした。 質問には『サーバーのtextファイル又はmysqlのデーターが更新されたら』とありましたが、『htmlを更新』でメールがくるように希望しているのでしょうか。その場合は別途htmlの更新を監視する必要があります。(前の回答者様の回答はこういう場合の回答ですね) #このphpのアドレスをブラウザでリロードすると一応メールは来るのですが、 #中身は白紙でした。 これで、メールがきているので大部分できているのではないでしょうか。 『サーバーのtextファイル又はmysqlのデーターが更新されたら』というのは、そのページに書かれているformの処理か何かで更新すると仮定しての話ですが。 後はタイトルとメッセージが入ってくる様に調整すれば良いだけなのでは。 その部分は、日本語文字に関する設定で調整可能かと思います。(mbstring) 現在の設定内容が書かれてませんので、前の回答に貼り付けてあった日本語文字列の扱いに関する部分が妥当か妥当でないかもわかりませんが。 その辺りの調整で調整できるかと思います。 <?php phpinfo(); ?> 上記内容のテキストをサーバに配置してそのファイルをアクセス、mbstring関連の設定を確認してください。 phpファイルの漢字コードとスクリプトエンコーディングが合致してなく、ソース中に書いた文字データが正しく扱われてないだけかも知れません。 mbstring.script_encoding はどんな値になっているでしょうか。 あと、 :: // 一度送ったらもう送らない :: if(!file_exists("sended.txt")) { という所は正しいでしょうか。何でも一度送ったら、二度と送らない(再表示で一度送ったからもう送られないかも)な処理に見えますが。ここはテキストファイルの更新やデータベースの更新を検出して更新した場合に送るように変える必要があるのではないかな。もしくは、処理したら毎回更新する[ if(!file_exists~) を削除してしまえば良さそう]で良いのではないかな。 :: $fco = fopen("sended.txt","w"); これも、通常はログファイルって追記すると思いますが、最後の一回だけの記録に毎回更新する事になりそうです。そういう処理で良いのでしょうかね。確認されると良いかと思います。 http://php.net/manual/ja/mbstring.configuration.php http://www.php.net/manual/ja/function.mb-send-mail.php http://manual.xwd.jp/ref.mbstring.html
その他の回答 (1)
- yambejp
- ベストアンサー率51% (3827/7415)
RSSを設定しておいて、定期的にcronでチェックしてメールするとか 複合した技術になるので、ひとつひとつクリアしていった方が かえって早道だとおもいますが・・・
補足
ご回答頂きましてありがとうございます。 RSS配信を考えましたが、.htaccess認証ディレクトリの為できないようでした。 cronというものも始めて知りましたが、.htaccess認証ディレクトリからでもできるのでしょうか? Sendmailではなく、 またhtml更新のメール通知のプログラムの様ですが、 下記のwebページのphpを見つけたのですが http://www.geocities.jp/maple4estry/lost_source5.html 下記内容です。 <?php // チェック先 URL $check_url = "http://www.ほげ.com/"; // 更新で削除されそうな文字列正規表現 $check_str = "2005/1/14 17:15 更新"; // チェック先 HTML の文字コード $check_charset = "SJIS"; // このシステムが動く文字コード (Fedora なので UTF-8) $system_charset = "UTF-8"; // 更新通知先メールアドレス $mail_address = "hoge@もげ.com"; // システム文字コードを PHPに設定 mb_language("ja"); mb_internal_encoding($system_charset); // HTTP で対象サイト HTML 取得 if(!$fno = fopen($check_url, 'r')) { die("$check_url を開くことができませんでした"); } // HTML から更新チェック用文字列を探す $find = false; while($line = fgets($fno)) { // 取得 HTML の文字コードをシステムに一致させる $line = mb_convert_encoding($line, $system_charset, $check_charset); if(ereg($check_str, $line)) { $find = true; break; } } fclose($fno); // 文字列が発見できなかったら更新と見なしてメール送信 if($find == false) { // 一度送ったらもう送らない if(!file_exists("sended.txt")) { mb_send_mail($mail_address, "更新通知", "$check_url が更新されたよ。" ); // メール送ったら送信時間を書いたファイルを作成しておく $fco = fopen("sended.txt","w"); $today = date("Y/m/d l H:i:s"); fputs($fco, $today . "\n"); fclose($fco); } } ?> このままペーストしてhtmlを更新しても動きませんでした。 このphpのアドレスをブラウザでリロードすると一応メールは来るのですが、 中身は白紙でした。 このようなプログラムを動くようにするのは どうすればよろしいのでしょうか? それとも私は何か大きな勘違いをしてるのでしょうか? たくさん捕捉させて頂いて本当に申し訳ありませんが、 どうかよろしくお願いいたします。
お礼
saijyo_739 様 ご回答ありがとうございます。 たくさんヒントを頂きまして大変感謝いたします。 教えていただいた通り formの処理でこれが動いてメールを発信するように組み込めば これでできそうですね。 私にできるかどうか、なかなか難しいですが。。 分からないなりにがんばってやってみます。 本当にありがとうございました。 又何かありましたら是非よろしくお願いいたします。