2015-04-29 96 views
0

我的代碼片段附在下面。Php電子郵件不發送

我已經設法讓這個工作在另一個頁面上,所以我只是複製並粘貼了該進程和前端代碼,並將變量更改爲新頁面,但它不工作。我的PHP日誌沒有顯示任何未定義的內容,也沒有引發任何錯誤。我正在使用phpmailer,並且電子郵件驗證是在另一個文件中處理的,該文件被證實可以正常工作,所以問題不在那裏。

我認爲問題在於process.php文件。

前端:

  <form class="contact" name="contact"> 
       <input type="hidden" name="to_email" value="<?= $this->user->user_email; ?>" /> 

       <p>Enter your enquiry on the form below.</p> 
       <div class="input-group"> 
       <span class="input-group-addon" id="basic-addon1">Message</span> 
       <textarea class="form-control" name="message" rows="5"></textarea> 
       </div> 
       <br><br> 
       <div class="input-group"> 
       <span class="input-group-addon" id="basic-addon1">Phone Number</span> 
       <input type="text" style="color: #333333" name="phone" class="form-control" placeholder="Optional" aria-describedby="basic-addon1"></input> 
       <span class="input-group-addon" id="basic-addon1">Contact Name</span> 
       <input type="text" style="color: #333333" name="from_name" class="form-control" aria-describedby="basic-addon1" value="<?= $this->user->user_contact_name; ?>"></input> 
       </div> 
       </form> 

前端腳本:

$(document).ready(function() { 
     $("input#submit").click(function(){ 
      $.ajax({ 
       type: "POST", 
       url: "profile/process", // 
       data: $('form.contact').serialize(), 
       success: function(msg){ 
        alert("Your message has been sent, thanks!"); 
       }, 
       error: function(){ 
        alert("failure"); 
       } 
      }); 
     }); 
    }); 
</script> 

Process.php

+0

'$ to_email'在哪裏定義? – Twisty

+0

@Twisty - 我有一堆設置變量在那裏進行測試,並在我輸入這個問題時將它們重命名,這實際上是爲了$。我現在編輯它。 – hylian

+0

那麼'$ _POST ['name']'是否會通過?如果沒有設置,會導致您的腳本永遠不會發送電子郵件,並且不會出錯。看到我發佈的答案。 – Twisty

回答

0

如果您使用的是外部郵件服務器:

  • Gmail的:您的服務器可能被標記爲「不尋常的活動」,並由此發送郵件的過程中一直停留在SMTP錯誤:無法驗證。例如,當您在馬來西亞註冊了您的Gmail帳戶時,就會發生這種情況,然而,您已嘗試從美國發送郵件。請與您的身份驗證錯誤的調試

    $mail->SMTPDebug = 3; 
    
  • 其他郵件服務商:如果您使用其他郵件服務提供商,例如:從發送未經請求的cPanel虛擬主機,你可能會被禁止使用的服務器堵塞/羣發郵件,您可以檢查調試消息(見上圖),看看如果您使用的是本地郵件服務器發生什麼

  • 大多數ISP封鎖了outgoi大多數時間郵件與垃圾郵件作鬥爭。檢查調試消息以查看發生了什麼。
+0

這似乎是答案,郵件發送3/10次,兩者之間沒有真正的一致性。看起來Gmail並不是這裏最好的解決方案。 – hylian

0

事情並沒有看的權利:

<?php 
$to = strip_tags($_POST['to_email']); 
$name = isset($_POST['name'])?strip_tags($_POST['from_name']):""; 
$email = '[email protected]'; 
$message = strip_tags($_POST['message']); 
$email_body = "You have received a new message. ". 
     " Here are the details:\n Name: $name \n ". 
     "Email: $email\n Message \n $message"; 
$mail = new Mail; 
$mail_sent = $mail->sendMail(
     $to, 
     $email, 
     $name, 
     Config::get('EMAIL_CONTACT_SUBJECT'), 
     $email_body 
); 
?> 
+0

使用上面它給出了相同的結果,仍然給出了成功的消息,但沒有電子郵件。實際上發送郵件可能存在問題。 – hylian

+0

你必須檢查你的主人。查看您是否可以從中繼點捕獲SMTP日誌。你能從對象中發現錯誤嗎?你可能需要檢查'$ mail_sent'是否有錯等。有些輸出會很好。 – Twisty

+0

我正在使用gmail發送,因此不幸的是沒有日誌。我會嘗試添加錯誤報告。 – hylian