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

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

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

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

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

XAMPP

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

Q&A

3回答

12493閲覧

PHP mb_send_mail()のローカル環境でのメール送信について。

teruru.b

総合スコア11

PHP

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

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

XAMPP

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

0グッド

2クリップ

投稿2019/05/23 02:23

編集2022/01/12 10:55

お世話になっております。

表題の通り、PHP mb_send_mail()のローカル環境でのメール送信についてお伺いしたいです。

現在、xampp ver7.3.4 を用いて、学習を行っているのですが、ローカル環境におけるメールの送信ができない状況にあります。

Gmailのサーバを用いて行おうとしているのですが、エラーログも出ず、問題なく送れているようなのですが、送信先のアドレスにメールが届かない状況にあります。

メール送信時にサーバと連携するため、多少のロード時間がかかるようですが、そのロード時間がなく、サーバと連携が取れていないのでは?と考えています。

しかし、対処法等が全く分からないため、皆様の知恵をお借りできればと思います。

ちなみにwindows10 ver1803です。

以下、行った設定の手順になります。
=================================================
1.xampp¥phpフォルダ内のphp.iniの内容変更
・SMTP=localhost
・smtp_port=25
・sendmail_path = "¥"C:¥xampp¥sendmail¥sendmail.exe¥" -t"
(sendmail.exeのある個所へのパスとなっています。)

2.xampp¥sendmailフォルダ内のsendmail.iniの内容変更
・smtp_server=smtp.gmail.com
・smtp_port=587
・auth_username=送信元@gmail.com (個人情報のため、伏せています)
・auth_password=送信元gmailアカウントのパス (個人情報のため、伏せています)
・force_sender=送信元@gmail.com (個人情報のため、伏せています)

3.gmail内の設定変更
・安全性の低いアプリのアクセス・・・有効化

4.メール送信の確認方法
・xampp¥htdocsフォルダ内にtest.phpの作成

  【test.php】のコード

php

1 2  <?php 3   if(mb_send_mail("送信先@gmail.com", "test_sub", "test_body")){ 4   echo "送信成功"; 5   } else { 6    echo "送信失敗"; 7   } 8  ?>

5.ブラウザ上でlocalhost/test.phpを実行 → 送信成功と表記(送信先のアドレスでメール受信できず)
※この際にロード時間が全くないため、サーバに接続できていないのではないかと考えています。
=================================================
上記の作業を行いました。
xampp¥sendmailフォルダ内にerror.logは出ていません。

大変お手数ですが、ご教授願います。

なお、以下のサイトを参考しました。
=======================================
XAMPPのローカル環境からメールを送信できるように設定する方法【初心者向け】
XAMPP環境(ローカル環境)の sendmailからPHPメールを送信する設定方法
【PHP】ローカル環境からメールを送信する方法
XAMPP(Windows版)で、Gmail経由でローカル環境からメールを送信する
=======================================

追記です!
C:\xampp\apache\logs
上記のフォルダ内にエラーコードを発見しました。

error

