日本PHPユーザ会 掲示板

日本PHPユーザ会運営の掲示板です。※ただいまテスト運用中です。

日本PHPユーザ会 掲示板 » PHP事はじめ » sendmailがわかりません

sendmailがわかりません

ページ: 1

投稿者 投稿
会員
登録者: 3 2008
返信数: 11
こんにちは、はじめまして。
phpをインストールして勉強中です。
バージョンは「PHP Version 5.2.5」、OSはwindowsXPです。
ソーテック社の「実践マスターPHP+MYSQL」を見ながらやっていますが、メール操作でsendmailが設定できません。ソース的には大丈夫ですが、
SMTP = 127.0.0.1
sendmail_path =/user/sbin/sendmail -t -i
と設定したのですが、このパスにあたるファイルがない状態です。
インストールが失敗しているのでしょうか。
本には「PHPインストール時にsendmailが存在している必要があります」と書かれています。
教えてください!お願いします!
会員
登録者: 10 2007
返信数: 71
PHPでのメールの設定は、WindowsとUNIX系とでは少し違いますね。Windows用の設定はいくつかパターンがあります。

1. PHPをメールソフトのようにしてしまう場合
[mail function]
; For Win32 only.
SMTP = ローカルなメールサーバやプロバイダ等のSMTPサーバの場所
smtp_port = 25

; For Win32 only.
sendmail_from = あなたの@メールアドレス等

; For Unix only. You may supply arguments as well (default: "sendmail -t -i").
;sendmail_path = (コメントにして無効にします)
PHPがメールソフトのようになりますので、セキュリティソフトに引っかかる場合や、メールサーバの仕様によってはうまくいかないかもしれません。ネットワーク的にPHPがメール送信できる状態ならば可能です。

2. UNIX系と同じようにsendmailを使う方法
前もってsendmail互換のメールソフトをインストールしておいて下さい。もともとWindowsにはsendmailというプログラムは入っていません。当然そのパスにあたるファイルがない状態になってしまいますので、自分でsendmailを用意するのです。確か「sendmane」というフリーソフトを使ったことがありますので検索してみて下さい。
[mail function]
; For Win32 only.
;SMTP = (コメントにして無効にします)
;smtp_port = 25(コメントにして無効にします)

; For Win32 only.
;sendmail_from = あなたの@メールアドレス等

; For Unix only. You may supply arguments as well (default: "sendmail -t -i").
sendmail_path = sendmail互換のメールソフトのパス
こちらも同じようにsendmail互換のメールソフトがメール送信できるようにする必要があります。

間違いがあったらご指摘下さい。
会員
登録者: 3 2008
返信数: 11
kona@mさん、ありがとうございます。
本にはすぐ下に「PHPインストール時にsendmailが存在している~」となっていましたが、こちらはLinuxの場合だったのですね。(まぎらわしい・・・)
WindowsでPHPがメールソフトのように~で設定してみましたが、今度は別の問題がでました。
「Warning: mb_send_mail() [function.mb-send-mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\Program Files\Apache Group\Apache2\htdocs\test.php on line 48」
と、mb_send_mail関数がない・・・というメッセージがでてしまいました。
php.iniの設定ということになると思うのですが、昨日は実際にメールが送られないだけで、symtaxエラーはでていませんでした。

こちらももしおわかりでしたら、教えていただけますでしょうか。
よろしくお願いします。
会員
登録者: 10 2007
返信数: 71
あらら。
エラーメッセージを見ると、「mb_send_mail()実行の際にメール(SMTP)サーバ”localhost”、ポート25への接続に失敗しました。php.iniのメール(SMTP)サーバと通信ポートの設定を確認して下さい」のようです。

まず、メール(SMTP)サーバを"localhost"に設定しているとしたら、localhost→apacheとPHPが動いているマシンはメール(SMTP)サーバとして動作しているのでしょうか?
それとも「とりあえずlocalhostにしてみたのですが」というのでしたら、php.iniのSMTP=をプロバイダのメールサーバ(SMTPのほう)とかに設定しなおす必要がありますね。ただ最近のメールサーバはPOP before SMTPだったりパスワードが必要だったりするので、「メールソフトのような」この方法は使えないかもしれませんね。 :'(
会員
登録者: 3 2008
返信数: 11
kona@mさん、ありがとうございます。

>ocalhost→apacheとPHPが動いているマシンはメール(SMTP)サーバとして動作しているのでしょうか?
→メールサーバとして動かしていません。

>php.iniのSMTP=をプロバイダのメールサーバ(SMTPのほう)とかに設定
→こちらに設定してみたら、下記メッセージが。。。
Warning: mb_send_mail() [function.mb-send-mail]: SMTP server response: 554 <xxxxx@xxx.xx.xx>: Relay access denied in C:\Program Files\Apache Group\Apache2\htdocs\test.php on line 48

腑に落ちないのは、以下のように先日設定していてメールが送られない。。。ことで悩んでいたので新たなメッセージは一体なんだろう?という感じです。
SMTP = localhost
smtp_port = 25
sendmail_from = yyyy@yyy.yyy
;sendmail_path =

「sendまね~る」を使ったほうが良さそうな感じですかね?
「sendまね~る」を使うのは一般的に有効なのでしょうか?(変な質問だったらすみません、何しろ初心者なので。。。)
会員
登録者: 10 2007
返信数: 71
う~ん、ちょっと予想はしていたのですが、「メールサーバからメール転送拒否(Relay access denied)が通知された」というエラーメッセージですので、PHPからプロバイダのメールサーバに直接メール送信することができないようですね。

どうもsendmail互換プログラム「sendまね~る」を使ってみる必要がありそうです。この方法を実際に使ったことが無いのですが、似たような環境がありますのでこちらでもちょっと試してみますね。

このソフト、最初に使う前に1度だけコマンドプロンプトからメール送信の設定をするのですが、普通のメールソフトと同じような設定にできますので、同じ設定にします。
会員
登録者: 10 2007
返信数: 71
こちらはうまくいきました :) 。php.iniは下記のとおりです。試してみてもらえますか?

