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

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

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

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

Q&A

解決済

2回答

2729閲覧

PHP mb_send_mailがテストサーバでは動くが、本番では動かない

Takatsuki

総合スコア10

PHP

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

0グッド

1クリップ

投稿2022/05/07 15:31

編集2022/05/07 15:38

状況

phpでお問い合わせFormを作成しました。
XFreeのサーバで動作確認をし、メールが自動返信されることを確認しました。
しかし、本番環境であるXserverではメール返信が動作しません。
(mb_send_mailが動作しない)

XFreeの方では動いたのでプログラムの大枠は正しいはずですが、その他動作に必要な点をご教示していただきたいです。

試したこと

自分の管理下にないXserverで動かなかったため、自分でもXserverを契約し無料プランで以下を試しました
・formに入力するアドレスをgmailと~co.jpのアドレスで試したが両方ダメ
・mb_send_mail()をmail()に変えて動作確認(mail()以外は変更なし)
・php.iniのport番号を25→465や587にかえる

調べた結果、PHPMailerなどライブラリを使えば動作する可能性があるとありました。
しかし、現在自分には本番環境のFTP接続権限しかなくSMTPのパスワードがわからないため、できればmb_send_mailで対応したいです。
以下、ソースコードです。

$isSend=Trueにならないことまで確認しています。($isSendによりhtml表示を変えているため)

アドバイスいただけると助かります。

PHP Version 7.4.25

send.php

1<?php 2session_start(); 3if (!$_SESSION) { 4 header('Location: ./index.php'); 5} 6 7//空の場合のエラーメッセージ制御 8error_reporting(E_ALL ^ E_NOTICE); 9 10//メール差出人 11$sender = "株式会社〇〇"; 12 13//メール送信元 14$mailFrom = "mail1@***.com"; 15 16//メール返信先 17$replyTo = "mail1@***.com"; 18 19//管理者メールアドレス 20$adminEmail = "mail2@***.com"; 21 22//メールヘッダ設定 23$addHeader = "From:" . mb_encode_mimeheader($sender) . "<" . $mailFrom . ">\n"; 24$addHeader .= "Reply-to: " . $replyTo . "\n"; 25$addHeader .= "X-Mailer: PHP/" . phpversion(); 26 27// 迷惑メール対策 28$addOption = '-f' . $mailFrom; 29 30//タイムスタンプ 31date_default_timezone_set('Asia/Tokyo'); 32$timeStamp = time(); 33$week = array('日', '月', '火', '水', '木', '金', '土'); 34$dateFormatYMD = date('Y年m月d日', $timeStamp); 35$dateFormatHIS = date('H時i分s秒', $timeStamp); 36$weekFormat = "(" . $week[date('w', $timeStamp)] . ")"; 37$outputDate = $dateFormatYMD . $weekFormat . $dateFormatHIS; 38 39//XSS対策用サニタイズ 40function h($str) 41{ 42 return htmlspecialchars($str, ENT_QUOTES, 'UTF-8'); 43} 44 45//メール本文内に表示するデータの変数化 46$company = h($_SESSION['input_company']); 47$name = h($_SESSION['input_name']); 48$email = h($_SESSION['input_email']); 49$tel = h($_SESSION['input_tel']); 50$textarea = h($_SESSION['input_textarea']); 51 52//自動返信メール本文 53$messageUser = <<< EOD 54お問い合わせありがとうございます。 55EOD; 56 57//管理者確認用メール本文 58$messageAdmin = <<< EOD 59お問い合わせがありました 60EOD; 61 62//メール共通送信設定 63mb_language("ja"); 64mb_internal_encoding("UTF-8"); 65 66if (!empty($_SESSION['input_email'])) { 67 68 //自動返信メール送信設定 69 mb_send_mail($_SESSION['input_email'], "お問い合わせありがとうございます", $messageUser, $addHeader, $addOption); 70 71 // 管理者確認用メール送信設定 72 mb_send_mail($adminEmail, "お問い合わせ:" . $outputDate, $messageAdmin, $addHeader, $addOption); 73 74 $isSend = true; 75} else { 76 $isSend = false; 77} 78 79session_destroy(); 80?> 81

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

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

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

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

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

hentaiman

2022/05/08 04:13

サーバーの仕様見ました?
guest

回答2

0

メール仕様一覧 | レンタルサーバーならエックスサーバー
送信時の認証方式「SMTP AUTH」
mb_send_mail単体では無理です。

PHPMailerでメールをSTMP送信する - Qiita
PHPでSMTP認証してメールを送信する

質問者さんも気づいたように、PHPMailerを使うしかないかと。

投稿2022/05/09 04:12

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

自己解決

回答いただいたようにSMTP認証は必須。
xserverだとメールソフトの設定でメアドを用意する必要がある
https://www.xserver.ne.jp/manual/man_mail_setting.php

上記で設定したメアドを送信アドレス等とすることで、mb_send_mail()でのメール送信は可能。
ただし、迷惑メール設定となる。→gmailで確認しました。

PHPMailerで作成し直し、DNSレコードへSPF設定を行なった。
spf設定の方法↓
https://www.xserver.ne.jp/manual/man_domain_dns_setting.php#link-c

これで迷惑メールにも入らず送信ができた

投稿2022/05/11 00:47

Takatsuki

総合スコア10

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問