php
  • email
  • 2014-06-11 62 views 0 likes 
    0

    我在不同的網站上使用php電子郵件形式,偶爾工作。有時郵件會被髮送,有時會消失在黑洞中。這發生在不同的服務器上(Dreamhost,Bluehost)。這些電子郵件沒有顯示在垃圾郵件中。零星的php形式的郵件

    我有一個標記爲「URL」的隱藏字段,我試圖阻止垃圾郵件機器人。這有可能是絆倒了嗎?對我而言,它有時可以工作,而在其他時間工作,這是毫無意義的。

    這是代碼:

    $thebox = "<textarea name='comment' rows='9' cols='70' wrap='hard' style='background-color: #E8E8E8;'></textarea>"; 
        $error_name = ""; 
        $error_email = ""; 
        $error_message = ""; 
    
    if(!isset($_POST['submit'])) { 
        $name = ""; 
        $email = ""; 
    } 
    
    if(isset($_POST['submit'])) 
    { 
        $url = cleanup($_POST['url']);   // this field should be empty 
          if (!empty($url)) { exit; }  // if it's not, exit the script  
    
        $name=cleanup($_POST['name']); 
        $email=cleanup($_POST['email']); 
        $message=cleanup($_POST['comment']); 
        $subject="Email sent via MyWebsite.com website"; 
    
            $find = array("\r\n", "\n", "\r", "\r\n\r\n"); 
            $message = str_replace($find, "<br />",$message); 
            $message = stripslashes($message); 
            $MailTo="[email protected]";       
    
        $bad_name="Please fill in your name."; 
        $bad_email="Please provide a valid e-mail address."; 
        $bad_message="You forgot to type in a message."; 
        $error = 0; 
    
        $error_message=""; 
         if ((empty($message)) || (strlen($message)<5)) 
          { 
           $error_message = $bad_message; 
           $error = 1; 
          } 
    
         if (!empty($message)) 
          { 
         $thebox="<textarea name='comment' rows='9' cols='70' wrap='hard' style='background-color: #E8E8E8;'>".$message."</textarea>"; 
          } 
    
         if ((!preg_match("/^([a-zA-Z0-9._])[email protected]([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-]+)+/", $email)) || (empty($email))) 
           { 
            $error = 1; 
            $error_email = $bad_email; 
           } 
         if (empty($name)) 
          { 
           $error = 1; 
           $error_name = $bad_name; 
          } 
    
        if (!empty($name) && !empty($email) && !empty($message) && $error==0) 
        { 
    
    
        $header = "From: '$name' <$email>\r\n" . 
         "Reply-To: $email\r\n". 
         "Return-Path: $email\r\n". 
         'X-Mailer: PHP/' . phpversion() . "\n" . 
         "MIME-Version: 1.0\n" . 
         "Content-Type: text/html; charset=utf-8\r\n" . 
         "Content-Transfer-Encoding: 8bit\r\n\r\n"; 
    
        $Body = $message; 
    
    mail ($MailTo, $subject, $Body, $header); 
    
          echo "<p> &nbsp; </p> <p> &nbsp; </p> 
           <h3> 
           Your email has been sent. 
           Thank you! 
           </h3> 
           <p> &nbsp; </p> <p> &nbsp; </p><p> &nbsp; </p> <p> &nbsp; </p>"; 
    
    +0

    看來一切都很好。你問過你的託管服務提供商嗎?這可能是服務器端相關的問題。一些免費提供商正在對通過PHP發送的傳出郵件進行費率限制來限制垃圾郵件 –

    回答

    0

    我回答我的問題的情況下,任何人都運行到這個問題。這兩個主機在服務器端確實存在問題。作爲阻止電子郵件欺騙的努力的一部分,他們看「發件人」字段。

    在Dreamhost的情況下,他們不允許「來自」字段來自Dreamhost服務器以外的任何地方。使用Bluehost,它必須是一個有效的電子郵件地址,他們能夠追溯到。 (我在測試中使用了一個化妝郵件地址。)

    我在這兩種情況下使用的解決方法是在而不是在「發件人」字段中使用訪問者的電子郵件地址。我在該字段中使用自己的電子郵件地址,並將訪問者的電子郵件地址放在「答覆到」字段中。

    我已經有一個清理函數來檢查返回的任何數據。另外,我更多的保護以確保沒有任何的另一層插入使用此代碼的頭字段:

    $email= urldecode($email); 
    if (eregi("(\r|\n)", $email)) {exit();} 
    

    我希望這個信息是有一定的幫助。

    +0

    是的,我今年早些時候曾與Dreamhost發生過這個問題 – VikingBlooded

    相關問題