PDA

View Full Version : php + sendmail


Kaoru
2002/05/05, 01:46 AM
php + sendmail を利用して、ユーザーがパスワードを忘れてしまったときに、パスワードをメール送付するシステムを作ろうとしています。テストとして自分のアドレスにメールを送っているのですが、一向にメールが届きません。エラーは表示されていないので、もしかするとphpの問題ではないのかもしれませんが、おわかりの方がいらっしゃいましたら教えてください。

以下、メール送付にかかわる部分のスクリプト

$mp = popen("/usr/sbin/sendmail -t", "w");
fputs($mp, "From: $from\n");
fputs($mp, "To: $to\n");
fputs($mp, "Subject: $subject\n");
fputs($mp, "\n");
fputs($mp, "$body\n");
pclose($mp);

なお、お分かりと思いますが

$from, $to, $subject, $bodyはそれぞれ

送付元アドレス、送付先アドレス、メールの題名、本文

です。中身は期待したとおりに入っていましたので、変数に格納するまでにエラーはないとは思うのですが。

実はphpは触り始めて一週間ほどなので、今だよくわかっていません。なにかとても初歩的なミスかもしれないのですが、すみません、よろしくお願いします。

Hamster
2002/05/08, 10:32 AM
それって、PHPなどの問題ではなくて、Return-Path: が無い事で
テストで受け取ろうとしているPOPサーバが拒否しているんじゃないかな?
最近は、Return-Path: 入れていないと受け取れないメールサーバが
ほとんどですよ。(まとはずれだったらごめんなさい)

Kaoru
2002/05/09, 08:05 PM
アドバイスありがとうございます。
どうやらHamsterさんのおっしゃるとおり、メールのヘッダー部分がいたずらをしているような気がします。ただ、ネット上でいくつかメールのヘッダーの設定の仕方を調べてみたんですが、設定の仕方を具体的に説明しているところはあまりなく、ちょっと手づまりになってしまいました(ヘッダーの読み方と意味を解説しているところは多いんだけど、、、)。
いくつかのサイトを見ながらヘッダーの設定をいろいろいじってみたのですが、いまだに状況は変わっていません(phpのエラーは出ないんですが、肝心のメールが届かない)。
ここらへんの設定に詳しい方がいらっしゃいましたら、どうぞよろしく教えてください。お願いいたします。

johnny
2002/05/10, 09:55 PM
普通にmail 関数使ったらダメなんですかね(^^;;
PHP4なら、mb_send_mailかなりGOODですが・・・

どーしてもsendmailでしたらすんません(^^;;

Kaoru
2002/05/11, 12:11 AM
johnnyさんのおっしゃるとおり、mail関数で書くのがやはり便利ですね。

実はmail関数については知っていたのですが、下のような理由で今回はsendmailを使おうかと思ったのです。

1、将来的にいろいろといじれた方が便利かと(データーベースの内容を圧縮した上で添付ファイルとして送信するなど)
2、普通にmail関数を使うと、メールに返信されたときに自分のアドレスに届かない(mail関数でヘッダを追加できることを知らなかったんです、スミマセン)

よく調べてみたらどれもこれもmail関数で実現できることでした。あんまり考えずに「sendmailが用意されているんだから、sendmailを使う」ものと思い込んでいました。

知識不足で空回りしてしまいました。助けてくださった方々、ありがとうございます&ごめんなさい

mb_send_mailでコードを書き直した結果、ちゃんと思いどおりに動作してくれました。あまりたいしたものではないのですが、私と同じくらいphp初心者の方で参考にされる方がもしかするといらっしゃるかもしれないので、コードを残しておきます。

$msend = mb_send_mail($to, $subject, $body, "From: $from\nReply-To: $from\nX-Mailer: PHP/" . phpversion());

 あらかじめ$to, $subject, $body, $fromの各変数には、それぞれ、あて先のアドレス、メールの件名、メール本文、メールの送信者のアドレス(返信先のアドレスとしても使われます)を格納しておきます。それぞれ勝手にエンコードしてもらえますが、もしフォームなどから入力したデーターをアドレスなどに使われるのなら、あらかじめtrim()などしておいた方がよいかもしれません。
 なお、変数$msendにはメール送信に成功した場合にはTRUE、失敗した場合にはFALSEが格納されます。成否によってメッセージなどを分岐させたい場合に使ってください。必要なければ「$msend = 」の部分を外してしまってもかまいません。

それではHamsterさん、johnnyさん、その他の方々、どうも初歩的な質問に付き合ってくださいましてありがとうございました。

johnny
2002/05/11, 12:30 AM
Kaoruさん、ごくろうさまでした。

PHPで添付ファイル、という事ですが、
http://www.itboost.co.jp/php/index.php
ここのメール関連当たりを読むと幸せになれそうです

既にご存知でしたらすみません(^^
これで、ログファイルをzipで圧縮してメールに添付して送信、みたいな事をやった事がありますです。

既にご存知かもしれませんが一応 ^^