OS: Windows XP SP2
Webサーバ: Apache 2.0.63 Win32バイナリ
PHPバージョン: 5.2.5 Win32バイナリ(Apache2モジュール動作)
sendまね~る Ver. 0.93 (C:\bin\sendmane.exeとして置いてみました)

[mail function]
; For Win32 only.
;SMTP = localhost
;smtp_port = 25

; For Win32 only.
;sendmail_from = me@example.com

; For Unix only. You may supply arguments as well (default: "sendmail -t -i").
sendmail_path ="C:\bin\sendmane.exe -t -i"

最後の「-t -i」を忘れると動かないので注意して下さい。
会員
登録者: 3 2008
返信数: 11
kona@mさん、ありがとうございます。

C:\sendmane>sendmane

SMTPサーバのアドレス?(IPを奨励)
[]:127.0.0.1

SMTPポート番号?(通常は25)
[]:25

送信者のメールアドレス?
[]:user@example.com
※↑任意のアドレス

SMTP認証の使用 Yes=1 No=0 ?
[]:0
SMTP認証のユーザー名?
[]:user

SMTP認証のパスワード?
[]:password
-------------------------------------------------
上記のように設定し、同梱のテキストに下記コマンドラインをタイプするとメールが送信されるとあり、
C:\sendmane>type sendtest.txt | sendmane [送信するメールアドレス]

やってみたのですが、
-------------------------------------------
Sendmail.exeでエラーを検出しました。
Error:サーバへの接続失敗
-------------------------------------------
となってしまいます。

無知なので、設定方法がよくわかっていないのだと思います。
こちらのローカル環境でsendmailを使ってテスト(勉強)でやってみているのですが、
「SMTP認証のユーザー名/パスワード」などはローカルで行う場合は、例の通り「user/password」では
だめなのでしょうか?
会員
登録者: 10 2007
返信数: 71
honyoさんが普段使っているメールソフトの設定と同じ内容で、sendmaneの設定を行ってみて下さい。プロバイダのメールをお使いならば、そのメール設定です。

なぜ127.0.0.1を指定してもダメかというと、127.0.0.1はそのマシン自身を指すアドレスです。「apacheとPHPをインストールしてテストしているマシンはメールサーバの機能がない」ということでしたので、当然このアドレス127.0.0.1はメールサーバではありません。どう頑張っても接続は失敗してしまい、メール送信できないわけです。(もし私がそちらの状況を勘違いしていたらごめんなさい)

というわけで、身近なメールサーバはというと、honyoさんがお使いのプロバイダのメールのサーバがあると思いますので、これを使えばとりあえず解決できると思ったわけです。
私はたまたまメールサーバ機能付きのレンタルサーバを借りていましたので、sendmaneの設定は次のような設定にしました。プロバイダのメールサーバの場合も(多少違いはあっても)同じように設定するはず。プロバイダのサーバが使えればわざわざレンタルする必要もありません。
――――
SMTPサーバのアドレス:レンタルサーバのメールサーバ
SMTPポート番号:通常は25ですがこのサーバでは別の番号でした
送信者:そのメールサーバで登録したメールアドレス
SMTP認証:無かったので設定しませんでした
POP before SMTP:送信前に受信するルールになっているので(次に続く)
POP3サーバの設定:そのメールサーバ(SMTPサーバと同じでした)と、IDとパスワード
――――
最近はSMTPポート番号が25でないプロバイダが増えています。

もしかしたらメールサーバを127.0.0.1で設定するというのは、UNIX系での説明ではありませんか? UNIX系のマシンはメールサーバの機能が入っていることが多いので、そのような説明になっているかもしれません。Windows Server等ではメールサーバの機能があるはずですが、Windows XPではあまり聞いたことが無かったので現実的ではなさそうです。

どうでしょうか。もうちょっとだと思いますので頑張ってみて下さい。
会員
登録者: 3 2008
返信数: 11
kona@mさん、ありがとうございます。

私は、現在会社内で時間をもてあましている状況で、その間phpを勉強をしてます。
先週来、会社のメールでやってみてだめだったので、yahooメールで設定してみたり、色々試行錯誤してやってみているのですが、
やっぱりどうやってもメール送信はできない状態です。
(ちなみに会社のメール、yahooメールともにIPはわかならないので、smtp.mail.yahoo.co.jp等の設定を入力しました。)

もしかしたら会社なので、何らかのセキュリティーでできないのかも!?と思います。
とりあえず、この部分で詰まって途中になってしまうのであれば、勿体無いので先に進むことにします。

無知な私に何度も丁寧に教えていただき、ありがとうございます。
また他の事でわからなくなったら、教えてください。
よろしくお願いいたします。

ページ: 1

日本PHPユーザ会 掲示板 » PHP事はじめ » sendmailがわかりません

日本PHPユーザ会 掲示板 は UseBB 1 フォーラムソフトウェア を使用しています