零星的php表单邮件

时间:2014-06-11 13:26:25

标签: php email

我在不同的网站上使用php电子邮件表单,偶尔可以使用。有时电子邮件会被发送,有时它会消失在黑洞中。这发生在不同的服务器上(Dreamhost,Bluehost)。电子邮件未显示在垃圾邮件中。

我有一个标有“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="info@MyWebsite.com";                        

    $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._])+@([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>";

1 个答案:

答案 0 :(得分:0)

我回答了我自己的问题,以防其他人遇到此问题。问题确实在两台主机的服务器端。作为阻止电子邮件欺骗的一部分,他们会关注&#34; From&#34;领域。

在Dreamhost的案例中,他们不允许&#34; From&#34;字段来自Dreamhost服务器以外的任何地方。使用Bluehost,它必须是一个有效的电子邮件地址,他们能够追溯。 (我在测试中使用了一个虚构的电子邮件地址。)

我在两种情况下使用的解决方法是使用访问者的电子邮件地址&#34; From&#34;领域。我在该字段中使用自己的电子邮件地址,并将访问者的电子邮件地址放在&#34;回复&#34;而是场。

我已经有一个清理功能来检查返回的任何数据。另外,我添加了另一层保护,以确保使用以下代码不会将任何内容插入到标题字段中:

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

我希望这些信息有所帮助。