-PR-
解決済み

phpからメールを送信したいです。

  • すぐに回答を!
  • 質問No.9397977
  • 閲覧数54
  • ありがとう数3
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 70% (26/37)

phpからメールを送信したいです。
やりたい事はそれだけですが、根本的によく分かっていないところがあり、その辺りを整理したいと思っています。
何分、概念をよく理解していないので、意味不明な事を書くかもしれませんが宜しくお願い致します。


CentOS7にアパッチとPHPをインストールしました。

WEBルート上に下記のtest_phpinfo.phpを配置し、
ブラウザから
http://IPアドレス/test_phpinfo.php
で呼び出すと、
phpinfoの情報が画面上に出ています。

次に、
WEBルート上に下記のtest_mb_send_mail.phpを配置し、
ブラウザから
http://IPアドレス/test_mb_send_mail.php
で呼び出すと、
(画面に出すものは何も書いていないので)真っ白な画面が出て、自分のアドレスにメールが届いて欲しいのですが届きません。


あと、具体的に何が必要なのかという事が分かりたいのですが、それとは別に幾つか質問があります。

phpのmb_send_mail関数自体にはメーラの機能はあるのですか?ないのですか?
phpのエンジンと追加モジュールでメーラの機能があり、その設定が必要なのか?
phpのmb_send_mail関数自体にはメーラの機能はなく、postfixなどのメールサーバーを仲介するだけなのか?


メール送信に必要なのは何ですか?
普通にPCからメールを送る場合は、
サンダーバードとかOutlookといったメーラと、自分のメールアドレスが必要です。
自分のメールアドレスの情報として
メールアドレス、パスワード、
IMAPかPOPサーバー名、ポート番号
接続の保護、認証方式
SMTPサーバー名、ポート番号
接続の保護、認証方式
が必要です。
phpのmb_send_mail関数からメールを送信する場合も同様にこれらが必要ですか?

このサーバーでメールを管理したいわけではなく、ただメールを送りたいだけです。
それでもメーラのようなモノではなく、メールサーバーが必要ですか?


以上、宜しくお願い致します。



[test_phpinfo.php]
<?php
phpinfo();
?>
[test_phpinfo.php]


[test_mb_send_mail.php]
<?php
mb_language("Japanese");
mb_internal_encoding("UTF-8");

mb_send_mail("自分のアドレス", "件名", "本文", "From: from@example.com")
?>
[test_mb_send_mail.php]
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.3
レベル14

ベストアンサー率 38% (2622/6737)

PHP カテゴリマスター
> では、送信だけは自力でできるのですか?
> 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のようなものはインストールしている必要はないのですよね?
> この部分、概念の理解としては一番確認したい部分です。

必須ではありません。
お礼コメント
linuxorfe

お礼率 70% (26/37)

>必須ではありません。

有難うございます。
とりあえず、それだけ確認できれば、ローカルlnux内にメールサーバを持たず、外のsmtpとphpのみでやる方法に絞ってみます。
投稿日時 - 2017-11-17 10:24:56

その他の回答 (全2件)

  • 回答No.1
レベル14

ベストアンサー率 38% (2622/6737)

PHP カテゴリマスター
そのサーバ上でSMTPサーバが動いていますか?
PHP のデフォルト設定では localhost 上で動くSMTPサーバへメールを送信するようになっているので、サーバ上でSMTPが動いていないとメールが配送されません。
送信に失敗していたらログにエラーメッセージが出ているはずなので確認しましょう。

エラーが出ていない場合はSMTPサーバが動いているものの、外部と通信できていない可能性が考えられます。
その場合サーバのメールスプールにデータが残っていると思われるので、SMTPdのログやスプールのデータを確認しましょう。
外部と通信できない理由としてはDNSが引けないとか、ISPが迷惑メール対策としてOBP25Bと言われる25番ポートで外部と通信するのを遮断している可能性が考えられます。
SMTPdのログを確認してエラーになった理由を調べましょう。
OBP25B が原因であれば、PHPの設定を変えて localhost では無くISPのSMTPサーバを利用するようにしましょう。
お礼コメント
linuxorfe

お礼率 70% (26/37)

phpのmb_send_mail関数自体にはメーラの機能はあるのですか?ないのですか?
phpのエンジンと追加モジュールでメーラの機能があり、その設定が必要なのか?
phpのmb_send_mail関数自体にはメーラの機能はなく、postfixなどのメールサーバーを仲介するだけなのか?


メール送信に必要なのは何ですか?
普通にPCからメールを送る場合は、
サンダーバードとかOutlookといったメーラと、自分のメールアドレスが必要です。
自分のメールアドレスの情報として
メールアドレス、パスワード、
IMAPかPOPサーバー名、ポート番号
接続の保護、認証方式
SMTPサーバー名、ポート番号
接続の保護、認証方式
が必要です。
phpのmb_send_mail関数からメールを送信する場合も同様にこれらが必要ですか?

このサーバーでメールを管理したいわけではなく、ただメールを送りたいだけです。
それでもメーラのようなモノではなく、メールサーバーが必要ですか?
投稿日時 - 2017-11-16 14:03:38


  • 回答No.2
レベル14

ベストアンサー率 38% (2622/6737)

PHP カテゴリマスター
> 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サーバを用意してくれていて、利用可能なのであればそちらを使っても問題ありません。
お礼コメント
linuxorfe

お礼率 70% (26/37)

返信ありがとうございます。

>一般的な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のようなものはインストールしている必要はないのですよね?
この部分、概念の理解としては一番確認したい部分です。


以上、宜しくお願い致します。
投稿日時 - 2017-11-16 17:46:47
このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-

特集


開業・独立という夢を持つ人へ向けた情報満載!

ピックアップ

ページ先頭へ