2012-10-23 78 views
1

我有什麼:

我正在使用PHP郵件功能發送電子郵件。我的標題如下:PHP郵件頭「base64編碼不必要」

<?php 
    $headers = "MIME-Version: 1.0\r\n" 
       ."Content-Type: text/plain; charset=utf-8\r\n" 
       ."Content-Transfer-Encoding: 8bit\r\n" 
       ."From: =?UTF-8?B?". base64_encode($from_name) 
       ."?= <$from_address>\r\n" 
       ."X-Mailer: PHP/". phpversion(); 
    mail($to, $subject, $body, $headers, "-f $from_address"); 
    ?> 

此代碼是從一個公認的計算器答案來源:https://stackoverflow.com/a/2801159/835950

我的問題:

垃圾郵件刺客被應用0.1處罰,原因如下:

0.1 FROM_EXCESS_BASE64 From:不必要的base64編碼

我的問題:

我該如何修改我的標題以避免這種懲罰。我只是刪除base64_encode函數?

回答

-1

我會刪除base64編碼並嘗試它。

關於PHP.net

我不認爲這是在二進制數據未來有作爲$ FROM_NAME

+0

當我刪除該函數時,我得到了一個更高(更糟糕)的垃圾郵件刺客評分:1.7 BAD_ENC_HEADER郵件在標題中的MIME編碼錯誤。我自己定義了$ from_name。這只是一個文本字符串。 –

+0

我環顧了一下,似乎大多數解決方案在生成郵件標題時使用base 64編碼器,我不知道是否有另一種編碼更適合 – Dukeatcoding

+0

嗯,至少我們知道它是必需的;我不確定爲什麼垃圾刺客認爲它是「不必要的」。 –

1

您需要檢測,如果的base64編碼UTF-8是真正需要的,或者如果所有字符以內ASCII範圍。這是一個有點難看,但工作原理:

<?php 
$headers = "MIME-Version: 1.0\r\n" 
      ."Content-Type: text/plain; charset=utf-8\r\n" 
      ."Content-Transfer-Encoding: 8bit\r\n" 
      ."From: ".(preg_match('/[^\x20-\x7f]/', $from_name)? 
      "=?UTF-8?B?". base64_encode($from_name) ."?=" : $from_name) 
      ." <$from_address>\r\n" 
      ."X-Mailer: PHP/". phpversion(); 
mail($to, $subject, $body, $headers, "-f $from_address"); 
?> 

另外,您可以使用檢測的mb_check_encoding字符集,但這正則表達式保持簡短。