- ベストアンサー
CentOS7×apache×php メール送信のトラブルシューティング
- CentOS7×apache×php メールを送信できない問題の解決方法を教えてください。現在、「メール送信に失敗致しました。」というエラーメッセージが表示されています。クライアントPCはWindows10で、サーバにはCentOS7とapacheとphpがインストールされています。SMTPの設定やポート番号などを確認し、何か他に解決すべきことがあれば教えてください。
- 目標は、ブラウザで参照した際に「メール送信に成功致しました。」と表示され、実際にメールが届くことです。メールアドレスはadr@yahoo.co.jpを送信先に使用しています。また、サーバにはさくらインターネットで作成したadr@独自ドメイン.jpも用意されています。
- 現在の設定ではメール送信がうまく動作していません。smtpの設定やポート番号、認証方法などを確認し、正しく設定されているかどうかを確認してください。また、設定変更後に再度メール送信を試みてください。メール送信に関するエラーメッセージが表示される場合は、その内容も教えていただけると助かります。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>メーラー機能を持ったライブラリが存在するのですね。 > >それを追加すればpostfix(のようなモノ)は必要ないのですね? ライブラリを使うときに送信用のクラスに外部のSMTP(と認証)の情報を渡します。なのでローカルには何も必要ないです。 phpでMUA(メールクライアント)を作って、SMTPなどの情報をメーラに設定するのと同様にphp(メールライブラリを使うソース)でも設定するだけですね。 ローカルにMTA(Postfixなど)を入れてもそこからどうやって投げるのか(相手先にスパムと判定されて拒否されずに済むか)はけっこう難題です。そのあたりのスキルがないのであればphpmailerなどのライブラリに頼るべきです。
その他の回答 (3)
- superside0
- ベストアンサー率64% (461/711)
ホスティングサーバーやレンタルサーバーでなら割りと簡単ですが、 自宅サーバーということだと 最近はプロバイダにより25番ポートがブロックされている ことが多いので この場合、単にpostfixをインストールしただけでは、 外部ドメイン宛(つまり別のメールサーバー宛)のメールは届かないことになります。 (ローカルのドメイン宛なら届きますが) このようにスパム不正発行の対策でOP25Bされている自宅のLinuxサーバーから PHP でメールを送りたいとなると 外部のSMTPサーバー(gmailとかyahooとか自分のプロバイダのとか)に対して SMTP認証でメール中継を許可させた上で、メール送信を代替わりしてもらう必要があります。 ただ WindowsのPHPだとphp.iniでSMTP認証の設定が出来るのですが Linuxでとなると ・MTA(postfix)をインストールして postfix側で外部のSMTPサーバーにSMTP認証して送信中継を丸投げする設定を 行っておいてから、PHPの mb_send_mail() では、localhostに送信する または、先にご回答のある通り ・mb_send_mail ()を使うのではなく、外部のSMTPサーバーが指定できるライブラリを使う のどちらかになるでしょう。 余談ですが、このようにしてメール中継を使えば無制限にメールが送れる という訳ではなく、はやり大量にスパムやメルマガを発行すると 外部のSMTPサーバー側で検知されて、 そのSMTP認証アカウントが 凍結(停止)されることになりますし、 ReceivedのIPアドレスがブラックリストに載ることになります。 また、プロバイダでは、Fromのアドレスやドメイン名の制限をしている SMTPサーバーもあります。 この場合、プロバイダのドメインに関係のない、自分の所有している独自ドメイン名を Fromにしてメール送信することは、できないことになります。
お礼
有難うございます。 >外部のSMTPサーバー(gmailとかyahooとか自分のプロバイダのとか)に対して >SMTP認証でメール中継を許可させた上で、メール送信を代替わりしてもらう必要があります。 なるほど、少しわかってきました。
- agunuz
- ベストアンサー率65% (288/438)
あぁ。すみません。ざっくりとしか読んでなかった(汗 >外部smtpからメールを送信する事は可能ですか?不可能ですか? 素のphp「だけ」じゃ無理です。基本的にはメールを「ローカルにあるメールを送信する機能」に丸投げすることしか出来ません。込み入ったことをしようとすれば外部ライブラリ(phpmailer)が必要です(なのでWordpressはphpmailerを取り込んだ)。 外部SMTPを使うとなると認証やらなにやらやることが多いですが、巣のphpにはその設定を書くようなところもないです。 (蛇足) オールインワンパッケージ(Apache+php+MySQL)のxamppでは専用のsendmailプログラムが付属してたりします(php.iniでそのプログラムを指定すれば有効になる)。そのsendmailプログラムの設定ファイル(sendmail.ini)でSMTPの指定や認証関係の設定が出来るようになっていたハズです。
お礼
>素のphp「だけ」じゃ無理です。 >外部ライブラリ(phpmailer)が必要です。 メーラー機能を持ったライブラリが存在するのですね。 それを追加すればpostfix(のようなモノ)は必要ないのですね?
- agunuz
- ベストアンサー率65% (288/438)
>postfixなどは入っていないとします。 SMTPは何も入っていないのですよね?だとしたら >SMTP = localhost localhostがそもそも誤りですね。 パスワード認証が不要なSMTPはないんでしょうか?php.iniではSMTP名とポート番号しか設定はないので、認証が必要だとmail()関数では厳しいです。接続に使っているISPのメールアカウントは使えませんか(一般的にISPの接続内からなら認証不要なので)。 質問者さんの環境で認証不要で使えるSMTPが存在しなければ、phpmailerなどのライブラリを使うことになります(phpmailerはWordpressに組み込まれているメール送信ライブラリで認証などの設定も可能)。 というかCentOSなどではpostfixやsendmailをインストールするのが普通だと思いますけどね(外部SMTPに丸投げするにしても細かい部分はそっちで面倒をみる)。SMTPを指定するのは(php.iniに書いているとおり)「Win32 only」なので…
お礼
有難うございます。 >localhostがそもそも誤りですね。 いや、そっちはビフォーの方です。 アフターは SMTP = smtp.mail.yahoo.co.jp です。 変更前を書いたのはややこしかったでしょうか。 >接続に使っているISPのメールアカウントは使えませんか yahooのメールか さくらインターネットで作成したメールアカウントではダメですか? >というかCentOSなどではpostfixやsendmailをインストールするのが普通だと思いますけどね(外部SMTPに丸投げするにしても細かい部分はそっちで面倒をみる)。SMTPを指定するのは(php.iniに書いているとおり)「Win32 only」なので… やりたい事は、phpからメールを送るという事なのですが、何と何が必須で必要なのかが分かっていません。 で、前回、postfixなどのメールサーバは必須なのか必要ないのかを重点に聞いてみたのですが、「必須でない」という回答が付きました。 phpからメールを送信したいです。 https://okwave.jp/qa/q9397977.html それを鵜呑みにしていたのですが、 どうやらpostfixのようなモノは必須のようですね。 ご指摘の通り「Win32 only」と書いている部分は、機能しなくて、その下の「Unix only」のところが勝ちます。 ; For Unix only. You may supply arguments as well (default: "sendmail -t -i"). ; http://php.net/sendmail-path sendmail_path = /usr/sbin/sendmail -t -i postfixをアンインストールすると、 /usr/sbin/sendmailが消えるので、メールが飛ばない以前にphp側でエラーになり、「メール送信に失敗致しました。」となります。 これが、この質問当初の状態です。 postfixをインストールすると、 sendmail_path = /usr/sbin/sendmail -t -i の部分が生きるので、postfix側の設定は全く何もしなくても、php側では投げた事で満足して、「メール送信に成功致しました。」となります。 ただし、postfixの設定はしていないのでメールは届きません。 ここで、質問です。 CentOS7×apache×phpのみで 外部smtpからメールを送信する事は可能ですか?不可能ですか? postfix(のようなもの)は必須ですか? postfixを使うやり方は別途、質問を立て直します。 ここでは、 CentOS7×apache×phpのみで 外部smtpからメールを送信する事は可能ですか?不可能ですか? の答えと、もし可能であればその方法が知りたいです。
お礼
有難うございます。 phpmailerに絞って試してみます。