BASE64_LENGTH_79_INF: SpamAssasin menghukum email transaksional

9

Saya perhatikan bahwa email transaksional dari toko Magento sering ditandai sebagai spam. Apache SpamAssasin memberikan 2.0skor dari aturan BASE64_LENGTH_79_INF .

Penjelasan aturan menyatakan:

Menurut http://en.wikipedia.org/wiki/Base64 , basis 64 hanya boleh sepanjang 76 karakter, jadi ini tidak sesuai format.

Dari artikel Wikipedia yang ditautkan:

MIME tidak menentukan panjang tetap untuk baris yang disandikan Base64, tetapi tidak menentukan panjang garis maksimum 76 karakter. Selain itu ia menentukan bahwa setiap karakter alfabet ekstra harus diabaikan oleh decoder yang sesuai, meskipun sebagian besar implementasi menggunakan pasangan baris baru CR / LF untuk membatasi baris yang disandikan.

Jadi sepertinya konten yang disandikan base64 tidak dipecah menjadi garis-garis seperti yang diharapkan. Adakah yang mengalami hal yang sama? Apa yang dapat menyebabkan format yang buruk ini?

Fabian Schmengler
sumber

Jawaban:

9

Di Zend Framework, magento/lib/Zend/Mime.phpmengimplementasikan a const LINELENGTH = 72;tetapi konstanta ditimpa app/code/core/Zend/Mime.phpdan disetel ke 200. Anda dapat menimpa app/code/core/Zend/Mime.phpmenggunakan mekanisme reguler Magento dan mengubah implementasi encodemetode, mengganti self :: LINELENGTH dengan konstanta berbeda:

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: awalnya saya mengganti diri :: LINELENGTH dengan Zend_Mime :: LINELENGTH; ini tidak akan berhasil karena autoloader akan selalu memuat kelas Zend_Mime dari inti Magento, bukan yang dari lib / Zend.

Adi
sumber
apakah ada alasan untuk hardcoding ke 72 dan bukan 76?
raduparvan
1
Implementasi asli Zend_Mime adalah const LINELENGTH = 72; (lihat lib/Zend/Mime.php) jadi saya tidak melihat alasan untuk tidak mempercayainya; mungkin perbedaan ke 76 digunakan untuk akhir baris. Hardcoding nilai daripada menggunakan konstanta yang tepat hanya untuk menunjukkan intinya. Dalam implementasi nyata, nilai itu harus hidup dalam konstanta. / Edit: Implementasi Zend_Mime::encodeBase64()penggunaan chunk_splityang membagi string dalam $ chunklen kemudian menambahkan $ end (lihat php.net/manual/en/function.chunk-split.php )
Adi
1

Bagaimana pengaturan server surat Anda (SMTP)? Apakah catatan SPF Anda benar?

Ada berbagai alasan mengapa surat mungkin saya tandai sebagai spam, isinya hanya sebagian saja.

Info lebih lanjut di sini: https://blog.amasty.com/5-steps-for-no-spam-e-mails-in-magento/

Niels
sumber
Saya mencari alasan khusus ini, yang hanya terkait dengan konten. Tetapi artikel yang ditautkan mengandung sedikit informasi yang berguna: "Magento secara default menggunakan 200 untuk panjang garis kutipan-cetak. Ini dapat diubah dengan menimpa kelas Zend_Mime." - terima kasih!
Fabian Schmengler