BASE64_LENGTH_79_INF: SpamAssasin phạt các email giao dịch


9

Tôi nhận thấy rằng các email giao dịch từ một cửa hàng Magento thường bị đánh dấu là thư rác. Apache SpamAssasin cho 2.0điểm từ quy tắc BASE64_LENGTH_79_INF .

Giải thích quy tắc nêu:

Theo http://en.wikipedia.org/wiki/Base64 , cơ sở 64 chỉ nên dài 76 ký tự, vì vậy những thứ này không có định dạng.

Từ bài viết Wikipedia được liên kết:

MIME không chỉ định độ dài cố định cho các dòng được mã hóa Base64, nhưng nó chỉ định độ dài dòng tối đa là 76 ký tự. Ngoài ra, nó xác định rằng bất kỳ ký tự chữ cái phụ nào cũng phải được bỏ qua bởi bộ giải mã tuân thủ, mặc dù hầu hết các triển khai đều sử dụng cặp dòng mới CR / LF để phân định các dòng được mã hóa.

Vì vậy, có vẻ như nội dung được mã hóa base64 không được chia thành các dòng như mong đợi. Có ai gặp phải như vậy? Điều gì có thể gây ra định dạng xấu này?

Câu trả lời:


9

Trong Zend Framework, magento/lib/Zend/Mime.phpthực hiện một const LINELENGTH = 72;nhưng hằng số được ghi đè app/code/core/Zend/Mime.phpvà đặt thành 200. Bạn có thể ghi đè app/code/core/Zend/Mime.phpbằng các cơ chế thông thường của Magento và thay đổi việc thực hiện encodephương thức, thay thế self :: LINELENGTH bằng một hằng số khác:

public static function encode($str, $encoding, $EOL = self::LINEEND)
{
    switch ($encoding) {
        case self::ENCODING_BASE64:
           // original: return self::encodeBase64($str, self::LINELENGTH, $EOL);
           return self::encodeBase64($str, 72, $EOL); // hardcoded value, just to emphasize the meaning

        case self::ENCODING_QUOTEDPRINTABLE:
            return self::encodeQuotedPrintable($str, self::LINELENGTH, $EOL);

        default:
            /**
             * @todo 7Bit and 8Bit is currently handled the same way.
             */
            return $str;
    }
}

/ Chỉnh sửa: ban đầu tôi thay thế self :: LINELENGTH bằng Zend_Mime :: LINELENGTH; điều này sẽ không hoạt động vì trình tải tự động sẽ luôn tải lớp Zend_Mime từ lõi Magento thay vì lớp từ lib / Zend.


Có một lý do cho mã hóa cứng đến 72 chứ không phải 76?
raduparvan

1
Việc triển khai ban đầu của Zend_Mime là const LINELENGTH = 72; (xem lib/Zend/Mime.php) vì vậy tôi thấy không có lý do gì để không tin vào điều đó; có lẽ sự khác biệt với 76 được sử dụng cho kết thúc dòng. Mã hóa giá trị thay vì sử dụng hằng số thích hợp chỉ để hiển thị điểm. Trong thực hiện thực tế, giá trị đó phải sống trong một hằng số. / Chỉnh sửa: Việc triển khai các cách Zend_Mime::encodeBase64()sử dụng chunk_splitphân tách chuỗi trong $ chunklen sau đó thêm $ end (xem php.net/manual/en/feft.chunk-split.php )
Adi

1

Máy chủ thư (SMTP) của bạn được thiết lập như thế nào? Bản ghi SPF của bạn có đúng không?

Có nhiều lý do tại sao thư có thể được tôi đánh dấu là thư rác, nội dung chỉ là một phần của nó.

Thêm thông tin ở đây: https://blog.amasty.com/5-steps-for-no-spam-e-mails-in-magento/


Tôi đang tìm kiếm lý do cụ thể này, chỉ liên quan đến nội dung. Nhưng bài viết được liên kết chứa một chút thông tin hữu ích: "Magento theo mặc định sử dụng 200 cho độ dài dòng có thể in được. Điều này có thể được thay đổi bằng cách ghi đè lớp Zend_Mime." - cảm ơn!
Fabian Schmengler
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.