請教熟 PHPMailer + ajax / jquery 師兄

小弟有個網頁最近要用返自己server 用phpmailer send 查詢email
成功send 到email 但 只要一行 $mail->send() 之後就回轉唔到 json
變左個網頁按完submit 唔識郁 唔會單出msgbox 又唔會reset 個form
己經搞左幾日都唔work 有冇師兄可以幫手睇睇 感謝萬分

ajax
  1. <script>
  2.         $('#contactForm').submit(function() {
  3.        
  4.         event.preventDefault();
  5.         var contact_name = $('#contact_name').val();
  6.         var contact_no = $('#contact_no').val();
  7.         var enquiry = $('#enquiry').val();
  8.         var email = $('#email').val();

  9.         grecaptcha.ready(function() {
  10.         grecaptcha.execute('key', {action: 'create_comment'}).then(function(token) {

  11.         $('#contactForm').prepend('<input type="hidden" name="g-recaptcha-response" value="' + token + '">');
  12.         $.post("Send.php",{email: email, contact_name: contact_name, contact_no: contact_no, enquiry: enquiry},function(result) {            
  13.         switch (result.e) {
  14.                         case "contact_name":
  15.                                 alert('聯絡人資料必須填上.');
  16.                                 $('#contact_name').focus();
  17.                         break;
  18.                         case "contact_no":
  19.                                 alert('聯絡電話必須填上.');
  20.                                 $('#contact_no').focus();
  21.                         break;
  22.                         case "enquiry":
  23.                                 alert('查詢內容必須填上.');
  24.                                 $('#enquiry').focus();
  25.                         break;
  26.                         case "mailer":
  27.                                 alert('查詢發生技術錯誤無法送出');
  28.                         break;
  29.                         case "captcha":
  30.                                 alert('閣下使用的網絡可能不安全, 沒能通過GOOGLE安全檢測,/n未能將信息送出.');
  31.                                 $('#reset').trigger('click');
  32.                         break;
  33.                         case "success":
  34.                                 alert('查詢訊息己被送出');
  35.                                 $('#reset').trigger('click');
  36.                         break;
  37.                 }
  38.        });
  39.      });;
  40.    });
  41. });
  42. </script>
