BASE64_LENGTH_79_INF: SpamAssasin bestraft Transaktions-E-Mails


9

Ich habe festgestellt, dass Transaktions-E-Mails aus einem Magento-Shop häufig als Spam markiert wurden. Apache SpamAssasin gibt eine 2.0Punktzahl aus der BASE64_LENGTH_79_INF- Regel.

Die Regelerklärung lautet:

Laut http://en.wikipedia.org/wiki/Base64 sollte Base 64 nur 76 Zeichen lang sein, daher sind diese nicht formatiert.

Aus dem verlinkten Wikipedia-Artikel:

MIME gibt keine feste Länge für Base64-codierte Zeilen an, gibt jedoch eine maximale Zeilenlänge von 76 Zeichen an. Darüber hinaus wird angegeben, dass alle außeralphabetischen Zeichen von einem kompatiblen Decoder ignoriert werden müssen, obwohl die meisten Implementierungen ein CR / LF-Zeilenumbruchpaar verwenden, um codierte Zeilen abzugrenzen.

Es sieht also so aus, als ob Base64-codierter Inhalt nicht wie erwartet in Zeilen unterteilt ist. Hat jemand das gleiche erlebt? Was könnte dieses schlechte Format verursachen?

Antworten:


9

magento/lib/Zend/Mime.phpImplementiert in Zend Framework a, const LINELENGTH = 72;aber die Konstante wird überschrieben app/code/core/Zend/Mime.phpund auf 200 gesetzt. Sie können app/code/core/Zend/Mime.phpmithilfe der regulären Magento-Mechanismen überschreiben und die Implementierung der encodeMethode ändern , indem Sie self :: LINELENGTH durch eine andere Konstante ersetzen:

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

/ Edit: anfangs habe ich self :: LINELENGTH durch Zend_Mime :: LINELENGTH ersetzt; Dies funktioniert nicht, da der Autoloader die Zend_Mime-Klasse immer aus dem Magento-Kern anstelle der aus lib / Zend lädt.


Gibt es einen Grund für die Hardcodierung auf 72 und nicht auf 76?
Raduparvan

1
Die ursprüngliche Implementierung von Zend_Mime ist const LINELENGTH = 72; (siehe lib/Zend/Mime.php), daher habe ich keinen Grund gesehen, dem nicht zu vertrauen. wahrscheinlich wird der Unterschied zu 76 für Zeilenenden verwendet. Das Hardcodieren des Werts anstelle der Verwendung einer geeigneten Konstante diente nur dazu, den Punkt anzuzeigen. In der realen Implementierung muss dieser Wert in einer Konstanten leben. / Bearbeiten: Die Implementierung von Zend_Mime::encodeBase64()Verwendungen, chunk_splitdie den String in $ chunklen aufteilt, fügt dann $ end hinzu (siehe php.net/manual/en/function.chunk-split.php )
Adi

1

Wie ist Ihr Mailserver (SMTP) eingerichtet? Ist Ihre SPF-Aufzeichnung korrekt?

Es gibt verschiedene Gründe, warum die E-Mail als Spam markiert werden könnte. Der Inhalt ist nur ein Teil davon.

Weitere Informationen hier: https://blog.amasty.com/5-steps-for-no-spam-e-mails-in-magento/


Ich suche diesen speziellen Grund, der sich nur auf den Inhalt bezieht. Der verlinkte Artikel enthält jedoch einige nützliche Informationen: "Magento verwendet standardmäßig 200 für die zitatdruckbare Zeilenlänge. Dies kann durch Überschreiben der Zend_Mime-Klasse geändert werden." - Vielen Dank!
Fabian Schmengler
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.