2012-02-13 102 views
2

我的网站上有一个联系表,它实际上工作:D 问题是,电子邮件结束在垃圾邮件文件夹。我试图做的东西与标题部分,但似乎没有工作。php电子邮件 - 如何避免邮件结束在垃圾邮件框

任何人都可以帮助我吗?

感谢

<?php 
    ini_set("display_errors", "0"); 
    $post_data = filter_input_array(INPUT_POST, FILTER_SANITIZE_SPECIAL_CHARS); 

    $name = $post_data["name"]; 
    $email = $post_data["email"]; 
    $phone = $post_data["phone"]; 
    $website = $post_data["website"]; 
    $message = $post_data["message"]; 



    # select data that needs validation 
    $validate = array(
     'required' => array($name,$email,$message), 
     'validEmail' => array($email), 
     'validNumber' => array($phone), 
     'validAlpha' => array($name) 
    ); 
    $formcontent = "Name: $name \nE-Mail: $email \nPhone: $phone \nWebsite: $website \nMessage: $message \n"; 
    $formcontent = wordwrap($formcontent, 70, "\n", true); 

    $recipient = "[email protected]"; 
    $subject = "Contact Messenbrink.eu"; 

    /*$mailheader = "From: $email \r\n";**/ 

    $mailheader .= "Reply-To: $name <$email>\r\n"; 
    $mailheader .= "Return-Path: $name <$email>\r\n"; 
    $mailheader .= "Content-Type: text/plain\r\n"; 
    $mailheader .= "Organization: Sender Organization\r\n"; 
    $mailheader .= "MIME-Version: 1.0\r\n"; 
    $mailheader .= "Content-type: text/plain; charset=iso-8859-1\r\n"; 
    $mailheader .= "X-Priority: 3\r\n"; 
    $mailheader .= "X-Mailer: PHP". phpversion() ."\r\n"; 
    $mailheader .= "From: $name <$email>\r\n"; 

    function sendMail() { 
     global $formcontent, $recipient, $subject, $mailheader; 
     mail($recipient, $subject, $formcontent, $mailheader); 
    } 

    # error messages 
    $errorsMsgs = array(
     'required' => 'Please fill out all required fields.', 
     'validEmail' => 'is an invalid email address.', 
     'validNumber' => 'is an invalid number.', 
     'validAlpha' => 'contains invalid characters. This field only accepts letters and spaces.' 
    ); 

    $errorMarkup = "<h1>We found a few errors :-(</h1><h2>Please fix these errors and try again</h2><ol>"; 
    $errorMarkupEnd = "</ol>"; 
    $successMarkup = "<h1>Success!</h1><h2>Your form was sent successfully.</h2>"; 
    $backMarkup  = "<a href=\"" . $_SERVER['HTTP_REFERER'] . "\">Back to form</a>"; 

    # begin state 
    $valid = true; 

    # loop through fields of error types 
    foreach ($validate as $type => $fields) { 
     # loop through values of fields to be tested 
     foreach ($fields as $value) { 
      # throw error if value is required and not entered 
      if ($type === 'required' && strlen($value) === 0) { 
       $errorMarkup .= "<li>$errorsMsgs[$type]</li>"; 
       $valid = false; 
       break; 
      } 
      else if (
       $type === 'validEmail' && !filter_var($value, FILTER_VALIDATE_EMAIL) || 
       $type === 'validNumber' && !preg_match('/^[0-9 ]+$/', $value) || 
       $type === 'validAlpha' && !preg_match('/^[a-zA-Z ]+$/', $value) 
      ) { 
       if (strlen($value) === 0) {break;} # skip check if value is not entered 
       $errorMarkup .= "<li>\"$value\" $errorsMsgs[$type]</li>"; 
       $valid = false; 
       continue; 
      } 
     } 
    } 

    if ($valid) { 
     sendMail(); 
     $body = $successMarkup . $backMarkup; 
     $title = "Form sent"; 
    } else { 
     $body = $errorMarkup . $errorMarkupEnd . $backMarkup; 
     $title = "Form errors"; 
    } 

    # write html ouput 
    echo "<!DOCTYPE html><head><title>$title</title><style type=\"text/css\">body{margin:100px;font:16px/1.5 sans-serif;color:#111}h1{font-size:32px;margin:0;font-weight:bold}h2{font-size:18px;margin:0 0 20px 0}ol,li{list-style-position:inside;padding-left:0;margin-left:0}</style></head><body>$body</body></html>"; 
?> 

回答

5

它与PHP代码无关,但要确保电子邮件是从服务器上托管的域发送的。这意味着使用你的Gmail地址通过PHP发送是个不错的主意。每个离开服务器的邮件都需要签名,并且需要有SPF记录

这通常是因为在DNS中没有设置正确的SPF记录。这可以根据您使用的软件轻松完成。如果你使用cPanel,那么这几乎是两个步骤。

一些链接: http://www.emailquestions.com/help-desk/2418-why-do-my-own-emails-go-into-spam.html http://www.google.co.uk/search?的SourceID =铬&即= UTF-8 & Q = SPF +记录 http://www.techtalkpoint.com/articles/setting-up-spf-records-in-cpanel-whm-and-namecheap/

+0

非常感谢你:) – 2012-02-13 13:31:37

+0

也是SMTP的声誉问题。所以每次你的电子邮件反弹,或者如果你不清理你的邮件列表,那么你的IP地址的声誉就会下降。更有可能你的电子邮件最终会出现在垃圾邮件中(它尤其适用于三大热门,雅虎,Gmail) – Khuram 2012-12-19 19:51:42

0

它可能正在使用的SMTP无效。

如果联系表单仅用于发送电子邮件到一个邮箱文件夹,我会在那里设置一个规则,不要将其标记为垃圾邮件。要么或实际验证您的smtp。

0

垃圾邮件不会被某些设置过滤,它会根据您的单词选择进行过滤,邮件的外观以及发件人电子邮件地址的知名度。如果你想避免垃圾邮件列表,你必须以一种听起来不会有垃圾邮件的方式说出来。

0

我的一个建议是让电子邮件的发件人地址成为用于发送这些邮件的实际邮件帐户的电子邮件地址,而不是客户的电子邮件帐户。如果电子邮件来自他们的电子邮件地址,而不是来自该域中的服务器,您的电子邮件提供商可能会认为他们在欺骗。

您可以将客户的电子邮件地址放在电子邮件的正文中,以便知道其来源。

1

确保消息源有效。除此之外,你可以在PHP中做很多事情。其余的内容取决于您的邮件内容,邮件服务器和收件人服务器的垃圾邮件过滤器。

尝试确保标题中的数据与正常消息中通常显示的内容相匹配。例如,您的From和Return-Path域名最好与您发送的服务器匹配。

我注意到你只是使用\n作为正文中的行分隔符。无论您使用的操作系统如何,它应该是\r\n

理想情况下,研究RFC 2822。如果您没有时间这样做,至少应将您的标题与您认为有效的其他电子邮件进行比较。如有可能,请匹配标题的顺序,包括在相应的位置放置相同数量的空行。

0

我的Gmail出现类似的问题,我只是选择了电子邮件,并设置为“非垃圾邮件”现在我的服务器发送的所有电子邮件,当有人使用我网站上的联系表单时,最终收件箱文件夹中。希望这可以帮助。

相关问题