

PHP,JavaScript初心者です。送信ボタンを押してもJavaScriptで設定した「メール送信に失敗しました」アラートが出ます。  
本番サーバーにあげてチェックしています。（ConoHa）  
原因はどこにあるのでしょうか？

### htmlのフォーム部分

[code]

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
      <script type="text/javascript" src="js/form.js"></script>
      <form id="mailform">
        <div>
          <label for="nameval">名前<span>(必須)</span></label> <input type="text" name="nameval" id="nameval" required />
        </div>
        <div>
          <label for="mailval">メールアドレス<span>(必須)</span></label> <input type="email" name="mailval" id="mailval" required />
        </div>
        <div>
          <label for="urlval">ウェブサイト</label> <input type="text" name="urlval" id="urlval" />
        </div>
        <div>
          <label for="textval">内容<span>(必須)</span></label> <textarea name="textval" id="textval" rows="12" required></textarea>
        </div>
        <p class="contact-submit">
          <input type="submit" value="送信 »" id="submit"> <input
          id="referrer" type="hidden" name="referrer" />
        </p>
      </form>
      <div id="dispmsg"></div>
    
[/code]

### sendmail.php

[code]

    <?php
    header('Content-type: application/json');
    date_default_timezone_set('Asia/Tokyo');
    
    $to = 'aaaa@aaaaa.com';
    $subject = 'お問い合わせフォームより';
    $domain = 'aaaaa.com';
    
    $errflg =0;
    $dispmsg ='';
    
    $nameval = '';
    $mailval = '';
    $urlval = '';
    $textval = '';
    $referrer = '';
    
    if(isset($_POST['nameval'])){ $nameval = $_POST['nameval']; }
    if(isset($_POST['mailval'])){ $mailval = $_POST['mailval']; }
    if(isset($_POST['urlval'])){ $urlval = $_POST['urlval']; }
    if(isset($_POST['textval'])){ $textval = $_POST['textval']; }
    if(isset($_POST['referrer'])){ $referrer = $_POST['referrer']; }
    
    if(strpos($_SERVER['HTTP_REFERER'], $domain) === false){
      $dispmsg = '<p id="errmsg">【リファラチェックエラー】お問い合わせフォームから入力されなかったため、メール送信できませんでした。</p>';
      $errflg = 1;
    }
    else if($nameval == '' || $mailval == '' || $textval == ''){
      $dispmsg = '<p id="errmsg">【エラー】名前・メールアドレス・内容は必須項目です。</p>';
      $errflg = 1;
    }
    else if(!preg_match("/^[.!#%&-_0-9a-zA-Z?/+]+@[!#%&-_0-9a-z]+(.[!#%&-_0-9a-z]+)+$/", $mailval) || count( explode('@',$mailval) ) !=2){
      $dispmsg .= '<p id="errmsg">【エラー】メールアドレスの形式が正しくありません。</p>';
      $errflg = 1;
    }
    else{
      $subject = "=?iso-2022-jp?B?".base64_encode(mb_convert_encoding($subject,'JIS','UTF-8'))."?=";
      $message= '名前：'.$nameval."\n";
      $message.='メール：'.$mailval."\n";
      $message.='ウェブサイト：'.$urlval."\n";
      $message.="\n――――――――――――――――――――――――――――――\n\n";
      $message.=$textval;
      $message.="\n\n――――――――――――――――――――――――――――――\n";
      $message.='送信日時：'.date( "Y/m/d (D) H:i:s", time() )."\n";
      $message.='送信元IPアドレス：'.@$_SERVER["REMOTE_ADDR"]."\n";
      $message.='送信元ホスト名：'.getHostByAddr(getenv('REMOTE_ADDR'))."\n";
      $message.='リファラURL：'.$referrer."\n";
      $message.='お問い合わせページ：'.@$_SERVER['HTTP_REFERER']."\n";
      $message= mb_convert_encoding($message,'JIS','UTF-8');
      $fromName = mb_encode_mimeheader(mb_convert_encoding($nameval,'JIS','UTF-8'));
      $header ='From: '.$fromName.'<wordpress@'.$domain.'>'."\n";
      $header.='Reply-To: '.$mailval."\n";
      $header.='Content-Type:text/plain;charset=iso-2022-jpnX-Mailer: PHP/'.phpversion();
    
      $retmail = mail($to,$subject,$message,$header);
    
      if( $retmail ){
        $dispmsg ='<p class="success">メールを送信しました。返信までしばらくお待ちください。</p>';
        $dispmsg.='<blockquote><p>名前： '.hsc_utf8($nameval).'<br />';
        $dispmsg.= 'メール： '.hsc_utf8($mailval).'<br />';
        $dispmsg.= 'ウェブサイト： '.hsc_utf8($urlval).'</p>';
        $dispmsg.= '<pre>'.hsc_utf8($textval).'</pre></blockquote>';
      }else{
        $dispmsg .= '<p id="errmsg">【エラー】メール送信に失敗しました。。</p>';
        $errflg = 1;
      }
    }
    
    $result = array('errflg'=>$errflg, 'dispmsg'=>$dispmsg);
    echo json_encode( $result );
    
    function hsc_utf8($str) {
      return htmlspecialchars($str, ENT_QUOTES,'UTF-8');
    }
    ?>
    
[/code]

### form.js

[code]

    jQuery(function ($) {
      $("#referrer").val(document.referrer);
      $("#mailform").submit(function(){
        $.ajax({
          url : '/sendmail.php',
          type: 'POST',
          dataType: 'json',
          data: $(this).serialize()
        })
        .done( function(data){
          $("#dispmsg").empty();
          $("#dispmsg").html(data.dispmsg);
          if(data.errflg != 1){
            $("#mailform").remove();
          }
        })
        .fail( function(data){
          alert('メール送信に失敗しました');
        })
        return false;
      });
    });
    
[/code]

追記：  
ご指摘いただいた部分を修正。これでもまだ動きません。

試したこと：  
現状のままフォーム入力し送信ボタンをおす  
=> 「メール送信に失敗しました」アラートが出る  
sendmail.phpの`$domain = 'aaaaa.com';`を違うアドレスにする  
=> 「【リファラチェックエラー】お問い合わせフォームから入力されなかったため、メール送信できませんでした。」は表示される  
==> つまり、PHP,JS共に読み込まれてはいる？


CC BY-SA 4.0
2021-07-18T18:18:10.727
78281
2021-07-19T02:18:10.877
2021-07-19T02:18:10.877
47345
47345
question
javascript php form
PHP,JavaScript を使ったフォームが送信できない