23 |
import string |
import string |
24 |
import StringIO |
import StringIO |
25 |
|
|
26 |
def delHeaderLines(header, fields): |
from gzz.modules.email.mailtools import delHeaderLines, getCharset, \ |
27 |
"""Takes a list of header-lines and a list of header fields and |
replaceHeaderLine, msgZip, \ |
28 |
removes every appereance of this field and it's parameters. |
getContentTypeParams |
|
""" |
|
|
result = [] |
|
|
delLines = 0 |
|
|
foundField = 0 |
|
|
for line in header: |
|
|
tline = line.lower() |
|
|
for field in fields: |
|
|
field = field.lower() |
|
|
if tline[:len(field)] == field: |
|
|
foundField = 1 |
|
|
break |
|
|
if foundField: |
|
|
foundField = 0 |
|
|
delLines = 1 |
|
|
elif not (delLines and line[0] == ' '): |
|
|
result.append(line) |
|
|
delLines = 0 |
|
|
return result |
|
|
|
|
|
def replaceHeaderLine(header, field, replacement): |
|
|
result = [] |
|
|
delLines = 0 |
|
|
foundField = 0 |
|
|
tField = [] |
|
|
field = field.lower() |
|
|
replaced = 0 |
|
|
|
|
|
for line in header: |
|
|
tline = line.lower() |
|
|
if tline[:len(field)] == field: |
|
|
foundField = 1 |
|
|
replaced = 1 |
|
|
if foundField: |
|
|
foundField = 0 |
|
|
delLines = 1 |
|
|
tField.append('X-Gzzmo-OH-' + line) |
|
|
elif not (delLines and line[0] == ' '): |
|
|
result += tField |
|
|
if delLines: result.append(replacement) |
|
|
result.append(line) |
|
|
delLines = 0 |
|
|
tField = [] |
|
|
else: |
|
|
tField.append(line) |
|
|
|
|
|
if not replaced: |
|
|
result.append(replacement) |
|
|
return result |
|
|
|
|
29 |
|
|
30 |
def transformHeader(header, bodyID): |
def transformHeader(header, bodyID): |
31 |
"""Transforms message header to a message/external-body header |
"""Transforms message header to a message/external-body header |
43 |
header.append('\r\n') |
header.append('\r\n') |
44 |
return result + header |
return result + header |
45 |
|
|
|
def getCharset(msg): |
|
|
if msg.getparam("charset") == None: |
|
|
return "us-ascii" |
|
|
else: |
|
|
return msg.getparam("charset") |
|
|
|
|
|
def getContentTypeParams(msg): |
|
|
ctparams = [] |
|
|
for param in msg.getplist(): |
|
|
ctparams.append(string.join(['; ', param], '')) |
|
|
return ctparams |
|
|
|
|
46 |
def save(mediaserver, mail): |
def save(mediaserver, mail): |
47 |
mail = re.sub(r'(\r\n|\r|\n)', '\r\n', mail) |
mail = re.sub(r'(\r\n|\r|\n)', '\r\n', mail) |
48 |
tMail = StringIO.StringIO(mail) |
tMail = StringIO.StringIO(mail) |
163 |
print "<==isReconstructable" |
print "<==isReconstructable" |
164 |
return 1 |
return 1 |
165 |
|
|
|
def msgZip(msg1, msg2): |
|
|
msg1 = string.split(msg1, '\r\n') |
|
|
msg2 = string.split(msg2, '\r\n') |
|
|
|
|
|
ret = "" |
|
|
for s in zip(msg1, msg2): |
|
|
ret += s[0] + '\n' |
|
|
ret += s[1] + '\n' |
|
|
|
|
|
return ret |
|
|
|
|
166 |
def reconstruct(mail, mediaserver, msid, pos): |
def reconstruct(mail, mediaserver, msid, pos): |
167 |
print "==>reconstruct" |
print "==>reconstruct" |
168 |
mail = StringIO.StringIO(mail) |
mail = StringIO.StringIO(mail) |