BASE64_LENGTH_79_INF: SpamAssasin लेन-देन ईमेल को दंडित करता है


9

मैंने देखा कि एक Magento दुकान से लेनदेन ईमेल अक्सर स्पैम के रूप में चिह्नित थे। Apache SpamAssasin BASE64_LENGTH_79_INF नियम 2.0से एक अंक देता है ।

नियम स्पष्टीकरण बताता है:

Http://en.wikipedia.org/wiki/Base64 के अनुसार , बेस 64 केवल 76 वर्ण लंबा होना चाहिए, इसलिए ये प्रारूप से बाहर हैं।

लिंक विकिपीडिया लेख से:

MIME बेस 64-एन्कोडेड लाइनों के लिए एक निश्चित लंबाई निर्दिष्ट नहीं करता है, लेकिन यह 76 वर्णों की अधिकतम लाइन लंबाई निर्दिष्ट करता है। इसके अतिरिक्त यह निर्दिष्ट करता है कि किसी भी अतिरिक्त वर्णमाला वर्णों को एक आज्ञाकारी डिकोडर द्वारा अनदेखा किया जाना चाहिए, हालांकि अधिकांश कार्यान्वयन सीआर / एलएफ न्यूलाइन जोड़ी का उपयोग एन्कोडेड लाइनों को सीमांकित करने के लिए करते हैं।

तो ऐसा लगता है कि बेस 64 एनकोडेड कंटेंट उम्मीद के मुताबिक लाइनों में नहीं टूटा है। क्या किसी का भी सामना हुआ? इस बुरे प्रारूप का क्या कारण हो सकता है?

जवाबों:


9

Zend फ्रेमवर्क में, magento/lib/Zend/Mime.phpऔजार एक const LINELENGTH = 72;लेकिन लगातार में ओवरराइट है app/code/core/Zend/Mime.phpऔर सेट 200 करने के लिए आप अधिलेखित कर सकते हैं app/code/core/Zend/Mime.phpMagento के नियमित प्रक्रियाओं का उपयोग करके और के कार्यान्वयन को बदलने encodeविधि, एक अलग निरंतर के साथ स्वयं :: 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;
    }
}

/ संपादित करें: शुरू में मैंने स्वयं को बदल दिया: LINELENGTH Zend_Mime के साथ :: LINELENGTH; यह काम नहीं करेगा क्योंकि ऑटोलैडर हमेशा मैगेंटो कोर से Zend_Mime क्लास को लोड करेगा क्योंकि वह लिब / Zend से एक है।


वहाँ 72 करने के लिए और 76 नहीं hardcoding के लिए एक कारण है?
त्रिपुर्वन

1
Zend_Mime का मूल कार्यान्वयन है const LINELENGTH = 72; (देखें lib/Zend/Mime.php) तो मैंने देखा कि उस पर भरोसा करने का कोई कारण नहीं है; शायद 76 का अंतर लाइन एंडिंग के लिए उपयोग किया जाता है। एक उचित स्थिरांक का उपयोग करने के बजाय मूल्य को हार्डकोड करना केवल बिंदु दिखाने के लिए था। वास्तविक कार्यान्वयन में, उस मूल्य को स्थिर रूप से रहना चाहिए। / संपादित करें: $ chunklen में स्ट्रिंग को विभाजित करने वाले Zend_Mime::encodeBase64()उपयोगों का कार्यान्वयन chunk_splitफिर $ $ जोड़ता है (देखें php.net/manual/en/function.chunk-split.php )
Adi

1

आपका मेल सर्वर (SMTP) कैसे सेट किया गया है? क्या आपका एसपीएफ रिकॉर्ड सही है?

विभिन्न कारणों से मेल मुझे स्पैम के रूप में चिह्नित कर सकता है, सामग्री केवल इसका एक हिस्सा है।

अधिक जानकारी यहाँ: https://blog.amasty.com/5-steps-for-no-spam-e-mails-in-magento/


मैं इस विशिष्ट कारण की तलाश में हूं, जो केवल सामग्री से संबंधित है। लेकिन लिंक किए गए लेख में जानकारी का एक उपयोगी बिट है: "डिफ़ॉल्ट रूप से Magento उद्धरण-मुद्रण योग्य लाइन की लंबाई के लिए 200 का उपयोग करता है। इसे Zend_Mime वर्ग को ओवरराइड करके बदला जा सकता है।" - धन्यवाद!
फैबियन शेंगलर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.