以下のように、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 コマンドを使ってうまくメール送信するにはどうしたらいいでしょうか?

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2007/09/13 18:46:05
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答4件)

id:tezcello No.1

回答回数460ベストアンサー獲得回数69

ポイント23pt

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

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

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


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

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

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

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

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

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


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

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

id:co3k

全て本文となるのが仕様

それっぽいですね。

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

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

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

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

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

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

おっしゃるとおりです。

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

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

ありがとうございます。

2007/09/07 08:48:27
id:keino No.2

回答回数204ベストアンサー獲得回数11

ポイント23pt

コマンドラインを

>>>

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

<<<

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

>>>

sample

<<<

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

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

id:co3k

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

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

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

2007/09/07 08:49:28
id:tezcello No.3

回答回数460ベストアンサー獲得回数69

ポイント22pt

コマンドラインに拘らなければ、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 でファイル名を指定するものだと思っていたのですが。

id:co3k

php内でのメール送信が許されるなら、PHPのmail関数でもPEAR::Mailでもいくらでも手段はあるんですが、あくまで「PHP出力をパイプでメール送信したい」という内容なんですね。

まあ僕もsendmailを使いたいのですが……expectはちょっと見てみます。

php の -f は省略可能ですね。

-qオプションは、ヘッダ出力の抑制です。環境によっては

Content-Type: text/html

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

2007/09/07 13:17:46
id:keino No.4

回答回数204ベストアンサー獲得回数11

ポイント22pt

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

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

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

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

id:co3k

はい、そうですね。

2007/09/08 22:28:56

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません