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

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

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

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

Q&A

1回答

562閲覧

メール送信処理を書いたPHPファイルをXserverに上げてメールを送れるようにしたい。(PHPファイルの設置場所が分からない)

kuromame

総合スコア12

PHP

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

0グッド

0クリップ

投稿2019/07/11 03:03

編集2019/07/11 08:07

イメージ説明自作WEBサービスにパスワードリマインダーの機能を実装しようとしています。

前提・実現したいこと

メール送信処理を書いたPHPファイルをXserverに上げて
メールを送れるようにしたい。(PHPファイルの設置場所が分からない)

メール送信処理を書いたphpは既に準備してあります。

試したこと

Xserver メール送信処理ファイル PHP 設置場所でググりました。 

ググって見つけた以下のサイトを参考にして進めましたが、手順の最後にある
設定が完了したエックスサーバに、メールを送信する処理を書いたphpファイルを設置する方法、設置場所が分かりませんでした。

↓エックスサーバーからPHPでメールを送りたい
https://programming-learning.com/2017/08/15/%E3%82%A8%E3%83%83%E3%82%AF%E3%82%B9%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%81%8B%E3%82%89php%E3%81%A7%E3%83%A1%E3%83%BC%E3%83%AB%E3%82%92%E9%80%81%E3%82%8A%E3%81%9F%E3%81%84/

以下のコードが passRemindSend.php の内容です。

<?php //共通変数・関数ファイルを読み込み require('function.php'); debug('「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「'); debug('「 パスワード再発行メール送信ページ '); debug('「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「'); debugLogStart(); //ログイン認証はなし(ログインできない人が使う画面だから) //================================= // 画面処理 //================================= //post送信されていた場合 if (!empty($_POST)) { debug('POST送信があります。'); debug('POST情報:' . print_r($_POST, true)); //変数にPOST情報代入 $email = $_POST['email']; //未入力チェック validRequired($email, 'email'); if (empty($err_msg)) { debug('未入力チェックOK。'); //emailの形式チェック validEmail($email, 'email'); //emailの最大文字数チェック validMaxLen($email, 'email'); if (empty($err_msg)) { debug('バリデーションOK.'); //例外処理 try { //DBへ接続 $dbh = dbConnect(); //SQL文作成 $sql = 'SELECT count(*) FROM users WHERE email = :email AND delete_flg = 0'; $data = array(':email' => $email); //クエリ実行 $stmt = queryPost($dbh, $sql, $data); //クエリ結果の値を取得 $result = $stmt->fetch(PDO::FETCH_ASSOC); //EmailがDBに登録されている場合 if ($stmt && array_shift($result)) { debug('クエリ成功。DB登録あり'); $_SESSION['msg_success'] = SUC03; $auth_key = makeRandKey(); //認証キー生成 //メール送信 $from = 'brevet@shingo5200.xsrv.jp'; $to = $email; $subject = '【パスワード再発行認証】| 超長距離サイクリングの装備術'; $comment = <<<EOF 本メールアドレス宛にパスワード再発行のご依頼がありました。 下記のURLにて認証キーをご入力頂くとパスワードが再発行されます。 パスワード再発行認証キー入力ページ:◯◯◯◯◯ 認証キー:{$auth_key} *認証キーの有効期限は30分となります 認証キーを再発行されたい場合は下記ページより再度再発行をお願い致します。 ◯◯◯◯◯ ////////////////////////////////////////// 超長距離サイクリングの装備術 URL ◯◯◯◯◯ E-mail brevet@shingo5200.xsrv.jp ////////////////////////////////////////// EOF; sendMail($from, $to, $subject, $comment); debug('sendMailの中身' . print_r($from, true)); debug('sendMailの中身' . print_r($to, true)); debug('sendMailの中身' . print_r($subject, true)); debug('sendMailの中身' . print_r($comment, true)); //認証に必要な情報をセッションへ保存 $_SESSION['auth_key'] = $auth_key; $_SESSION['auth_email'] = $email; $_SESSION['auth_key_limit'] = time() + (60 * 30); //現在時刻より30分後のUNIXタイムスタンプを入れる debug('セッション変数の中身:' . print_r($_SESSION, true)); header("Location:passRemindRecieve.php"); //認証キー入力ページへ } else { debug('クエリに失敗したかDBに登録のないEmailが入力されました。'); $err_msg['common'] = MSG07; } } catch (Exception $e) { error_log('エラー発生:' . $e->getMessage()); $err_msg['common'] = MSG07; } } } } ?> <?php $siteTitle = 'パスワード再発行メール送信'; require('head.php'); ?> <body class="page-signup page-1colum">
<!-- メニュー --> <?php require('header.php'); ?> <p id="js-show-msg" style="display:none;" class="msg-slide"> <?php echo getSessionFlash('msg_success'); ?> </p> <!-- メインコンテンツ --> <div id="contents" class="site-width"> <!-- Main --> <section class="main"> <div class="form-container"> <form action="" method="post" class="form"> <p>ご指定のメールアドレス宛にパスワード再発行用のURLと認証キーをお送り致します。</p><br> <div class="area-msg"> <?php if (!empty($err_msg['common'])) echo $err_msg['common']; ?> </div> <label class="<?php if (!empty($err_msg['email'])) echo $err_msg['email']; ?>"> E-mail <input type="text" name="email" value="<?php echo getFormData('email'); ?>"> </label> <div class="area-msg"> <?php if (!empty($err_msg['email'])) echo $err_msg['email']; ?> </div> <div class="btn-container"> <input type="submit" class="btn btn-mid" value="送信する"> </div> <a href="mypage.php" class="a_href-change">&lt; マイページに戻る</a> <form> </div> </section> </div> <!-- footer --> <?php require('footer.php'); ?>

以下が送信ボタンを押した時のデバッグの内容です。
デバッグを見るとメールは送信されているようですが、実際にはメールは届いていません。

[11-Jul-2019 16:45:07 Asia/Tokyo] デバッグ:現在日時タイムスタンプ:1562831107
[11-Jul-2019 16:46:01 Asia/Tokyo] デバッグ:「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「
[11-Jul-2019 16:46:01 Asia/Tokyo] デバッグ:「 パスワード再発行メール送信ページ 
[11-Jul-2019 16:46:01 Asia/Tokyo] デバッグ:「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「
[11-Jul-2019 16:46:01 Asia/Tokyo] デバッグ:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
[11-Jul-2019 16:46:01 Asia/Tokyo] デバッグ:セッションID:t7up3srgvdchfunaoc5l7v0a5l
[11-Jul-2019 16:46:01 Asia/Tokyo] デバッグ:セッション変数の中身:Array
(
[msg_success] =>
[auth_key] => SgyfcZ2c
[auth_email] => tsunoda123tobai@gmail.com
[auth_key_limit] => 1562832907
)

[11-Jul-2019 16:46:01 Asia/Tokyo] デバッグ:現在日時タイムスタンプ:1562831161
[11-Jul-2019 16:58:53 Asia/Tokyo] デバッグ:「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「
[11-Jul-2019 16:58:53 Asia/Tokyo] デバッグ:「 パスワード再発行メール送信ページ 
[11-Jul-2019 16:58:53 Asia/Tokyo] デバッグ:「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「
[11-Jul-2019 16:58:53 Asia/Tokyo] デバッグ:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
[11-Jul-2019 16:58:53 Asia/Tokyo] デバッグ:セッションID:khk9v0u7orpccd3m80o03do0ej
[11-Jul-2019 16:58:53 Asia/Tokyo] デバッグ:セッション変数の中身:Array
(
[msg_success] =>
[auth_key] => SgyfcZ2c
[auth_email] => tsuno123tobai@gmail.com
[auth_key_limit] => 1562832907
)

[11-Jul-2019 16:58:53 Asia/Tokyo] デバッグ:現在日時タイムスタンプ:1562831933
[11-Jul-2019 16:58:53 Asia/Tokyo] デバッグ:POST送信があります。
[11-Jul-2019 16:58:53 Asia/Tokyo] デバッグ:POST情報:Array
(
[email] => tsuno123tobai@gmail.com
)

[11-Jul-2019 16:58:53 Asia/Tokyo] デバッグ:未入力チェックOK。
[11-Jul-2019 16:58:53 Asia/Tokyo] デバッグ:バリデーションOK.
[11-Jul-2019 16:58:53 Asia/Tokyo] デバッグ:クエリ成功。
[11-Jul-2019 16:58:53 Asia/Tokyo] デバッグ:クエリ成功。DB登録あり
[11-Jul-2019 16:58:54 Asia/Tokyo] デバッグ:メールを送信しました。
[11-Jul-2019 16:58:54 Asia/Tokyo] デバッグ:sendMailの中身brevet@shingo5200.xsrv.jp
[11-Jul-2019 16:58:54 Asia/Tokyo] デバッグ:sendMailの中身tsuno123tobai@gmail.com
[11-Jul-2019 16:58:54 Asia/Tokyo] デバッグ:sendMailの中身【パスワード再発行認証】| 超長距離サイクリングの装備術
[11-Jul-2019 16:58:54 Asia/Tokyo] デバッグ:sendMailの中身 本メールアドレス宛にパスワード再発行のご依頼がありました。
下記のURLにて認証キーをご入力頂くとパスワードが再発行されます。

パスワード再発行認証キー入力ページ:◯◯◯◯◯ 認証キー:lXPAJ3wR *認証キーの有効期限は30分となります 認証キーを再発行されたい場合は下記ページより再度再発行をお願い致します。 ◯◯◯◯◯ ////////////////////////////////////////// 超長距離サイクリングの装備術 URL ◯◯◯◯◯ E-mail brevet@shingo5200.xsrv.jp //////////////////////////////////////////

[11-Jul-2019 16:58:54 Asia/Tokyo] デバッグ:セッション変数の中身:Array
(
[msg_success] => メールを送信しました
[auth_key] => lXPAJ3wR
[auth_email] => tsuno123tobai@gmail.com
[auth_key_limit] => 1562833734
)

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

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

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

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

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

guest

回答1

0

画面から直に実行するのでしたらサーバーのドキュメントルートの配下に
バックグラウンドとかコマンドから実行させるのでしたらサーバー内でしたらどこに置いても動くはずです。
(※サーバーによってはPHPなどのプログラムが動作可能なディレクトリが制限されていたりするのでサーバーの仕様を確認してみてください)

投稿2019/07/11 03:14

m.ts10806

総合スコア80850

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

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

kuromame

2019/07/11 07:25

mtsさん、ご回答ありがとうございます。 画面から直に実行する(画面の送信ボタンを押す ことだと解釈しています。)場合にサーバーのドキュメントルートの配下に設置するとのことですが、具体的に言うと、追加した画像のように /shingo5200.xsrv.jp/public_html/ というディレクトリの中に送信処理を書いたphpファイルを設置すればメール送信が行えるようになるということでしょうか?
m.ts10806

2019/07/11 07:26

実際に置いて試してみれば良いかと思います。
m.ts10806

2019/07/11 07:26

て、画像見るともうアップされてるんですね。
kuromame

2019/07/11 07:36

アップした後に画面の送信ボタンを押してみたんですが、メールが送られてこないです。 phpファイルの置き場所はこれで合っているのでしょうか? 合っているのであれば送信されない原因が思い浮かばず、困っています。 それとも間違えているのでしょうか?
m.ts10806

2019/07/11 07:40

自身が実行されたコードがないと何とも言えません。 (そもそも私はそのアップした画面に「送信ボタン」があることすら今の質問者さんのコメントで知りました)
kuromame

2019/07/11 08:11

情報共有が不十分で申し訳ありません。 passRemindSend.phpのコードと画面処理のデバッグの内容をご覧いただけますでしょうか。 宜しくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問