2017-04-20 4 views
0

Canvas HTML5テンプレートで作業しています。この特定のテンプレートは、ページ上のフォームを介して電子メールが送信された後、インラインの成功メッセージを使用しました。 SMTPを使用するようにセットアップを切り替えて、ありがとうページにリダイレクトする必要がありました。電子メールは送信されますが、メールが送信されると私はリダイレクトされません。代わりに内部サーバーエラーが発生します。私の構文はちょうどオフですか?私はFTP以外のバックエンドにアクセスすることはできません。smtpでphpmailerを使用して、おはようございましページにリダイレクトするときにサーバーエラーが発生する

メールが届いています。それはオフに見えるだけのリダイレクトです。

<?php 

require_once('phpmailer/PHPMailerAutoload.php'); 

$toemails = array(); 

$toemails[] = array(
       'email' => '[email protected]', // Your Email Address 
       'name' => 'Recipient Name' // Your Name 
      ); 


$mail = new PHPMailer(); 

// If you intend you use SMTP, add your SMTP Code after this Line 
$mail->IsSMTP(); 
$mail->Host = "mail.domain.com"; 
$mail->SMTPDebug = 2; 
$mail->SMTPAuth = true; 
$mail->Port = 25; 
$mail->Username = "[email protected]"; 
$mail->Password = "PaSsWoRd"; 


if($_SERVER['REQUEST_METHOD'] == 'POST') { 
    if($_POST['template-contactform-email'] != '') { 

     $name = isset($_POST['template-contactform-name']) ? $_POST['template-contactform-name'] : ''; 
     $email = isset($_POST['template-contactform-email']) ? $_POST['template-contactform-email'] : ''; 
     $phone = isset($_POST['template-contactform-phone']) ? $_POST['template-contactform-phone'] : ''; 
     $company = isset($_POST['template-contactform-company']) ? $_POST['template-contactform-company'] : ''; 
     $subject = isset($_POST['template-contactform-subject']) ? $_POST['template-contactform-subject'] : ''; 
     $message = isset($_POST['template-contactform-message']) ? $_POST['template-contactform-message'] : ''; 

     $subject = isset($subject) ? $subject : 'New Message From Contact Form'; 

     $botcheck = $_POST['template-contactform-botcheck']; 

     if($botcheck == '') { 

      $mail->SetFrom($email , $name); 
      $mail->AddReplyTo($email , $name); 
      foreach($toemails as $toemail) { 
       $mail->AddAddress($toemail['email'] , $toemail['name']); 
      } 
      $mail->Subject = $subject; 

      $name = isset($name) ? "Name: $name<br><br>" : ''; 
      $email = isset($email) ? "Email: $email<br><br>" : ''; 
      $phone = isset($phone) ? "Phone: $phone<br><br>" : ''; 
      $company = isset($company) ? "Firm or Company Name: $company<br><br>" : ''; 
      $message = isset($message) ? "Message: \n$message<br><br>" : ''; 

      $referrer = $_SERVER['HTTP_REFERER'] ? '<br><br><br>This Form was submitted from: ' . $_SERVER['HTTP_REFERER'] : ''; 

      $body = "$name $email $phone $company $message $referrer"; 



      $mail->MsgHTML($body); 
      $sendEmail = $mail->Send(); 

      if($sendEmail == true): 
//ORIGINAL ECHO OF SUCCESS MESSAGE    
//echo '{ "alert": "success", "message": "' . $message_success . '" }'; 
//SWITCH TO REDIRECT 
header("Location: ../thank-you.php"); 
      else: 
       echo '{ "alert": "error", "message": "Email <strong>could not</strong> be sent due to some Unexpected Error. Please Try Again later.<br /><br /><strong>Reason:</strong><br />' . $mail->ErrorInfo . '" }'; 
      endif; 
     } else { 
      echo '{ "alert": "error", "message": "Bot <strong>Detected</strong>.! Clean yourself Botster.!" }'; 
     } 
    } else { 
     echo '{ "alert": "error", "message": "Please <strong>Fill up</strong> all the Fields and Try Again." }'; 
    } 
} else { 
    echo '{ "alert": "error", "message": "An <strong>unexpected error</strong> occured. Please Try Again later." }'; 
} 

?> 

フォーム:

