Mbox文件中的=3D是什么鬼(quoted-Printable编码)

最近在搞邮局。有个很奇怪的问题,就是打开mbox的文件,比如说:

/var/spool/mail/root

里面信件的部分有奇怪的3D字符:

1<table cellpadding=3D"0" cellspacing=3D"0" style=3D"text-align:le=  
2ft;color:#454545;background-color:#fff;font-size:14px;border-radius:10px;pa=  

注意,中间多了若干个3D,最后也多了=号

这是什么鬼呢?

搜了一圈,原来这是quoted-printable编解码,跟Base64类似,base64和quoted-printable这两种编码都是在电子邮件中常见的编码方式。

基本知识:

  1. 如果=号出现在一行最后,表示换行,那么: he= llo 意思就是连起来的hello
  2. 如果中间出现=3D,那就是一个=号的意思 所以style=3D"text"意思就是style=“text”
  3. 英文字符除了=以外不做处理,其他字符的编码为=加这个字符的两个字节的16进制数。

弄明白了吧。

给一段处理mbox的python程序,可以用来读邮件:

 1#!/usr/bin/env python
 2# -*- coding: utf-8 -*-
 3
 4import mailbox  
 5import base64  
 6import os  
 7import sys  
 8import email
 9
10import quopri
11
12
13filename = "/var/spool/mail/zrr"
14
15mb = mailbox.mbox(filename)  
16nmes = len(mb)
17
18for i in range(len(mb)):  
19        print "\n\n\n\n\n"
20        print "-------------------------------------------------------------------------------------------------"
21    print "Email", i
22        print "-------------------------------------------------------------------------------------------------"
23
24    mes = mb.get_message(i)
25    em = email.message_from_string(mes.as_string())
26
27    subject = em.get('Subject')
28    if subject.find('=?') != -1:
29        ll = email.header.decode_header(subject)
30        subject = ""
31        for l in ll:
32            subject = subject + l[0]
33
34    em_from = em.get('From')
35    if em_from.find('=?') != -1:
36        ll = email.header.decode_header(em_from)
37        em_from = ""
38        for l in ll:
39            em_from = em_from + l[0]
40
41    print "From: %s - Subject: %s" %(em_from, subject)
42        print "-------------------------------------------------------------------------------------------------"
43
44        if mes.is_multipart():
45            for part in mes.get_payload():
46                print  quopri.decodestring(part.get_payload())
47        else:
48            print quopri.decodestring(mes.get_payload())

Linux下virtual FTP的搭建pure-Ftpd
F5 Irule之google站长认证别样用法
comments powered by Disqus