1 2[Thu May 23 16:49:18.018129 2019] [ssl:warn] [pid 12136:tid 592] AH01909: www.example.com:443:0 server certificate does NOT include an ID which matches the server name 3[Thu May 23 16:49:18.054072 2019] [core:warn] [pid 12136:tid 592] AH00098: pid file C:/xampp/apache/logs/httpd.pid overwritten -- Unclean shutdown of previous Apache run? 4[Thu May 23 16:49:18.060056 2019] [ssl:warn] [pid 12136:tid 592] AH01909: www.example.com:443:0 server certificate does NOT include an ID which matches the server name 5PHP Warning: Module 'openssl' already loaded in Unknown on line 0 6[Thu May 23 16:49:18.086945 2019] [mpm_winnt:notice] [pid 12136:tid 592] AH00455: Apache/2.4.39 (Win64) OpenSSL/1.1.1b PHP/7.3.4 configured -- resuming normal operations 7[Thu May 23 16:49:18.086945 2019] [mpm_winnt:notice] [pid 12136:tid 592] AH00456: Apache Lounge VC15 Server built: Mar 28 2019 11:59:33 8[Thu May 23 16:49:18.086945 2019] [core:notice] [pid 12136:tid 592] AH00094: Command line: 'c:\xampp\apache\bin\httpd.exe -d C:/xampp/apache' 9[Thu May 23 16:49:18.094976 2019] [mpm_winnt:notice] [pid 12136:tid 592] AH00418: Parent: Created child process 12032 10[Thu May 23 16:49:18.725239 2019] [ssl:warn] [pid 12032:tid 612] AH01909: www.example.com:443:0 server certificate does NOT include an ID which matches the server name 11[Thu May 23 16:49:18.772112 2019] [ssl:warn] [pid 12032:tid 612] AH01909: www.example.com:443:0 server certificate does NOT include an ID which matches the server name 12PHP Warning: Module 'openssl' already loaded in Unknown on line 0 13[Thu May 23 16:49:18.806021 2019] [mpm_winnt:notice] [pid 12032:tid 612] AH00354: Child: Starting 150 worker threads. 14�t�@�C�����A�f�B���N�g�����A�܂��̓{�����[�� ���x���̍\�����Ԉ���Ă��܂��B 15

賢者の方々、ご確認していただいてもよろしいでしょうか。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2019/05/23 02:26

そのsendmailまわりの設定をするのに参考にした情報やブログ記事などあれば、それも示してください。(これ読んでね→それもう読んでます試してます、って流れがきらい)
m.ts10806

2019/05/23 02:31

質問は編集できますので質問本文にマークダウンのlink機能利用してリンクとしてご提示ください。 またコードはcode機能を利用してください。 https://teratail.com/help#about-markdown
m.ts10806

2019/05/23 02:45

えっと。参考サイトも本文に追記お願いします。
teruru.b

2019/05/23 02:56

失礼いたしました。 よろしくお願いいたします。
guest

回答3

0

pearのMail派なのでsend_mailは使ったことありませんでしたが
参考URLを元に構築して実験してみました。
問題なくメールの受信を確認できました。

一つ気になったのが

1.xampp¥phpフォルダ内のphp.iniの内容変更

この部分ですが、もしかしてSMTPとsmtp_portのコメントアウトまで外してませんか?
参考URLの一つ目はpathを通すためにsendmailのpathはコメントアウトを外せしか書いてませんが
2つ目のURLにご丁寧に

4行目の「;SMTP=localhost」、6行目の「;smtp_port=25」がコメントアウトされていることを確認し

と書いてあります。(私も同じようにコメントアウトしたままです)
書き方的にここも外しちゃっててmb_send_mailは呼べてて処理は通ってるから送信成功だけどmb_send_mail内で
設定の影響でメールを送信できてない(送信したつもりになってる)からログにも残らないんじゃないかと・・・

■php.ini内のSMTP、smtp_portのコメントアウトも外して実験してみました。

特に問題無く受信できていて、どうやら上記回答が原因ではないみたいです。
お力になれず申し訳ありません。
ただ、出力されるファイルは
error.logではなく
debug.logです 質問の追記に書いてあるファイル名ではないのでご注意。(回答にも書いていただいてますが)

投稿2019/05/23 05:03

編集2019/05/23 05:21
mepon

総合スコア480

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

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

teruru.b

2019/05/23 05:28

ご回答ありがとうございます。 ご指摘の通り、 >>SMTPとsmtp_portのコメントアウト こちらのコメントアウトを外していました。 しかし、修正したのち、テストを行ったのですが、挙動に変化はなく、logも生成されませんでした。
mepon

2019/05/23 05:40

そうですか・・・ php.iniやらsendmail.iniやら 設定ファイル編集したのちApacheちゃんと再起動してから検証してますか? 再起動せずにやり直しても設定が反映されないことはよくあります。 それと送信成功してても失敗しててもdebug.logは吐き出されるので ないのであればexeが動いてない可能性がやはり高いかもしれませんね
teruru.b

2019/05/23 07:13

ご丁寧にありがとうございます。 おっしゃる通り、exeが動いていないように思います。 ご回答ありがとうございます。
mepon

2019/05/23 08:27

exeが動いてないという観点から考えてみました。 xamppフォルダの中に「mailoutput」ってフォルダがあると思うのですが もしかしてその中に今日日付(テストした日付)のファイルとか生成されてませんか?
teruru.b

2019/05/23 08:29

空でした。。。
guest

0

C:\xampp\sendmail\sendmail.iniにある

;debug_logfile=debug.log

のコメントアウトを外してログ出力できるようにして、
再度テストして、
debug.logの内容を質問文中に追記してください。

話はそれから。

--

debug.log が生成されないということは、
sendmail.exeが呼ばれて、もしくは動作できていないことになります。

このsendmailは正しくはfake sendmailというもので
Windows 8以上の環境で動かすときはWindows XP SP3互換モードで動かす必要があると書いてあります。
sendmail.exeでプロパティを開いて、互換モードで動かす設定を与えてから試してください。

うちWindows 7だけど、こういうことなのかも:
イメージ説明

--

Windows 10での成功事例、探しました:
Xampp windows10 PHP sendmail 設定 (gmailを使う) - Logicky BLOG
XAMPPのFake Sendmail を使用したPHPのSendmail 送信テストの方法

additional_headersにFromとReturn-Pathを与える、なんて記述もありますが、
そもそもdebug.logが呼ばれてないことがひっかかる・・・。

--
phpでopensslが使えるようになってない、から?
phpinfo()でopensslが有効になっているかどうか確認してみてほしい。
だとしたら
XAMPP for WindowsでSSLを有効にする - Qiita
にあるような手順でopensslが使えるように改善するのはどうだろう?

投稿2019/05/23 02:29

編集2019/05/23 08:18
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

teruru.b

2019/05/23 02:44

ご指示いただきました通り、コメントアウトしてアパッチを再起動し、テストを実行しましたが、debug.logが生成されません。
teruru.b

2019/05/23 04:20

再度ご確認ありがとうございます。 ご教授いただいた内容で再度テストを行いましたが、logも生成されず、挙動に変化はありませんでした。
mepon

2019/05/23 05:10

参考までに 当方の環境はWin10 Proですが互換モード関連は触らなくても問題なく動きました。
teruru.b

2019/05/23 07:53

お手数おかけしてしまい、申し訳ございません。 動作の確認ありがとうございます。 apacheのlog内にエラーコードと思われるものを見つけたのですが、確認していただけますでしょうか。 たびたびすいません。。。
teruru.b

2019/05/23 08:30

opensslの項目は、enabled(有効)と記載されていました。。。
guest

0

私も質問者様と全く同じ現象でずっと苦しんでましたが
ようやく解決しました。

結局のところ、php.ini内の
sendmail_path = ""C:\xampp\sendmail\sendmail.exe" -t"
の.exeの後のバックスラッシュが抜けてたパス間違い(脱字)が原因でした。

違ってたら大変申し訳ないのですが、質問者様のsendmail_pathコード内で誤字や脱字
は無いでしょうか?
例えば、\部分を半角バックスラッシュでなく環境依存の本当の半角の円マークを使ってたり、Cや:や"が半角でなく
全角だったり、どこかに全角のスペースが入ってたり・・等

ディレクトリの在り処が表記場所と根本的に違う場所にある事は流石にないと思われますが
全く同じような現象だったもので、sendmail_pathとの兼ね合いに原因があるように思われましたので
口を出してしまいましたm(_ _ )m

投稿2020/09/01 23:15

dobreak

総合スコア2

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問