6

我知道这个问题已经在这里解决了几次。我尝试按照设置正确标题的说明进行操作,但我的电子邮件进入 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

4 回答 4

12

使用 此代码

 $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>");
  }
于 2012-08-30T00:46:02.513 回答
4

我认为这是你的问题:

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

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

尝试

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

反而。

另外:您的代码非常不可靠并且是主要的垃圾邮件目标 - 谷歌“电子邮件标头注入 php”!

于 2012-08-30T00:36:39.060 回答
0

谷歌倾向于不仅对网站进行处罚,而且对曾经有许多用户在网络上发送垃圾邮件的服务提供商进行处罚。如果您注册了谷歌识别为垃圾邮件发送者的这些服务提供商之一,这可能是您的 php mail() 消息落入 gmail 垃圾邮件箱的原因。尝试与您的服务器提供商讨论此问题。

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

“为什么这封邮件会出现在垃圾邮件中?我们发现很多来自 home.pl 的邮件都是垃圾邮件。了解更多”

于 2014-01-27T13:38:31.640 回答
0

我知道这个问题很久以前就被问过了,但我想我会在这里放弃 2020 年的答案,以便它可以潜在地帮助新访客。

请注意:

  • 此答案作为通用答案,将要求您根据您使用的表单输入编辑一些详细信息。
  • 您还需要将标题等中的电子邮件地址更新为连接到您的域的电子邮件地址。
  • 此解决方案假定您使用的是 Google Recaptcha。如果没有,那么只需删除有关“Google recapthca”的部分。
  • 此脚本添加了不应删除的安全性和验证。
  • 如果您要使用Sweet Alert,那么您应该通过CDN 或 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>';
        }
    }
?>
于 2020-07-05T12:54:39.490 回答