BASE64_LENGTH_79_INF: SpamAssasin penalizza le email transazionali


9

Ho notato che le email transazionali da un negozio Magento erano spesso contrassegnate come spam. Apache SpamAssasin assegna un 2.0punteggio dalla regola BASE64_LENGTH_79_INF .

La spiegazione della regola afferma:

Secondo http://en.wikipedia.org/wiki/Base64 , la base 64 dovrebbe essere lunga solo 76 caratteri, quindi questi sono fuori formato.

Dall'articolo di Wikipedia collegato:

MIME non specifica una lunghezza fissa per le linee codificate in Base64, ma specifica una lunghezza massima della linea di 76 caratteri. Inoltre specifica che qualsiasi carattere extra alfabetico deve essere ignorato da un decodificatore conforme, sebbene la maggior parte delle implementazioni utilizzino una coppia di newline CR / LF per delimitare le linee codificate.

Quindi sembra che il contenuto codificato in base64 non sia suddiviso in righe come previsto. Qualcuno ha riscontrato lo stesso? Cosa potrebbe causare questo cattivo formato?

Risposte:


9

In Zend Framework, magento/lib/Zend/Mime.phpimplementa a const LINELENGTH = 72;ma la costante viene sovrascritta app/code/core/Zend/Mime.phpe impostata su 200. Puoi sovrascrivere app/code/core/Zend/Mime.phpusando i meccanismi regolari di Magento e cambiare l'implementazione del encodemetodo, sostituendo self :: LINELENGTH con una costante diversa:

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

/ Modifica: inizialmente ho sostituito self :: LINELENGTH con Zend_Mime :: LINELENGTH; questo non funzionerà perché il caricatore automatico caricherà sempre la classe Zend_Mime dal core Magento invece di quella di lib / Zend.


c'è un motivo per hardcoding a 72 e non a 76?
Raduparvan,

1
L'implementazione originale di Zend_Mime è const LINELENGTH = 72; (vedi lib/Zend/Mime.php), quindi non ho visto alcun motivo per non fidarmi di ciò; probabilmente la differenza rispetto a 76 viene utilizzata per i finali di linea. La codifica del valore invece di utilizzare una costante corretta era solo per mostrare il punto. Nella reale implementazione, quel valore deve vivere in una costante. / Modifica: L'implementazione degli Zend_Mime::encodeBase64()usi chunk_splitche divide la stringa in $ chunklen aggiunge quindi $ end (vedi php.net/manual/en/function.chunk-split.php )
Adi,

1

Come è configurato il tuo server di posta (SMTP)? Il tuo record SPF è corretto?

Ci sono vari motivi per cui la posta elettronica potrebbe essere contrassegnata come spam, il contenuto è solo una parte di esso.

Maggiori informazioni qui: https://blog.amasty.com/5-steps-for-no-spam-e-mails-in-magento/


Sto cercando questo motivo specifico, che è legato solo al contenuto. Ma l'articolo collegato contiene utili informazioni: "Per impostazione predefinita Magento utilizza 200 per la lunghezza della riga stampabile tra virgolette. Questo può essere modificato sovrascrivendo la classe Zend_Mime." - Grazie!
Fabian Schmengler,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.