- ベストアンサー
【解説】PHPからメール送信する方法と必要な設定
- PHPからメールを送信する方法と必要な設定について解説します。
- PHPからメールを送信するためには、mb_send_mail関数を使用します。この関数はメールの送信機能を提供しており、メーラの機能はありません。
- メール送信には以下の情報が必要です:メールアドレス、パスワード、SMTPサーバー名、ポート番号、接続の保護、認証方式。これらの情報を指定することで、PHPからメールを送信することができます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> では、送信だけは自力でできるのですか? > postfixのようなものは必要ないと考えて宜しいですか? 自力で出来るというのは語弊があります。 SMTPというプロトコルを使ったメール配送の流れをちゃんとご理解されていますでしょうか? PHPはMUAの役割をするだけです。 自力でMDAがあるメールサーバまで配送する訳ではありませんので、何らかのMTAが必要になります。 MTAとしてWebサーバにPostfix等のSMTPdを動かすか、他の利用可能なSMTPサーバを使うかは環境次第です。 > サンダーバードの設定と同じようにphpの設定で > ・SMTPサーバー名 > ・ポート番号 > を設定すればphpからメールは送信できるのでしょうか? > また、サンダーバードでは、yahooのメールも受信できます。 > ・SMTPサーバー名 > smtp.mail.yahoo.co.jp > ・ポート番号 > 465 > これを設定しても送信できますか? さくらインターネットやYahooメールの制限次第ですが、PHPのプログラムから送信する際の送信元メールアドレスがそれぞれで発行されているメールアドレスであれば送信できるのではないでしょうか。 SMTP認証が必要であればそれも設定しましょう。(メールソフトでは受信用アカウント情報を使用すると言った設定をしていて個別にSMTP認証のアカウント情報を入力しない場合があります) > つまり、postfixのようなものはインストールしている必要はないのですよね? > この部分、概念の理解としては一番確認したい部分です。 必須ではありません。
その他の回答 (2)
- t_ohta
- ベストアンサー率38% (5238/13705)
> phpのmb_send_mail関数自体にはメーラの機能はあるのですか?ないのですか? 一般的なPCのメーラーのような機能が全てある訳では有りません(そもそも送信するだけで受信はしませんし) mb_send_mail関数は、引数で受け取ったデータを元にRFCの規定に準じたメールデータフォーマット型式のデータを生成し、指定されたSMTPサーバへSMTPプロトコルでメールを送信する機能を持つモノです。(PCメーラーの送信側の機能と基本は同じ) > メール送信に必要なのは何ですか? php.ini と言うPHPの環境設定ファイルに ・SMTPサーバー名 ・ポート番号 を指定する項目があるので、こちらを設定する事になります。 デフォルトはサーバ名が「localhost」で、ポート番号が「25」になっています。 外部のSMTPサーバを利用する際に認証が必要であれば、認証用のユーザ名とパスワードも設定できます。 パスワードを設定する場合は、第三者に見られないようファイルのパーミッションに注意が必要です。 > それでもメーラのようなモノではなく、メールサーバーが必要ですか? Webサーバ上でSMTPサーバを動作させる必要はありません。 しかし、LinuxだとデフォルトでSMTPサーバは動いている場合が多いので、そのまま使う事も多いかと思います。 サーバの設置環境が判らないので何とも言えませんが、データセンターもしくはIaaS事業者がSMTPサーバを用意してくれていて、利用可能なのであればそちらを使っても問題ありません。
お礼
返信ありがとうございます。 >一般的なPCのメーラーのような機能が全てある訳では有りません(そもそも送信するだけで受信はしませんし) では、送信だけは自力でできるのですか? postfixのようなものは必要ないと考えて宜しいですか? 一旦、yum でpostfixをインストールしましたが、これはアンインストールしても問題ないのですよね? >外部のSMTPサーバを利用する際に認証が必要であれば、認証用のユーザ名とパスワードも設定できます。 さくらインターネットでレンタルサーバ スタンダードを契約しており、 そこに、 info@独自ドメイン、mail1@独自ドメインなどのメールアドレスを作っています。 一方、メール送信を試そうとしているサーバーはローカルにあります。 パソコンにCentOS7をインストールして、アパッチとphpを入れただけの状態です。 CentOS7はGUIを使ってパソコンとしても使えますので、 仮にサンダーバードをインストールすれば、 mail1@独自ドメインのアドレスとパスワード、 IMAPサーバー名、ポート番号 接続の保護、認証方式 SMTPサーバー名、ポート番号 接続の保護、認証方式 を指定すれば、サンダーバードからメールは送る事ができます。 サンダーバードの設定と同じようにphpの設定で ・SMTPサーバー名 ・ポート番号 を設定すればphpからメールは送信できるのでしょうか? また、サンダーバードでは、yahooのメールも受信できます。 ・SMTPサーバー名 smtp.mail.yahoo.co.jp ・ポート番号 465 これを設定しても送信できますか? >Webサーバ上でSMTPサーバを動作させる必要はありません。 つまり、postfixのようなものはインストールしている必要はないのですよね? この部分、概念の理解としては一番確認したい部分です。 以上、宜しくお願い致します。
- t_ohta
- ベストアンサー率38% (5238/13705)
そのサーバ上でSMTPサーバが動いていますか? PHP のデフォルト設定では localhost 上で動くSMTPサーバへメールを送信するようになっているので、サーバ上でSMTPが動いていないとメールが配送されません。 送信に失敗していたらログにエラーメッセージが出ているはずなので確認しましょう。 エラーが出ていない場合はSMTPサーバが動いているものの、外部と通信できていない可能性が考えられます。 その場合サーバのメールスプールにデータが残っていると思われるので、SMTPdのログやスプールのデータを確認しましょう。 外部と通信できない理由としてはDNSが引けないとか、ISPが迷惑メール対策としてOBP25Bと言われる25番ポートで外部と通信するのを遮断している可能性が考えられます。 SMTPdのログを確認してエラーになった理由を調べましょう。 OBP25B が原因であれば、PHPの設定を変えて localhost では無くISPのSMTPサーバを利用するようにしましょう。
お礼
phpのmb_send_mail関数自体にはメーラの機能はあるのですか?ないのですか? phpのエンジンと追加モジュールでメーラの機能があり、その設定が必要なのか? phpのmb_send_mail関数自体にはメーラの機能はなく、postfixなどのメールサーバーを仲介するだけなのか? メール送信に必要なのは何ですか? 普通にPCからメールを送る場合は、 サンダーバードとかOutlookといったメーラと、自分のメールアドレスが必要です。 自分のメールアドレスの情報として メールアドレス、パスワード、 IMAPかPOPサーバー名、ポート番号 接続の保護、認証方式 SMTPサーバー名、ポート番号 接続の保護、認証方式 が必要です。 phpのmb_send_mail関数からメールを送信する場合も同様にこれらが必要ですか? このサーバーでメールを管理したいわけではなく、ただメールを送りたいだけです。 それでもメーラのようなモノではなく、メールサーバーが必要ですか?
お礼
>必須ではありません。 有難うございます。 とりあえず、それだけ確認できれば、ローカルlnux内にメールサーバを持たず、外のsmtpとphpのみでやる方法に絞ってみます。