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编码的内容未按预期分成几行。有人遇到过吗?是什么原因导致这种格式错误?

Answers:


9

在Zend Framework中,magento/lib/Zend/Mime.php实现,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;
    }
}

/编辑:最初,我用Zend_Mime :: LINELENGTH替换了self :: LINELENGTH; 这是行不通的,因为自动加载器将始终从Magento内核而不是lib / Zend加载Zend_Mime类。


是否有理由将硬编码为72而不是76?
raduparvan 2015年

1
Zend_Mime的原始实现是const LINELENGTH = 72; (请参阅参考资料lib/Zend/Mime.php),因此我没有理由不信任它。可能与76的差用于行尾。硬编码值而不是使用适当的常量只是为了表明要点。在实际的实现中,该值必须保持不变。/编辑:的实施,Zend_Mime::encodeBase64()用途chunk_split,其分离,然后chunklen在$字符串将结束$(见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类来更改此长度。” - 谢谢!
Fabian Schmengler 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.