BASE64_LENGTH_79_INF: SpamAssasin штрафує транзакційні електронні листи


9

Я помітив, що транзакційні електронні листи від магазину Magento часто позначалися як спам. Apache SpamAssasin дає 2.0оцінку за правилом BASE64_LENGTH_79_INF .

У поясненні правила зазначено:

Згідно з http://en.wikipedia.org/wiki/Base64 , база 64 повинна мати довжину лише 76 символів, тому вони є поза форматом.

Із пов'язаної статті Вікіпедії:

MIME не визначає фіксовану довжину для кодованих Base64 ліній, але він задає максимальну довжину рядка 76 символів. Крім того, воно вказує, що будь-які надбуквені символи повинні ігноруватися сумісним декодером, хоча для більшості реалізацій пара CR / LF використовується для розмежування кодованих ліній.

Таким чином, схоже, що закодований контент base64 не розбивається на рядки, як очікувалося. Хтось стикався з тим самим? Що може спричинити цей поганий формат?

Відповіді:


9

У Zend Framework magento/lib/Zend/Mime.phpреалізує a, const LINELENGTH = 72;але константа перезаписується app/code/core/Zend/Mime.phpта встановлюється на 200. Ви можете перезаписати app/code/core/Zend/Mime.phpза допомогою регулярних механізмів Magento та змінити реалізацію encodeметоду, замінивши self :: LINELENGTH на іншу константу:

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;
    }
}

/ Редагувати: спочатку я замінив self :: LINELENGTH на Zend_Mime :: LINELENGTH; це не буде працювати, оскільки автозавантажувач завжди завантажить клас Zend_Mime з ядра Magento замість клавіш lib / Zend.


чи є причина жорсткого кодування до 72, а не до 76?
радупарван

1
Початкова реалізація Zend_Mime - це const LINELENGTH = 72; (див. lib/Zend/Mime.php), Тому я не бачив причин не вірити цьому; ймовірно, різниця до 76 використовується для закінчень рядків. Жорстке кодування значення замість того, щоб використовувати належну константу, було просто показати сенс. У реальній реалізації ця цінність повинна жити постійною. / Редагувати: Реалізація Zend_Mime::encodeBase64()використання, chunk_splitяка розбиває рядок у $ chunklen, потім додає $ end (див. Php.net/manual/en/function.chunk-split.php )
Аді

1

Як налаштовано ваш поштовий сервер (SMTP)? Правильний ваш запис SPF?

Існують різні причини, через які пошту можна було б позначити як спам, а вміст - це лише її частина.

Більше інформації тут: https://blog.amasty.com/5-steps-for-no-spam-e-mails-in-magento/


Я шукаю цю конкретну причину, яка пов’язана лише зі змістом. Але пов’язана стаття містить корисну інформацію: "Magento за замовчуванням використовує 200 для довжини рядка, що друкується цитатами. Це можна змінити, змінивши клас Zend_Mime." - Дякую!
Фабіан Шменглер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.