- PR -

bashスクリプトからsendmailを送信する方法

1
投稿者投稿内容
ゆうすけ
会議室デビュー日: 2008/09/20
投稿数: 2
投稿日時: 2008-09-20 17:41
こんばんは。お世話になります。

上記の件でどなたかご教授ください。

毎日一回mySQLに登録されているレコードから特定の条件で抽出し(毎日変ります)それをメールで送信するという形をとりたいのです。

具体的には・・・
1.レコードの追加、修正等はウェブ上からPHPにて行っている
2.cronにPHPのmail関数でメール送信を行うスクリプト(mail.phpとします)を登録する
3.毎日cronから実行

を考えていたのですがweb上からmail.phpを実行すると送信されるのですが、
Poderosa等から端末を操作しmail.phpを実行してもエラーなしでメールの送信ができない状況です。

そのため、上記2.3.を
レコードの修正を行うたびにtxtファイルにでもレコードの結果を書いておき(PHPにて)、
bashでsendmailを含んだスクリプトでそのファイルを読み込みcronに実行してもらおうかと思っています。

sendmail自体は端末から実行できるわけですが、この際コントロールDを押す作業があるためシェルスクリプトから実行すると、ここで止まってしまいます。
また、テキストファイルから本文として内容を持ってくる方法も探しましたがよくわかりません。
サーバーはサクラレンタルサーバーを使用しています。

●自分でできること

PHP、MySQLの操作、文法
Linuxの「超」初歩的な知識(パーミッション設定がなにか、簡単なコマンドの実行)

●自分でわからないこと

Bashを使用して高度なプログラムを組む
Perl(個人的にはPerlで書けそうな気がするのですが、どうなのでしょう?一生懸命やれば自分で書ける気もするのですが、他に方法があるならパスしたいと思っています)

どなたか解決策をご存知の方よろしくお願いいたします。

PS.
専門でやっているわけでもなく趣味の世界ですのでお時間のあるときに答えていただければ幸いです。
気長に待ちますのでよろしくお願いいたします!
Java僧
ぬし
会議室デビュー日: 2003/11/06
投稿数: 261
投稿日時: 2008-09-20 19:49
これぐらいの複雑さになるとbashよりperlのほうが難易度は低いですよ。

「Poderosa等から端末を操作しmail.phpを実行してもエラーなしでメールの送信ができない状況」はどこまで調べましたか?
mail.phpはweb上で動くもののはずですが、どうやってPoderosa等から端末を操作しmail.phpを実行したんでしょう?

perlを習得するにもmail.phpがなぜ動かないのかを調べるのもどちらも一生懸命やることになりそうですが、自分ならまず、mail.phpの原因を調べます。
ゆうすけ
会議室デビュー日: 2008/09/20
投稿数: 2
投稿日時: 2008-09-21 00:39
早速のお返事ありがとうございます。

>mail.phpはweb上で動くもののはずですが、どうやってPoderosa等から端末を操作しmail.phpを実行したんでしょう?

>perlを習得するにもmail.phpがなぜ動かないのかを調べるのもどちらも一生懸命やることになりそうですが、自分ならまず、mail.phpの原因を調べます。

すみません。言葉足らずでした。MySQLにレコードを挿入するウェブからのプログラムとmail.phpは別のものです。

A.phpでレコード登録
B.phpでレコードを取り出しメール送信

のような形です。

もちろんA.phpはウェブ上からのものなのでPoderosaでは開けません^^;

B.phpをブラウザから直接読み込むとメールが送信される。
B.phpを
#!/usr/local/bin/bash

/usr/local/bin/php /home/***/bash/B.php
echo "sample"

のような形で実行するとsampleは表示されて実際にスクリプトは動作しているのにいつまでたってもメールが来ないことからPHPからのメール送信はできないのかなと思っていました。(実際、メール送信者がデフォルトではApacheになることからApacheを通してメールを送信する仕組みにPHPのmail関数がなっているみたいなので・・・)

確かにPerlだったら参考になるソースがいくつも出てくるんですよね。。。

この際思い切って挑戦してみようかとも思っていますが、もう少し色んな方からのご意見をお待ちしたいと思います。

[ メッセージ編集済み 編集者: ゆうすけ 編集日時 2008-09-21 00:43 ]
武史
ベテラン
会議室デビュー日: 2007/09/21
投稿数: 71
投稿日時: 2008-09-21 09:52
普通に bash から、mail コマンドはどうですか?
koji
常連さん
会議室デビュー日: 2004/11/04
投稿数: 36
お住まい・勤務地: 北海道
投稿日時: 2008-09-21 10:20
phpにはCGI版とCLI版があります。
/usr/local/bin/phpはCGI版かもしれませんね。
/usr/local/bin/php-cliがあればこちらに変更してみるとか
CLI版がインストールされているかどうかレンタルサーバーのサポートに
問い合わせてみてはいかがでしょうか。

別な案としてはwebからの動作で問題が無いのであれば
fetch http://localhost/***/***.php
wget http://localhost/***/***.php
lynx -dump http://localhost/***/***.php > /dev/null
こんな風にhttp経由で試してみたら動くかもしれません
Java僧
ぬし
会議室デビュー日: 2003/11/06
投稿数: 261
投稿日時: 2008-09-22 09:00
原因の推測はできているようですね。

kojiさんの書いているhttp経由がいいかな。
他にもw3mでも同じことができます。
w3m -dump http://localhost/***/B.php > /dev/null

それから、新しく習得するならRubyもいいですよ。
1

スキルアップ/キャリアアップ(JOB@IT)