BASE64_LENGTH_79_INF: SpamAssasin ลงโทษอีเมลที่ทำธุรกรรม


9

ฉันสังเกตเห็นว่าอีเมลธุรกรรมจากร้าน Magento มักถูกทำเครื่องหมายว่าเป็นจดหมายขยะ Apache SpamAssasin ให้2.0คะแนนจากกฎBASE64_LENGTH_79_INF

คำอธิบายกฎระบุ:

อ้างอิงจากhttp://en.wikipedia.org/wiki/Base64ฐาน 64 ควรมีความยาว 76 ตัวอักษรดังนั้นสิ่งเหล่านี้จึงอยู่นอกรูปแบบ

จากบทความ Wikipedia ที่เชื่อมโยง:

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 core แทนการใช้จาก lib / Zend


ทำไมฮาร์ดโค้ดถึง 72 และไม่ใช่ 76?
raduparvan

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 )
Adi

1

เมลเซิร์ฟเวอร์ของคุณ (SMTP) ตั้งค่าอย่างไร ระเบียน SPF ของคุณถูกต้องหรือไม่

มีสาเหตุหลายประการที่ทำให้เมลฉันอาจถูกทำเครื่องหมายว่าเป็นสแปมเนื้อหาเป็นเพียงส่วนหนึ่งของมัน

ข้อมูลเพิ่มเติมที่นี่: https://blog.amasty.com/5-steps-for-no-spam-e-mails-in-magento/


ฉันกำลังมองหาเหตุผลเฉพาะนี้ซึ่งเกี่ยวข้องกับเนื้อหาเท่านั้น แต่บทความที่เชื่อมโยงนั้นมีข้อมูลที่มีประโยชน์เล็กน้อย: "Magento โดยค่าเริ่มต้นใช้ 200 สำหรับความยาวบรรทัดที่พิมพ์ได้ซึ่งสามารถเปลี่ยนแปลงได้โดยการแทนที่คลาส Zend_Mime" - ขอบคุณ!
Fabian Schmengler
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.