前提・実現したいこと
PHPでWEBのフォームと自動返信メールの実装の練習をしているのですが、
自動返信メールが届きません。
詳細
プログラミング初学者で、PHPを勉強し始めた者です。
MacにてPHPで自動返信メールフォームの実装の練習の為、以下のサイトのコードを、
簡易ウェブサーバー(ターミナルでrootにて $php -S 127.0.0.1:8080
)で実行したところ、ブラウザ上でPHPにてフォームは表示され、”送信が完了しました”の画面までエラーなく進みますが、フォームに入力されたアドレス('email')にメールが届きません。
https://gray-code.com/php/make-the-form-vol3/
PHPのフォームは、閲覧者がnameとemailを入力後、確認画面が表示され、
さらにsubmitするとPOSTで受け取ったemailにメール送信+運営側(自分)へも確認メールが届く仕組みです。
※逆に書くとややこしくなるのかもしれませんが、PHPにいくつかのコードを追加する前、
($header関連と、'運営側への返信メール情報'を追加する前)
に一度試した時にはフォームに入力したメールアドレスへ期待通りメールが受信されました。
しかしその後、追加でそれらを書いた後に送信できなくなり、
もう一度送信できた状況を再現しようとコードを戻してみても、受信されない状況になってしまいました。
ブラウザ上でのPHPの実行・操作中はターミナル上では127.0.0.1:●●●●● [200]: /
というログがでるだけでエラーらしきものはありません。
コードはサイトを参考に自分で書きましたが、
最終的にサイトに載ってるもの(下記URL)を丸々コピーしても同じ状況でした。
https://github.com/gray-code/make-the-form/blob/master/vol3/index.php
送信先のメールアドレスはgmailのアドレスで、
全てのメールアドレスや迷惑メールなどを確認してもPHPによって送られるはずのメールはありませんでした。(他のメールや自身あてのメールは問題なく確認できました。)
フォームに入力するアドレスを変更し別のアドレスへ送信した場合も、
その別アドレスでメール受信は確認できませんでした。
コード追加前に一度送信できている点は引っかかるのですが、
この状況で確認すべき設定等ございましたらおご教示お願いいたします。
プログラミング自体ド素人で、PHPもPostfixやターミナル上の操作・設定なども殆ど初めて行うものでした。
如何せん独学の為、不足している情報も多々あるかと思います。
お手数ですが少し噛み砕いてご確認・ご説明やアドバイスいただけると嬉しいです。
lang
1<?php 2// 変数の初期化 3$page_flag = 0; 4if( !empty($_POST['btn_confirm']) ) { 5 $page_flag = 1; 6} elseif( !empty($_POST['btn_submit']) ) { 7 $page_flag = 2; 8 // 変数とタイムゾーンを初期化 9 $header = null; 10 $auto_reply_subject = null; 11 $auto_reply_text = null; 12 $admin_reply_subject = null; 13 $admin_reply_text = null; 14 date_default_timezone_set('Asia/Tokyo'); 15 $header = "MIME-Version: 1.0\n"; 16 $header .= "From: GRAYCODE <noreply@gray-code.com>\n"; 17 $header .= "Reply-To: GRAYCODE <noreply@gray-code.com>\n"; 18 // 件名を設定 19 $auto_reply_subject = 'お問い合わせありがとうございます。'; 20 // 本文を設定 21 $auto_reply_text = "この度は、お問い合わせ頂き誠にありがとうございます。 22下記の内容でお問い合わせを受け付けました。\n\n"; 23 $auto_reply_text .= "お問い合わせ日時:" . date("Y-m-d H:i") . "\n"; 24 $auto_reply_text .= "氏名:" . $_POST['your_name'] . "\n"; 25 $auto_reply_text .= "メールアドレス:" . $_POST['email'] . "\n\n"; 26 $auto_reply_text .= "GRAYCODE 事務局"; 27 // 自動返信メール送信 28 mb_send_mail( $_POST['email'], $auto_reply_subject, $auto_reply_text, $header); 29 // 運営側へ送るメールの件名 30 $admin_reply_subject = "お問い合わせを受け付けました"; 31 // 本文を設定 32 $admin_reply_text = "下記の内容でお問い合わせがありました。\n\n"; 33 $admin_reply_text .= "お問い合わせ日時:" . date("Y-m-d H:i") . "\n"; 34 $admin_reply_text .= "氏名:" . $_POST['your_name'] . "\n"; 35 $admin_reply_text .= "メールアドレス:" . $_POST['email'] . "\n\n"; 36 // 管理者へメール送信 37 mb_send_mail( 'webmaster@gray-code.com', $admin_reply_subject, $admin_reply_text, $header); 38} 39?> 40 41<!DOCTYPE> 42<html lang="ja"> 43<head> 44<title>お問い合わせフォーム</title> 45<style rel="stylesheet" type="text/css"> 46body { 47 padding: 20px; 48 text-align: center; 49} 50h1 { 51 margin-bottom: 20px; 52 padding: 20px 0; 53 color: #209eff; 54 font-size: 122%; 55 border-top: 1px solid #999; 56 border-bottom: 1px solid #999; 57} 58input[type=text] { 59 padding: 5px 10px; 60 font-size: 86%; 61 border: none; 62 border-radius: 3px; 63 background: #ddf0ff; 64} 65input[name=btn_confirm], 66input[name=btn_submit], 67input[name=btn_back] { 68 margin-top: 10px; 69 padding: 5px 20px; 70 font-size: 100%; 71 color: #fff; 72 cursor: pointer; 73 border: none; 74 border-radius: 3px; 75 box-shadow: 0 3px 0 #2887d1; 76 background: #4eaaf1; 77} 78input[name=btn_back] { 79 margin-right: 20px; 80 box-shadow: 0 3px 0 #777; 81 background: #999; 82} 83.element_wrap { 84 margin-bottom: 10px; 85 padding: 10px 0; 86 border-bottom: 1px solid #ccc; 87 text-align: left; 88} 89label { 90 display: inline-block; 91 margin-bottom: 10px; 92 font-weight: bold; 93 width: 150px; 94} 95.element_wrap p { 96 display: inline-block; 97 margin: 0; 98 text-align: left; 99} 100</style> 101</head> 102<body> 103<h1>お問い合わせフォーム</h1> 104<?php if( $page_flag === 1 ): ?> 105 106<form method="post" action=""> 107 <div class="element_wrap"> 108 <label>氏名</label> 109 <p><?php echo $_POST['your_name']; ?></p> 110 </div> 111 <div class="element_wrap"> 112 <label>メールアドレス</label> 113 <p><?php echo $_POST['email']; ?></p> 114 </div> 115 <input type="submit" name="btn_back" value="戻る"> 116 <input type="submit" name="btn_submit" value="送信"> 117 <input type="hidden" name="your_name" value="<?php echo $_POST['your_name']; ?>"> 118 <input type="hidden" name="email" value="<?php echo $_POST['email']; ?>"> 119</form> 120 121<?php elseif( $page_flag === 2 ): ?> 122 123<p>送信が完了しました。</p> 124 125<?php else: ?> 126 127<form method="post" action=""> 128 <div class="element_wrap"> 129 <label>氏名</label> 130 <input type="text" name="your_name" value=""> 131 </div> 132 <div class="element_wrap"> 133 <label>メールアドレス</label> 134 <input type="text" name="email" value=""> 135 </div> 136 <input type="submit" name="btn_confirm" value="入力内容を確認する"> 137</form> 138 139<?php endif; ?> 140</body> 141</htm>
PHP ### 試したこと Postfixのmail systemを下記サイトを参考に設定しました。 https://blog.ch3cooh.jp/entry/20170704/1499130000 設定したのは上記のフォームに入力したものと同じgmailアカウントで rootにて`$sudo postfix start`を実行すると `postfix/postfix-script: fatal: the Postfix mail system is already running`と表示されました。 しかし `$ date | mail -s test (メールアドレス)` を実行してもメールは届きません。 ターミナル側に特にエラーメッセージはありません。 ブラウザ上のPHPの操作でも同様に届きません。 追記⑴ 9/13 22時頃 具体的な操作 ①rootで `$ sudo vim /etc/postfix/sasl_passwd` `smtp.gmail.com:587 (username)@gmail.com:(パスワード)` を入力保存 ②`$ sudo vim /etc/postfix/main.cf` `relayhost=smtp.gmail.com:587 smtp_sasl_auth_enable=yes smtp_sasl_password_maps=hash:/etc/postfix/sasl_passwd smtp_use_tls=yes smtp_tls_security_level=encrypt tls_random_source=dev:/dev/urandom smtp_sasl_security_options = noanonymous smtp_always_send_ehlo = yes smtp_sasl_mechanism_filter = plain compatibility_level = 2` を追記保存 ③`$ sudo postfix reload` →postfix/postfix-script: refreshing the Postfix mail systemと表示される。 追記⑵ (起動したいPHPのパスはMAMPのhtdocs>form_demoフォルダ内にあり、ここをrootとしてます。この位置は問題ないでしょうか? `/Applications/MAMP/htdocs/form_demo/index.php`) ①php.iniのsendmail_path `/Applications/MAMP/bin/php/php7.2.8/conf/php.ini` `; For Unix only. You may supply arguments as well (default: "sendmail -t -i"). ; http://php.net/sendmail-path ;sendmail_path = ` のままでしたので、 `sendmail_path = /usr/sbin/sendmail -t -i` に変更し保存しました。(http://d.hatena.ne.jp/psquare/20140108/p1を参照) ②Gmailの「安全性の低いアプリからのアカウントへのアクセスを許可する」に関わる設定変更 →完了しました。即反映ではないとのことなので、しばらく様子をみます。 ③Postfixのリロード `sudo vim /etc/postfix/sasl_passwd` `sudo postmap /etc/postfix/sasl_passwd` (この実行のあとは特に反応なく次の行に改行されるのですが、それは問題ないのでしょうか?) `sudo postfix reload` 念のため再度この設定をやり直すと postfix/postfix-script: refreshing the Postfix mail system と表示されました。 ④メールのログ出力 参照URLの情報より、ターミナルでrootにて`cd /var/log` →`cat maillog | grep "from=<送信元メールアドレス>"`と実行したところ、 ファイル(orディレクトリ)がないとの表示でした。 (cat: maillog: No such file or directory) ターミナルの別ウィンドウで、 log stream --predicate '(process == "smtpd") || (process == "smtp")' --info を実行後、ブラウザ127.0.0.1:8080にてPHPを実行したところ relay=smtp.gmail.com[●●●.●●●.●●●.●●●]:587, delay=0.84, delays=0.05/0/0.79/0, dsn=4.7.5, status=deferred (TLS is required, but our TLS engine is unavailable) warning: Digest algorithm "md5" not found warning: disabling TLS support PostfixのTLS設定?を追加する必要があるのでしょうか。 ざっとググっただけでは理解が追いつかなかったので、もう少し調べてみます。 有用そうな情報がございましたらご回答いただけるとありがたいです。 ⑤ファイアウォール・パケットフィルタリングについて ファイアウォールについてはON-OFFでそれぞれ試してみたのですが変化がありませんでした。ファイアウォールもですがパケットフィルタリングについてはさらに無知でした・・・調べてみます。試した方が良い設定があれば教えていただけるとありがたいです。 ### 補足情報(FW/ツールのバージョンなど) ブラウザ Chrome PHP v7.2.9 Mac Sierra 10.12.6