>>>
php -q test.php | mail example@example.com
<<<
PHPから出力される内容は、たとえば以下です。
>>>
From: example@example.com
Subject: sample
sample
<<<
sendmail コマンドの場合はこれで正常に送信できるのですが、mail コマンドだとうまく行かず、以下のようにヘッダが強制的に付加されてしまいます。
>>>
From: example@example.com
To: example@example.com
Subject:
From: example@example.com
Subject: sample
sample
<<<
上のPHPからの出力を、 mail コマンドを使ってうまくメール送信するにはどうしたらいいでしょうか?
http://www-cms.phys.s.u-tokyo.ac.jp/~naoki/CIPINTRO/CCGI/sendmai...
はっきりとは記憶していませんが、mailコマンドはオプションでsubject を指示するようですが、標準入力で Subject: を渡してやるとそのように対応してくれましたっけ?
全て本文となるのが仕様では?
質問の例では、何がどのヘッダに差し込まれたかが判りませんが、
ヒョッとして、(今ログインしているユーザ名)@(マシンのホスト名)が自動的に(強制的に)セットされる From: にセットされているのでは?
コマンド列の最後の送信先はチャンと To: に出ていませんか?
指示していないので Subject: は空欄のまま。
で、PHPから渡したものが全て本文に。
という事になっていませんか?
もしそうなら、PHPからは本文だけパイプで渡せばよいと思います。ただし、Subject: From: はコマンドラインで入れなければなりませんが。
もともと対話型のインターフェイスなので、sendmail と全く同じ(パイプで渡してやる)とはいかないのでは?
コマンドラインを
>>>
php -q test.php | mail -s sample example@example.com
<<<
PHPから出力される内容を以下のようにする。
>>>
sample
<<<
とするのでは駄目なのでしょうか?
とするのでは駄目なのでしょうか?
駄目なので今回の質問をしたんですが、どうやら無理っぽいですね。
ありがとうございます、たぶんそのようにすると思います。
コマンドラインに拘らなければ、PHP内で mail にオプション付でパイプで渡すのは可能では?
そうすれば Subject: もチャンと出来るでしょうし。
exec('php -f test.php | mail -s '.$subject.' fuga@hoge.com');
な感じで。(未確認です。ごめんなさい)
sendmail が使えない理由は分りませんが、 どしても mail なら、シェルスクリプトのなかで、expect というコマンドを使ってやれば対話型の処理系をプログラムする事も出来ます。
http://www.linux.or.jp/JM/html/expect/man1/expect.1.html
ところで、php の -q って何でしょう?
僕は上記のように、-f でファイル名を指定するものだと思っていたのですが。
php内でのメール送信が許されるなら、PHPのmail関数でもPEAR::Mailでもいくらでも手段はあるんですが、あくまで「PHP出力をパイプでメール送信したい」という内容なんですね。
まあ僕もsendmailを使いたいのですが……expectはちょっと見てみます。
php の -f は省略可能ですね。
-qオプションは、ヘッダ出力の抑制です。環境によっては
Content-Type: text/html
などのヘッダが強制的に出力されるので、それを抑止するのに使っています。
どうして sendmail ではなく mail コマンドという本来対話型のコマンドを使用しなくてはいけないのかが理解できません。
mail コマンドの使用を希望している人に十分に説明して、sendmail や postfix などの MTA を直接起動する方法を採用するように説得する方がいいと思います。
その方が、本文のあて先などとは違うあて先に配布するなど、いろいろ細かい制御も可能だし、いいと思います。
はい、そうですね。
それっぽいですね。
おっしゃるとおりです。
ああ、やっぱりそういう結論になってしまうんでしょうか……。
ありがとうございます。