質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

Q&A

解決済

1回答

5461閲覧

mb_send_mail関数の戻り値がTRUEなのに送信先のメールアドレスに何も届かない

nyam

総合スコア2

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

0グッド

1クリップ

投稿2020/11/01 12:52

前提・実現したいこと

お問い合わせフォームを作る過程で、
mb_send_mail()を使って、自分宛てと他の人宛てに同じ内容のメールを送りたいです。しかし判定はTRUEになるのですが、どちらにもメールが受信されませんでした。
(MAILAR DAMON...といったメールも届きません)

###この問題について考えたこと

メール送信がうまくいかないときに読む記事(そういう質問をされたときに読ませる記事)https://qiita.com/ShibuyaKosuke/items/309c0a7d969baf0ea8d1
を読んでみました。

 思いつく原因
・自分がかいたプログラムにミスがある:自分でもどこが悪いのかわからない
・mb_send_mail()はTRUE→送信サーバーとは接続できたということ?
・MAILAR DEMONのメールが来てないので受信サーバーではじかれてる?
→送信先、送信元のメアドは実際に使えるもの。実在する。
→大量にメールは送っていない。

聞きたいこと
この問題について何らかのエラーログ等を見る方法があれば教えていただきたいです。
コード内に変な箇所やミスがあればご指摘いただけると嬉しいです。
よろしくお願いします。

PC:windows10
PHP:xamppでApacheだけを起動して使ってます。

発生している問題・エラーメッセージ

mb_send_mail()を使って、自分宛てと他の人宛てに同じ内容のメールを送ろうとしたところ、判定はTRUEになるのですが、どちらにもメールが受信されませんでした。 (MAILAR DAMON...といったメールも届きません)

該当のソースコード

PHP

1mailvalrs.php(phpファイルの名前、宛先bccと送信元のアドレスは同一です) 2<?php 3 4//メールの宛先bcc(管理者の送信先(仮)) 5define('mail_bcc','*******@yahoo.co.jp'); 6 7//bccメールの宛先の名前 8define('mail_bcc_name','管理者'); 9 10//送信元のアドレス(仮) 11define('mail_from','********@yahoo.co.jp'); 12 13//送信元の名前 14define('mail_from_name','お問い合わせフォーム'); 15 16//自動返信先 17define('mail_return_path','*******@yahoo.co.jp');

PHP

1complete.php(mailvars.phpの情報を読み込んで送信します。) 2<?php 3 declare(strict_types = 1); 4 session_start(); 5 6 7 include('htmlファイルの冒頭の文言を読み込みます'); 8 require('トークンの取得や確認などが書かれたファイルを読み込みます'); 9 require('common/mailvars.php'); 10 11 validateToken1(); 12 13 //POST形式で送られた値の確認 14 inputcheck($_POST); 15 16//入力フォームで入力した値を代入(すみません*で中身隠しました。) 17$name = ***; 18 $mail = *** ; 19 $tel = ***; 20 $subject =***; 21 $body = ***; 22 23//確認メールの内容を代入 24 $mail_body = 'お問い合わせフォームからのお問い合わせ' . "\n\n"; 25 $mail_body = date("2020年m月d日 H時i分") . "\n"; 26 $mail_body .='件名: ' .$subject; 27 $mail_body .="\n" .'氏名: ' .$name; 28 $mail_body .="\n" .'メールアドレス: ' .$mail; 29 $mail_body .="\n" .'電話番号: ' .$tel; 30 $mail_body .="\n" .'お問い合わせ内容: '.$body; 31//------以下、 32 //送信元の情報 33 $header_info = "From: " . mb_encode_mimeheader(mb_convert_encoding(mail_from_name,'ISO-2022-JP','UTF-8'),'ISO-2022-JP','B') ."<" . mail_from .">\n"; 34 35 //送信先(ユーザー様宛て) 36 $header_info .="To: " . mb_encode_mimeheader(mb_convert_encoding("ユーザー様",'ISO-2022-JP','UTF-8'),'ISO-2022-JP','B') . "<" . $mail .">\n"; 37 38 //送信先(管理者宛て) 39 $header_info .="BCc: " . mb_encode_mimeheader(mb_convert_encoding(mail_bcc_name,'ISO-2022-JP','UTF-8'),'ISO-2022-JP','B') . "<" . mail_bcc . ">\n"; 40 41$remail = mail_return_path; 42 43if(ini_get('safe_mode')){ 44 $mail_send = mb_send_mail($mail,$subject,$mail_body,$header_info); 45 } 46 else{ 47 $mail_send = mb_send_mail($mail,$subject,$mail_body,$header_info,'-f' .$remail); 48 } 49 ?> 50 51 <?php if($mail_send===TRUE) :?> 52 <h2>送信完了画面</h2> 53 <p>ありがとうございます。送信が完了しました。</p> 54 <p>登録していただいたメールアドレスに確認用メールを送信させていただきました。</p> 55 ---省略--- 56 <?php else:?> 57 <p>申し訳ありません。送信に失敗しました。</p> 58 <p>お手数ですが最初からやり直してください。</p> 59 <p>ご迷惑をおかけして申し訳ありません。</p> 60 <?php endif;?> 61 62<?php 63 include('common/footer.php'); 64 65 if (isset($_COOKIE["PHPSESSID"])) { 66 setcookie("PHPSESSID", '', time() - 1800, '/'); 67 } 68 69 $_SESSION = array(); 70 session_destroy();

試したこと

xamppの中のphp.iniは以下のように設定しました。
[mail function]
; For Win32 only.
; http://php.net/smtp
;SMTP = localhost
; http://php.net/smtp-port
;smtp_port = 25 設定したところ

--省略--
sendmail_path ="C:\xammp7\sendmail\sendmail.exe" -t"  設定したところ

mail.ini は以下のように設定しました。
;smtp_server=mail.mydomain.com
;smtp_server=smtp.gmail.com
smtp_server=smtp.mail.yahoo.co.jp

;smtp_port=25
smtp_port=587
;smtp_port=465

; smtp port (normally 25)auth_username=*******
auth_password=パスワードを入れています。

補足情報(FW/ツールのバージョンなど)

PC:windows10
PHP:xamppでApacheだけを起動して使ってます

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/11/01 23:08

そもそもローカル環境でメール送信というのは悪手でしかないので(詳しくないのにやるべきではない)無料でもサーバー借りたほうが良いかと思います。
nyam

2020/11/02 14:30

こんばんは。コメントありがとうございます。 仰る通り、サーバーを借りてみようと思います。
guest

回答1

0

ベストアンサー

質問にある記事を読んだのであれば、mb_send_mail()を使用することは無いと思いますが^^;
記事の通り、適当なライブラリを使用して php から SMTP サーバに接続し、php から接続ログを管理できるようにすることをオススメします。

どうしても、XAMPP の sendmail が使用したいのであれば、そちらの仕様を確認すると良いですが、本番で使用できるモノでもないので、学習するだけ無駄だと思います。
というか、そういった情報を自身で調べられないのであれば、mail システムそのものを学習してください。

個人的には、mail システムの学習は初学者には非常にハードルが高いので、php の学習目的であれば一旦見切りをつけて、次に進み、適当に学習が進んだ頃に再び戻ってくるのが良いと考えています。

投稿2020/11/01 21:42

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nyam

2020/11/02 14:33

回答ありがとうございます。 初めてPHPを学ぶのですが、mb_send_mail()に対して勘違いをしてました。(SMTP認証できると思ってました。(汗)) 他の方法を考えます。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問