Mercurial > p > roundup > code
annotate roundup/rfc2822.py @ 3878:6d14a3b4e295
allow admin to specify port and local hostname for SMTP connections
| author | Justus Pendleton <jpend@users.sourceforge.net> |
|---|---|
| date | Sun, 02 Sep 2007 05:54:46 +0000 |
| parents | 97f9fc0bc0ea |
| children |
| rev | line source |
|---|---|
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1628
diff
changeset
|
1 """Some rfc822 functions taken from the new (python2.3) "email" module. |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1628
diff
changeset
|
2 """ |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1628
diff
changeset
|
3 __docformat__ = 'restructuredtext' |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1628
diff
changeset
|
4 |
|
1383
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
5 import re |
|
1628
ea1afeb64b45
more pedantic rfc2822 header qp encoding
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1439
diff
changeset
|
6 from string import letters, digits |
|
1383
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
7 from binascii import b2a_base64, a2b_base64 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
8 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
9 ecre = re.compile(r''' |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
10 =\? # literal =? |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
11 (?P<charset>[^?]*?) # non-greedy up to the next ? is the charset |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
12 \? # literal ? |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
13 (?P<encoding>[qb]) # either a "q" or a "b", case insensitive |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
14 \? # literal ? |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
15 (?P<encoded>.*?) # non-greedy up to the next ?= is the encoded string |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
16 \?= # literal ?= |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
17 ''', re.VERBOSE | re.IGNORECASE) |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
18 |
|
1628
ea1afeb64b45
more pedantic rfc2822 header qp encoding
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
1439
diff
changeset
|
19 hqre = re.compile(r'^[A-z0-9!"#$%%&\'()*+,-./:;<=>?@\[\]^_`{|}~ ]+$') |
|
1383
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
20 |
|
2273
c77483d2cda4
merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents:
2034
diff
changeset
|
21 CRLF = '\r\n' |
|
c77483d2cda4
merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents:
2034
diff
changeset
|
22 |
|
1383
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
23 def base64_decode(s, convert_eols=None): |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
24 """Decode a raw base64 string. |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
25 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
26 If convert_eols is set to a string value, all canonical email linefeeds, |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
27 e.g. "\\r\\n", in the decoded text will be converted to the value of |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
28 convert_eols. os.linesep is a good choice for convert_eols if you are |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
29 decoding a text attachment. |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
30 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
31 This function does not parse a full MIME header value encoded with |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
32 base64 (like =?iso-8895-1?b?bmloISBuaWgh?=) -- please use the high |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
33 level email.Header class for that functionality. |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
34 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
35 Taken from 'email' module |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
36 """ |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
37 if not s: |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
38 return s |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
39 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
40 dec = a2b_base64(s) |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
41 if convert_eols: |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
42 return dec.replace(CRLF, convert_eols) |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
43 return dec |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
44 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
45 def unquote_match(match): |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1628
diff
changeset
|
46 """Turn a match in the form ``=AB`` to the ASCII character with value |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1628
diff
changeset
|
47 0xab. |
|
1383
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
48 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
49 Taken from 'email' module |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
50 """ |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
51 s = match.group(0) |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
52 return chr(int(s[1:3], 16)) |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
53 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
54 def qp_decode(s): |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1628
diff
changeset
|
55 """Decode a string encoded with RFC 2045 MIME header 'Q' encoding. |
|
1383
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
56 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
57 This function does not parse a full MIME header value encoded with |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
58 quoted-printable (like =?iso-8895-1?q?Hello_World?=) -- please use |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
59 the high level email.Header class for that functionality. |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
60 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
61 Taken from 'email' module |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
62 """ |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
63 s = s.replace('_', ' ') |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
64 return re.sub(r'=\w{2}', unquote_match, s) |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
65 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
66 def _decode_header(header): |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
67 """Decode a message header value without converting charset. |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
68 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
69 Returns a list of (decoded_string, charset) pairs containing each of the |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
70 decoded parts of the header. Charset is None for non-encoded parts of the |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
71 header, otherwise a lower-case string containing the name of the character |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
72 set specified in the encoded string. |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
73 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
74 Taken from 'email' module |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
75 """ |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
76 # If no encoding, just return the header |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
77 header = str(header) |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
78 if not ecre.search(header): |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
79 return [(header, None)] |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
80 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
81 decoded = [] |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
82 dec = '' |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
83 for line in header.splitlines(): |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
84 # This line might not have an encoding in it |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
85 if not ecre.search(line): |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
86 decoded.append((line, None)) |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
87 continue |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
88 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
89 parts = ecre.split(line) |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
90 while parts: |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
91 unenc = parts.pop(0) |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
92 if unenc: |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
93 if unenc.strip(): |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
94 decoded.append((unenc, None)) |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
95 if parts: |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
96 charset, encoding = [s.lower() for s in parts[0:2]] |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
97 encoded = parts[2] |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
98 dec = '' |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
99 if encoding == 'q': |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
100 dec = qp_decode(encoded) |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
101 elif encoding == 'b': |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
102 dec = base64_decode(encoded) |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
103 else: |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
104 dec = encoded |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
105 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
106 if decoded and decoded[-1][1] == charset: |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
107 decoded[-1] = (decoded[-1][0] + dec, decoded[-1][1]) |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
108 else: |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
109 decoded.append((dec, charset)) |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
110 del parts[0:3] |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
111 return decoded |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
112 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
113 def decode_header(hdr): |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
114 """ Decodes rfc2822 encoded header and return utf-8 encoded string |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
115 """ |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
116 if not hdr: |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
117 return None |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
118 outs = u"" |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
119 for section in _decode_header(hdr): |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
120 charset = unaliasCharset(section[1]) |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
121 outs += unicode(section[0], charset or 'iso-8859-1', 'replace') |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
122 return outs.encode('utf-8') |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
123 |
|
2034
be047db3dd3d
Eudora can't handle utf-8 headers. We love Eudora. [SF#900046]
Richard Jones <richard@users.sourceforge.net>
parents:
2005
diff
changeset
|
124 def encode_header(header, charset='utf-8'): |
|
1383
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
125 """ Will encode in quoted-printable encoding only if header |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
126 contains non latin characters |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
127 """ |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
128 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
129 # Return empty headers unchanged |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
130 if not header: |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
131 return header |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
132 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
133 # return plain header if it is not contains non-ascii characters |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
134 if hqre.match(header): |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
135 return header |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
136 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
137 quoted = '' |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
138 #max_encoded = 76 - len(charset) - 7 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
139 for c in header: |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
140 # Space may be represented as _ instead of =20 for readability |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
141 if c == ' ': |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
142 quoted += '_' |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
143 # These characters can be included verbatim |
|
3639
97f9fc0bc0ea
Yet another rfc2822 encoding patch: '?' must be escaped.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3519
diff
changeset
|
144 elif hqre.match(c) and c not in '_=?': |
|
1383
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
145 quoted += c |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
146 # Otherwise, replace with hex value like =E2 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
147 else: |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
148 quoted += "=%02X" % ord(c) |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
149 plain = 0 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
150 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
151 return '=?%s?q?%s?=' % (charset, quoted) |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
152 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
153 def unaliasCharset(charset): |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
154 if charset: |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
155 return charset.lower().replace("windows-", 'cp') |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
156 #return charset_table.get(charset.lower(), charset) |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
157 return None |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
158 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
159 def test(): |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
160 print encode_header("Contrary, Mary") |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
161 #print unaliasCharset('Windows-1251') |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
162 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
163 if __name__ == '__main__': |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
164 test() |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
165 |
|
f19dde90e473
applied unicode patch
Andrey Lebedev <kedder@users.sourceforge.net>
parents:
diff
changeset
|
166 # vim: et |
