原先的邮件采用Content-Type: text/html
下面是X-Spam的得分情况,当 score 超过6分就被当作垃圾邮件处理了
X-Spam-Status: Yes, score=6.3 required=6.0 tests=CONTENT_TYPE_PRESENT, DIRECTUNKNOWN,HTML_MESSAGE,MIME_HTML_ONLY,ONLY1HOPDIRECT,RDNS_NONE, TO_NO_BRKTS_FROM_MSSP,TO_NO_BRKTS_NORDNS_HTML,URIBL_BLOCKED,UTF8 autolearn=no version=3.3.1 X-Spam-Report: * 0.0 URIBL_BLOCKED ADMINISTRATOR NOTICE: The query to URIBL was blocked. * See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block * for more information. * [URIs: handbook.jp] * -0.1 CONTENT_TYPE_PRESENT exists:Content-Type * 0.3 DIRECTUNKNOWN directly received spam from suspicious dynamic IP * 1.0 ONLY1HOPDIRECT ONLY1HOPDIRECT * 1.0 HTML_MESSAGE BODY: HTML included in message * 0.4 MIME_HTML_ONLY BODY: Message only has text/html MIME parts * -0.1 UTF8 RAW: UTF-8 message body * 1.3 RDNS_NONE Delivered to internal network by a host with no rDNS * 2.5 TO_NO_BRKTS_FROM_MSSP Multiple formatting errors * 0.0 TO_NO_BRKTS_NORDNS_HTML To: misformatted and no rDNS and HTML only
解决办法就是采用Content-Type: multipart/alternative
这种类型可以同时发送两种类型的邮件 text/plain 和 text/html, 大大降低邮件的 score
下面是采用multipart/alternative 这种类型的得分情况 因为低于6分 没有X-Spam-Report
X-Spam-Status: No, score=3.5 required=6.0 tests=CONTENT_TYPE_PRESENT, DIRECTUNKNOWN,HTML_MESSAGE,MULTIPART_ALTERNATIVE,ONLY1HOPDIRECT,RDNS_NONE, URIBL_BLOCKED,UTF8 autolearn=no version=3.3.1
下面是具体代码
function sendAlternativeMail($to, $from, $subject, $plainmessage, $htmlmessage, $bcc = null, $cc = null) { $to = base64($to); $from = base64($from); $subject = ‘=?UTF-8?B?‘ . base64_encode($subject) . ‘?=‘; $boundary = uniqid(‘np‘); //set header $headers = "MIME-Version: 1.0\r\n"; $headers .= "From: ".$from."\r\n"; $cc && $headers .= "Cc: $cc\n"; $bcc && $headers .= "Bcc: $bcc\n"; $headers .= "Content-Type: multipart/alternative;boundary=" . $boundary . "\r\n"; //set plain body $message = "\r\n\r\n--" . $boundary . "\r\n"; $message .= "Content-type: text/plain;charset=utf-8\r\n\r\n"; $message .= $plainmessage; //set html body $message .= "\r\n\r\n--" . $boundary . "\r\n"; $message .= "Content-type: text/html;charset=utf-8\r\n\r\n"; $message .= $htmlmessage; //end $message .= "\r\n\r\n--" . $boundary . "--"; return mail($to, $subject, $message, $headers); } //encode email address function base64($string){ if (!$string) { return null; } $array = explode(‘,‘, $string); foreach ($array as &$a) { $a = trim($a); if (preg_match(‘/(.*)(<[^>][email protected][^>]+>)$/U‘, $a, $match)) { $a = ‘=?UTF-8?B?‘ . base64_encode($match[1]) . ‘?=‘ . $match[2]; } } return implode(‘,‘, $array); }
参考资料:http://krijnhoetmer.nl/stuff/php/html-plain-text-mail/
时间: 2024-11-08 23:51:47