人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

以下のように、PHPから出力される内容を mail コマンドを使ってメール送信したいと思います。
>>>
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 コマンドを使ってうまくメール送信するにはどうしたらいいでしょうか?

●質問者: 海老原昂輔
●カテゴリ:インターネット ウェブ制作
✍キーワード:example.com PHP sendmail test コマンド
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● tezcello
●23ポイント

http://www-cms.phys.s.u-tokyo.ac.jp/~naoki/CIPINTRO/CCGI/sendmai...

はっきりとは記憶していませんが、mailコマンドはオプションでsubject を指示するようですが、標準入力で Subject: を渡してやるとそのように対応してくれましたっけ?

全て本文となるのが仕様では?


質問の例では、何がどのヘッダに差し込まれたかが判りませんが、

ヒョッとして、(今ログインしているユーザ名)@(マシンのホスト名)が自動的に(強制的に)セットされる From: にセットされているのでは?

コマンド列の最後の送信先はチャンと To: に出ていませんか?

指示していないので Subject: は空欄のまま。

で、PHPから渡したものが全て本文に。

という事になっていませんか?


もしそうなら、PHPからは本文だけパイプで渡せばよいと思います。ただし、Subject: From: はコマンドラインで入れなければなりませんが。

もともと対話型のインターフェイスなので、sendmail と全く同じ(パイプで渡してやる)とはいかないのでは?

◎質問者からの返答

全て本文となるのが仕様

それっぽいですね。

質問の例では、何がどのヘッダに差し込まれたかが判りませんが、

ヒョッとして、(今ログインしているユーザ名)@(マシンのホスト名)が自動的に(強制的に)セットされる From: にセットされているのでは?

コマンド列の最後の送信先はチャンと To: に出ていませんか?

指示していないので Subject: は空欄のまま。

で、PHPから渡したものが全て本文に。

という事になっていませんか?

おっしゃるとおりです。

PHPからは本文だけパイプで渡せばよいと思います。ただし、Subject: From: はコマンドラインで入れなければなりません

ああ、やっぱりそういう結論になってしまうんでしょうか……。

ありがとうございます。


2 ● keino
●23ポイント

コマンドラインを

>>>

php -q test.php | mail -s sample example@example.com

<<<

PHPから出力される内容を以下のようにする。

>>>

sample

<<<

とするのでは駄目なのでしょうか?

http://freebsd4-jman.kandk.co.jp/1/mail.1.html

◎質問者からの返答

とするのでは駄目なのでしょうか?

駄目なので今回の質問をしたんですが、どうやら無理っぽいですね。

ありがとうございます、たぶんそのようにすると思います。


3 ● tezcello
●22ポイント

コマンドラインに拘らなければ、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

などのヘッダが強制的に出力されるので、それを抑止するのに使っています。


4 ● keino
●22ポイント

どうして sendmail ではなく mail コマンドという本来対話型のコマンドを使用しなくてはいけないのかが理解できません。

mail コマンドの使用を希望している人に十分に説明して、sendmail や postfix などの MTA を直接起動する方法を採用するように説得する方がいいと思います。

その方が、本文のあて先などとは違うあて先に配布するなど、いろいろ細かい制御も可能だし、いいと思います。

http://www.hde.co.jp/press/column/detail.php?n=200703140

◎質問者からの返答

はい、そうですね。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