php
  • email
  • 2014-06-11 29 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

    相关问题