2013-04-28 250 views
-5

MYSqL工作正常,但我沒有收到電子郵件爲什麼?從PHP發送HTML電子郵件

<?php 
    //include the connection file 

    require_once('connection.php'); 

    //save the data on the DB and send the email 

     if(isset($_POST['action']) && $_POST['action'] == 'submitform') 
     { 
     //recieve the variables 

     $name = $_POST['name']; 
     $email = $_POST['email']; 
     $url = $_POST['url']; 
     $comment = $_POST['comment']; 
     $ip = gethostbyname($_SERVER['REMOTE_ADDR']); 

     //save the data on the DB 

     mysql_select_db($database_connection, $connection); 

     $insert_query = sprintf("INSERT INTO contacts (name, email, url, comment, date, ip) VALUES (%s, %s, %s, %s, NOW(), %s)", 
          sanitize($name, "text"), 
          sanitize($email, "text"), 
          sanitize($url, "text"), 
          sanitize($comment, "text"), 
          sanitize($ip, "text")); 

     $result = mysql_query($insert_query, $connection) or die(mysql_error()); 

     if($result) 
     { 
      //send the email 

      $to = "[email protected]"; 
      $subject = "message from website"; 

      //headers and subject 
      $headers = "MIME-Version: 1.0\r\n"; 
      $headers .= "Content-type: text/html; charset=iso-8859-1\r\n"; 
      $headers .= "From: ".$name." <".$email.">\r\n"; 

      $body = "New contact<br />"; 
      $body .= "Name: ".$name."<br />"; 
      $body .= "Email: ".$email."<br />"; 
      $body .= "Comment: ".$comment."<br />"; 
      $body .= "IP: ".$ip."<br />"; 

      mail($to, $subject, $body, $headers); 

      //ok message 

      echo "Your message has been sent"; 
     } 
     } 

     function sanitize($value, $type) 
     { 
     $value = (!get_magic_quotes_gpc()) ? addslashes($value) : $value; 

     switch ($type) { 
     case "text": 
      $value = ($value != "") ? "'" . $value . "'" : "NULL"; 
      break;  
     case "long": 
     case "int": 
      $value = ($value != "") ? intval($value) : "NULL"; 
      break; 
     case "double": 
      $value = ($value != "") ? "'" . doubleval($value) . "'" : "NULL"; 
      break; 
     case "date": 
      $value = ($value != "") ? "'" . $value . "'" : "NULL"; 
      break; 
     } 

     return $value; 
    } 
?> 
+2

我們可以讓你的代碼創建$ to,$ subject,$ headers變量的部分嗎? – 2013-04-28 04:06:53

+1

你在本地服務器上運行這個嗎?如果是,那麼你需要配置一個郵件(即。sendmail)服務器。 – 2013-04-28 04:12:53

+0

您需要在您的問題中發佈相關代碼。否則,我們無法幫助。 :/ – Plummer 2013-04-28 04:28:37

回答

5

當電子郵件突然停止時,從服務器發送電子郵件可能會非常棘手。如果發生故障,您肯定會想要實施某種日誌記錄。關於你的特定問題,這可能是各種各樣的事情。 MySQLmail()無關,所以一個工作對另一個工作沒有直接影響,除非你有代碼指示這樣的交互。這是一個相當技術性的解釋。

  1. 您最初發布的電子郵件地址爲aol.com。如果是這樣的話,那麼你會想看看AOL sender policies。他們可能在執行reverse look-up,而在MX record反向查找DNS時找不到您的服務器名稱。另外他們喜歡像SPF records,DKIMDomain-Keys這樣的東西。
  2. 如果您的web服務器的IP address或您的虛擬主機註冊的IP塊位於阻止列表中(共享主機往往會有多個網站發送電子郵件),您將不會收到該電子郵件。有幾個網站可以讓你檢查你的$_SERVER['SERVER_ADDR']是否在阻止列表中。例如,您可以嘗試:http://whatismyipaddress.com/blacklist-check
  3. 由於您要發送給AOL,因此您正在嘗試發送一個MIME HTML-only電子郵件,該郵件以HTML標記開頭。 (您可能會嘗試純文本。)
  4. 此外,由於您正在向AOL發送電子郵件(到您自己的地址),您可能更願意使用自己的地址進行測試,並且如果是這種情況,AOL有這種傾向從他們的電子郵件域中阻止向他們發送的電子郵件,但不會由他們發送。這可能看起來像中繼或欺騙嘗試。
  5. 如果您在本地網絡上,大多數ISP通常會阻止端口25,以防止蠕蟲和病毒從其網絡上託管的受感染計算機傳播。
  6. 如果您的PHP安裝中沒有安裝或配置您的sendmail客戶端,可能就是這種情況。檢查phpinfo()以查看它是否已安裝。
  7. 您的服務器可以運行類似,可能有從阻塞端口25的出站廣播IP表防火牆。(不太可能,但可能的。)
  8. 如果Sendmail的配置是否正確,您可以通過指定一個更新的配置文件登錄所有mail()交易記錄。這將告訴你電子郵件是否被反彈,以及服務器之間握手期間的任何響應。
+1

哇,你鍵入快速和或有很多空閒時間在你的手上:-) – 2013-04-28 04:51:19

+0

非常好解釋..謝謝@AbsoluteZero – Jinandra 2013-09-26 06:32:51