PHP mail()表单发送到GMAIL垃圾邮件

时间:2012-08-30 00:28:24

标签: php gmail html-email

我知道这个问题已在这里解决了几次。我尝试按照说明设置正确的标题,我的电子邮件仍然遇到Gmail中的垃圾邮件过滤器问题。

如果有人可以请一看我尝试过的东西,我真的很感激。下面的代码没有添加标题,如下所述:http://www.velvetblues.com/web-development-blog/avoid-spam-filters-with-php-mail-emails/

提前致谢。

define("WEBMASTER_EMAIL", 'myName@mydomain.com');
if($post)
{
    $name    = stripslashes($_POST['name']);
    $email   = trim($_POST['email']);
    $subject = trim($_POST['subject']);
    $message = stripslashes($_POST['message']);

    $error = '';

    // Check name
    if(!$name)
        $error .= 'Name required! ';

    // Check email
    if(!$email)
        $error .= 'E-mail required! ';

    if($email && !ValidateEmail($email))
        $error .= 'E-mail address is not valid! ';

    // Check message
    if(!$message)
        $error .= "Please enter your message!";

    if(!$error)
    {

        $mail = mail(WEBMASTER_EMAIL, $subject, $message,
            "From: ".$name." <".$email.">\r\n"
            ."Reply-To: ".$email."\r\n"
            ."X-Mailer: PHP/" . phpversion());

        if($mail)
            echo 'OK';
    }
    else
        echo '<div class="errormsg">'.$error.'</div>';
}

4 个答案:

答案 0 :(得分:11)

使用此代码

 $to = Email;
 $subject = subject ;
 $body = "<div> hi hi .. </div>";

    $headers = 'From: YourLogoName info@domain.com' . "\r\n" ;
    $headers .='Reply-To: '. $to . "\r\n" ;
    $headers .='X-Mailer: PHP/' . phpversion();
    $headers .= "MIME-Version: 1.0\r\n";
    $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";   
if(mail($to, $subject, $body,$headers)) {
  echo('<br>'."Email Sent ;D ".'</br>');
  } 
  else 
  {
  echo("<p>Email Message delivery failed...</p>");
  }

答案 1 :(得分:4)

我认为这是你的问题:

 "From: ".$name." <".$email.">\r\n"

由于您不是gmail,hotmail或您的用户电子邮件提供商,您不能拥有“From:otherdomain.com”,然后通过“mail.yourdomain.com”发送邮件 - 这很可能会将您的邮件转移到垃圾邮件文件夹中。

尝试

 "From: YourWebsiteName <noreply@yourwebsite.com>\r\n"
."Reply-To: ".$name." <".$email.">\r\n"

代替。

另外:你的代码非常不受欢迎,也是一个主要的垃圾邮件目标 - 谷歌“电子邮件标题注入php”!

答案 2 :(得分:0)

Google不仅会对网站进行约束,还会对过去曾经有许多用户通过网络发送垃圾邮件的服务提供商进行约束。 如果您注册了谷歌认为是垃圾邮件发送者的这些服务提供商之一,这可能是您的php mail()邮件在gmail中插入垃圾邮件箱的原因。尝试与您的服务器提供商聊聊此问题。

在这种情况下,您会在“垃圾邮件”消息中收到Google发出的警告:

  

“为什么垃圾邮件中有这个消息?我们发现了很多消息来自   home.pl是垃圾邮件。了解更多“

答案 3 :(得分:0)

我知道这个问题已经问了很久了,但是我想在这里放弃2020年的答案,以便对新访客有潜在的帮助。

请注意:

  • 此答案用作通用答案,将要求您根据您使用的表单输入来编辑一些详细信息。
  • 您还需要将标题等中的电子邮件地址更新为与您的域连接的电子邮件地址。
  • 此解决方案假定您使用的是Google Recaptcha。如果不是,则删除有关“ Google recapthca”的部分。
  • 此脚本增加了不应删除的安全性和验证。
  • 如果要使用Sweet Alert,则应通过CDN or NPM将其安装到您的网站/应用中。

一些用于创建自定义Sweet Alert警报的Javascript,这些警报会在邮件发送时触发:

// Custom SweetAlert alert that gets triggered on email send
function enquirySent() {
    swal({
      title: "Email sent!",
      text: "Thank you for your email. We'll be in contact ASAP.",
      icon: "success",
      button: "Okay",
    });
}
function enquiryNotSent() {
    swal({
      title: "Oops!",
      text: "Your email was NOT sent due to an error.",
      icon: "error",
      button: "Okay",
    });
};

用于发送邮件的PHP脚本:

<?php
    if (isset($_POST['submit'])) {

        // For the Google recaptcha
        $curlx = curl_init();
        curl_setopt($curlx, CURLOPT_URL, "https://www.google.com/recaptcha/api/siteverify");
        curl_setopt($curlx, CURLOPT_HEADER, 0);
        curl_setopt($curlx, CURLOPT_RETURNTRANSFER, 1); 
        curl_setopt($curlx, CURLOPT_POST, 1);
        $post_data = [
            'secret' => 'YOUR CAPTCHA SECRET KEY',
            'response' => $_POST['g-recaptcha-response']
        ];
        curl_setopt($curlx, CURLOPT_POSTFIELDS, $post_data);
        $resp = json_decode(curl_exec($curlx));
        curl_close($curlx);
        // Google recaptcha end

        // Form details (sanitized)
        $name = htmlspecialchars($_POST['name']);
        $surname = htmlspecialchars($_POST['surname']);
        $email = htmlspecialchars($_POST['email']);
        $message = htmlspecialchars($_POST['message']);

        // Mail headers and details
        $email_from = 'youremail@yourdomain.com';
        $email_body = "You have received a new message from the user $name $surname.\nHere is the message:\n\n".$message;

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

        $error = false;

        // Some more input validation/sanitizing
        if (!preg_match("/^[a-zA-Z ]*$/",$first_name) && $first_name!="") {
            $error = true; 
        }
        if (!preg_match("/^[a-zA-Z ]*$/",$last_name) && $last_name!="") {
            $error = true; 
        }
        if (!filter_var($email, FILTER_VALIDATE_EMAIL) && $email!="") {
            $error = true;
        }

        function IsInjected($str) {
            $injections = array('(\n+)',
                   '(\r+)',
                   '(\t+)',
                   '(%0A+)',
                   '(%0D+)',
                   '(%08+)',
                   '(%09+)'
                   );
                       
            $inject = join('|', $injections);
            $inject = "/$inject/i";
            
            if (preg_match($inject,$str)) {
              return true;
            } else {
              return false;
            }
        }

        if (IsInjected($visitor_email)) {
            echo "Bad email value!";
            exit;
        }

        // Sending the email
        if ($error == false) {
            $to = "youremail@yourdomain.com";
            $subject = "Enquiry from website";
            mail($to, $subject, $email_body, $headers);

            // Calling the email sent / not sent alerts
            echo '<script type="text/javascript">',
                'enquirySent()',
                '</script>';
        } else {
            echo '<script type="text/javascript">',
                'enquiryNotSent()',
                '</script>';
        }
    }
?>