<form class="nobottommargin" id="template-contactform" name="template-contactform" action="php/sendemail.php" method="post"> 

    <div class="form-process"></div> 

    <div class="col_half"> 
     <input type="text" id="template-contactform-name" name="template-contactform-name" value="" class="sm-form-control border-form-control required" placeholder="Name" /> 
    </div> 
    <div class="col_half col_last"> 
     <input type="email" id="template-contactform-email" name="template-contactform-email" value="" class="required email sm-form-control border-form-control" placeholder="Email Address" /> 
    </div> 

    <div class="col_half"> 
     <input type="text" id="template-contactform-phone" name="template-contactform-phone" value="" class="sm-form-control border-form-control" placeholder="Phone" /> 
    </div> 
    <div class="col_half col_last"> 
     <input type="text" id="template-contactform-company" name="template-contactform-company" value="" class="sm-form-control border-form-control" placeholder="Company Name" /> 
    </div> 

    <div class="clear"></div> 

    <div class="col_full"> 
     <input type="text" id="template-contactform-subject" name="template-contactform-subject" value="" class="sm-form-control border-form-control" placeholder="Subject" /> 
    </div> 

    <div class="col_full"> 
     <textarea class="sm-form-control border-form-control" id="template-contactform-message" name="template-contactform-message" rows="7" cols="30" placeholder="What do you think we should know?"></textarea> 
    </div> 

    <div class="col_full"> 
     <button class="button button-black noleftmargin topmargin-sm" type="submit" id="template-contactform-submit" name="template-contactform-submit" value="submit">Send Message</button> 
    </div> 

    <div class="clear"></div> 

    <div class="col_full hidden"> 
     <input type="text" id="template-contactform-botcheck" name="template-contactform-botcheck" value="" class="sm-form-control" /> 
    </div> 

</form> 
+0

詳細な説明については、サーバーのエラーログを確認してください。 –

+0

私はアクセス権がありません、そうでなければ、/ – sforcash

+0

はあなたがそれを探している感謝の気持ちです。リダイレクトが正常に動作していることをgoogle.comのようなものにリダイレクトしようとしましたか? – brad

答えて

0

この特定の例では、将来私はphpMailerが複数回ヘッダーを送信していて、サーバー上で競合が発生していると考えています。

解決方法は、プロセス全体が終了するまで出力をバッファし、すべてを一度に送信することでした。これは、html形式( "<?"の直後)で参照される "アクション" PHPファイルの最初にob_start();を使用して行われ、そのファイルの最後に(?>の直前)ob_end_flush();となりました。

誰かが私を訂正するかもしれませんが(私は明らかにPHPの専門家ではありません)、理解しているように、これはバッファ内のすべてのヘッダー情報を保持しています。 。

それが正しい方法であれば、それは解決し、ページは意図したとおりの「ありがとう」ページにリダイレクトされます。誰かがより良い説明を持っているなら、それを書き留めておきましょう。私は他の誰かの答えを受け入れることを喜んでします。助けてくれてありがとう!

2

あなたの文の構文はオフになっている場合。どちらかを中括弧または$ var == TRUEの形式で使用しますか? '正誤'; //

追加ヘルプここTRUE取得:ここhttp://php.net/manual/en/control-structures.alternative-syntax.php

との:あなたの要求ごととしてhttps://www.w3schools.com/php/php_if_else.asp

、それがあれば構文であることを確認するために最初にこれを実行します。

if($sendEmail == true) 
    { 
    header("Location: ../thank-you.php"); 
    } 
    else { } 

また、$ sendEmailは真ではありません。メールはエラーを返すことがありますhttps://pear.php.net/manual/en/package.mail.mail.send.php

+0

私はこの構文が無効であると考えていました。中括弧で適切な構文で完全な行を私に見せてくれるように頼むのは大変ですか?私はあなたを利用したくありませんが、私はPHPを通して自分のやり方をハックしています。いずれにしても心から感謝しています。 – sforcash

+0

私は自分の答えに試してみるためのスナップを追加しました。それが実行される場合、追加の条件文を追加します。 – Vbudo

+0

IT部門からの漠然としたフィードバック: "コールが行われる前にヘッダーがすでに送信されている場合があります。この場合、できるだけコード内でリダイレクトコールを高くすることをお勧めします。または出力バッファリングをオンにして、呼び出し前にヘッダーが送信されないようにします。 この呼び出しが行われる前にユーザーに表示される可能性のあるものがあれば、redirectディレクティブは常にバッファーの最初のものの1つになります – sforcash

関連する問題