PHP 通过电子邮件发送垃圾邮件的邮件功能(gmail 除外)

PHP mail function through email to junk except gmail

我正在尝试在提交表单时发送具有 PHP mail() 功能的电子邮件。除 GMAIL 外,电子邮件将发送至 spam/junk,我已尝试使用 yahoo 和 outlook 作为其他电子邮件服务提供商。

我知道还有其他解决方案,例如 PHP 邮件程序或使用 SendGrid 或 Mailgun 等第三方服务发送电子邮件,但我想知道是否有任何其他方法可以绕过垃圾邮件过滤器在其他电子邮件提供商中,例如我目前正在绕过 Gmail。

Mail.php

<?php

function autoResponderEmail($name, $email) {
    
    $subject = "Thank you for submitting the form";
    $from = "email@example.com";
    $organization = "Organization Name Here";
    $message = "Thank you " . $name ." for contacting us. We will be in touch with you shortly." . "\n\n" . "Regards,\n" . $organization . " Team";
    
    $headers .= "Reply-To: ".$organization." <".$from.">\r\n"; 
    $headers .= "Return-Path: ".$organization." <".$from.">\r\n"; 
    $headers .= "From: ".$organization." <".$from.">\r\n";  
    $headers .= "Organization: ".$organization."\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" ;
    
    $sendMail = mail($email, $subject, $message, $headers);

    if ($sendMail) {
        header('Location: ./index.html');

    } else {
        alert('Failed to send email');
    }
    
}

if(isset($_POST['submit'])){
    $to = "email@example.com";
    $organization = "Organization Name Here";
    $full_name = $_POST['full_name'];
    $from = $_POST['email_address'];
    $phone = $_POST['phone'];
    $message = $_POST['message'];
    
    
    $detail .= "Name: " . $full_name . "\r\n";
    $detail .= "Email: " . $from . "\r\n";
    $detail .= "Phone: " . $phone . "\r\n";
    $detail .= "Subject: New Contact Inquiry" . "\r\n";
    $detail .= "Organization: " . $organization . "\r\n";
    $detail .= "Message: " . $message . "\r\n";
    
    $headers .= "Reply-To: ".$organization." <".$to.">\r\n"; 
    $headers .= "Return-Path: ".$organization." <".$to.">\r\n"; 
    $headers .= 'Cc: waqas.jamal@sixlogs.com' . "\r\n";;
    $headers .= "From: ".$organization." <".$to.">\r\n";  
    $headers .= "Organization: ".$organization."\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" ;

    $sendMail = mail($to, $subject, $detail, $headers);

    if ($sendMail) {
        autoResponderEmail($full_name, $from);
    } else {
        alert('Failed to send email');
    }


};

?>

没有。如果有办法绕过垃圾邮件过滤器,它们就不会是垃圾邮件过滤器了。

查看已放入垃圾邮件的已接收邮件的原始来源。大多数电子邮件提供商会添加 header 解释它如何以及为何最终成为垃圾邮件。

您在这段代码中犯了很多错误,可能会被标记为垃圾邮件:

您正在设置 return-path header。这是对 RFC 的违反,因为那是接收者的工作。如果要设置信封发件人,使用additional_params参数中的-f选项为mail()

您没有在此处进行任何 DKIM 签名。可能是您的本地邮件服务器正在为您执行此操作,但如果您没有这样做,则可能是原因。

在您的第二个示例中,您伪造了发件人地址,这几乎总是会将您的邮件标记为垃圾邮件。如果您希望能够回复提交者的地址,请使用您自己的 (non-forged) 地址作为发件人地址,并将提交者的地址添加为 reply-to.

您的脚本容易受到 header 注入攻击。

您没有对您的消息 body 进行任何处理,并且它包含 user-supplied 内容,因此很可能会导致 incorrectly-encoded 可能构成漏洞的消息,尤其是当再加上 header 可能会导致可注射附件的注射。

这就是人们使用像 PHPMailer 这样的库来帮助您避免所有这些问题的原因。