複製代碼
send.php
  1. <?php

  2. use PHPMailer\PHPMailer\PHPMailer;
  3. use PHPMailer\PHPMailer\Exception;

  4. $contact_name = trim(filter_input(INPUT_POST, 'contact_name', FILTER_SANITIZE_STRING));
  5. $contact_no = trim(filter_input(INPUT_POST, 'contact_no', FILTER_SANITIZE_STRING));
  6. $email = trim(filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL));
  7. $enquiry = trim(filter_input(INPUT_POST, 'enquiry', FILTER_SANITIZE_STRING));

  8. header('Content-type: application/json');

  9. if (empty($contact_name)) {
  10.         echo json_encode(array("e" => "contact_name"));
  11. } else {
  12.        
  13.         if (empty($contact_no)){
  14.                 echo json_encode(array("e" => "contact_no"));
  15.         } else {
  16.        
  17.                 if(empty($enquiry)){
  18.                         echo json_encode(array("e" => "enquiry"));
  19.                 } else {

  20.                         if(!$captcha){
  21.                             echo '<h2>Please check the the captcha form.</h2>';
  22.                                 exit;
  23.                         }
  24.   
  25.                         $secretKey = "key";
  26.                         $ip = $_SERVER['REMOTE_ADDR'];

  27.                         // post request to server
  28.                         $url = 'https://www.google.com/recaptcha/api/siteverify';
  29.                         $data = array('secret' => $secretKey, 'response' => $captcha);

  30.                         $options = array(
  31.                            'http' => array(
  32.                            'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
  33.                            'method'  => 'POST',
  34.                            'content' => http_build_query($data)
  35.                         )
  36.                         );
  37.                        
  38.                         $context  = stream_context_create($options);
  39.                         $response = file_get_contents($url, false, $context);
  40.                         $responseKeys = json_decode($response,true);
  41.        
  42.                         if($responseKeys["success"]) {
  43.                                   // PHPMailer
  44.                                 //Load composer's autoloader
  45.                                 require_once 'vendor/autoload.php';
  46.                                 $Body = "<html>\n<Body><table>\n";
  47.                                 $Body .= "<tr><th>聨絡人名稱: </th><td>".$contact_name."</td></tr>\n";
  48.                                 $Body .= "<tr><th>聨絡電話: </th><td>".$contact_no."</td></tr>\n";
  49.                                 $Body .= "<tr><th>查詢內容: </th><td>".$enquiry."</td></tr>\n";
  50.                                 $Body .= "</table></body>\n</html>";
  51.                                
  52.                                 $mail = new PHPMailer(true);
  53.                                
  54.                                 $mail->IsSMTP();
  55.                                 $mail->SMTPDebug = 2;
  56.                                 $mail->SMTPAuth = true;
  57.                                 $mail->SMTPSecure = 'tls';
  58.                                 $mail->Host = 'tls://smtp.gmail.com';
  59.                                 $mail->Port = 587; // or 465
  60.                                 $mail->IsHTML(true);
  61.                                 $mail->Username = 'test@gmail.com';
  62.                                 $mail->Password = 'testing123';
  63.                                 $mail->SetFrom('test@gmail.com','網上查詢系統');
  64.                                 if (filter_var($email, FILTER_VALIDATE_EMAIL)) { $mail->addReplyTo($email);}
  65.                                 $mail->CharSet = 'UTF-8';
  66.                                 $mail->Subject = '網上查詢: '.$contact_name."-".$contact_no;
  67.                                        
  68.                                 $mail->Body = $Body;
  69.                                 $mail->AddAddress('info@gmail.com');
  70.                                 if ($mail->send()) {
  71.                                         echo json_encode(array("e" => "success"));
  72.                                 } else {
  73.                                         echo json_encode(array("e" => "mailer"));
  74.                                 }       
  75.                         } else {
  76.                                 echo json_encode(array("e" => "captcha"));
  77.                           }
  78.                 }
  79.         }
  80. }
  81. ?>
複製代碼

小弟有個網頁最近要用返自己server 用phpmailer send 查詢email
成功send 到email 但 只要一行 $mail->send ...
awinds 發表於 2019-10-6 01:06

tls://smtp.gmail.com

轉做

smtp.gmail.com

via HKEPC IR Extreme 4.2.3 - iOS(4.0.2)

TOP

本帖最後由 awinds 於 2019-10-6 12:13 編輯

回覆 2# hihihi123hk

多謝師兄回覆 試左都係一樣
email 係send 到 只係 return 唔到個 jason_encode
導致個網頁冇反應 唔知己經send 左出去
己經卡左係呢個位幾日.... 又冇出任何error 完全唔知點debug.

TOP

解決了
問題出在$mail->SMTPDebug = 2;
改返做 $mail->SMTPDebug = 0;
就正常了

TOP

解決了
問題出在$mail->SMTPDebug = 2;
改返做 $mail->SMTPDebug = 0;
就正常了 ...
awinds 發表於 2019-10-6 14:42



via HKEPC IR Extreme 4.2.3 - iOS(4.0.2)

TOP

本帖最後由 awinds 於 2019-10-6 15:23 編輯

回覆 5# hihihi123hk

上網抄例子 經常遇到....
跟住例子做完發現係唔work
呢次最慘係連出咩error 都冇
有排試
一句就玩左我幾日

TOP

回覆  hihihi123hk

上網抄例子 經常遇到....
跟住例子做完發現係唔work
呢次最慘係連出咩error 都冇  ...
awinds 發表於 2019-10-6 15:21

理論上 PHP Setting 有開 debug mode 應該會有字 throw error

熄咗 debug mode(Production Env) ,PHP code 炒嘅時候先會白畫面

via HKEPC IR Extreme 4.2.3 - iOS(4.0.2)

TOP

回覆 7# hihihi123hk

因為其實唔係PHP 錯
我之前己經試過只係行 send email d code
開左php debug 係冇任何 error
估唔到 開左smtp DEBUG mode 會影響 return 唔到json  

TOP