17 |
|
|
18 |
import gzz |
import gzz |
19 |
import java |
import java |
|
import mailbox |
|
20 |
import mimetools |
import mimetools |
21 |
import multifile |
import multifile |
22 |
import re |
import re |
23 |
import string |
import string |
24 |
import StringIO |
import StringIO |
25 |
|
|
|
def storeMailbox(file, mediaserver): |
|
|
mbox = mailbox.UnixMailbox(file) |
|
|
|
|
|
mails = [] |
|
|
while 1: |
|
|
msg = mbox.next() |
|
|
if not msg: break |
|
|
|
|
|
header = string.join(msg.headers , '') |
|
|
body = string.join(msg.fp.readlines() , '') |
|
|
|
|
|
p = re.compile( '(\r\n|\n)') |
|
|
header = p.sub('\r\n', header) |
|
|
body = p.sub('\r\n', body) |
|
|
|
|
|
mails.append(storeMail(header + '\r\n' + body, mediaserver)) |
|
|
|
|
|
return mails |
|
|
|
|
26 |
def delHeaderLines(header, fields): |
def delHeaderLines(header, fields): |
27 |
"""Takes a list of header-lines and a list of header fields and |
"""Takes a list of header-lines and a list of header fields and |
28 |
removes every appereance of this field and it's parameters. |
removes every appereance of this field and it's parameters. |
77 |
|
|
78 |
#for param in msg.getplist(): |
#for param in msg.getplist(): |
79 |
# if param[0:7] == 'charset': |
# if param[0:7] == 'charset': |
80 |
# return param[8:] |
# return param[8:] |
81 |
# |
# |
82 |
# return "us-ascii" |
# return "us-ascii" |
83 |
|
|
87 |
ctparams.append(string.join(['; ', param], '')) |
ctparams.append(string.join(['; ', param], '')) |
88 |
return ctparams |
return ctparams |
89 |
|
|
90 |
def storeMail(mail, mediaserver): |
def save(mediaserver, mail): |
91 |
mail = re.sub(r'(\r\n|\r|\n)', '\r\n', mail) |
mail = re.sub(r'(\r\n|\r|\n)', '\r\n', mail) |
92 |
tMail = StringIO.StringIO(mail) |
tMail = StringIO.StringIO(mail) |
93 |
tMsg = mimetools.Message(tMail) |
tMsg = mimetools.Message(tMail) |
117 |
|
|
118 |
try: |
try: |
119 |
body = submsg.fp.read() |
body = submsg.fp.read() |
120 |
except: |
except: |
121 |
print "\tMail konnte nicht konvertiert werden" |
print "\tMail couldn't be converted" |
122 |
return tempstore |
return tempstore |
123 |
if isConvertible(body, getCharset(submsg)): |
if isConvertible(body, getCharset(submsg)): |
124 |
id = storeBody(mediaserver, submsg, body, msgID) |
id = storeBody(mediaserver, submsg, body, msgID) |
125 |
header = header + transformHeader(submsg.headers, id) |
header = header + transformHeader(submsg.headers, id) |
126 |
header = string.join(header, '') |
header = string.join(header, '') |
127 |
headerData += header |
headerData += header |
128 |
else: |
else: |
129 |
headerData += string.join(submsg.headers, '') + '\n\r' + body |
headerData += string.join(submsg.headers, '') + '\n\r' + body |
130 |
|
|
131 |
headerData += '--' + msg.getparam("boundary") + '--\r\n\r\n' |
headerData += '--' + msg.getparam("boundary") + '--\r\n\r\n' |
132 |
id2 = mediaserver.addDatum(headerData, headerLinesH, None, 0) |
id2 = mediaserver.addDatum(headerData, headerLinesH, None, 0) |
133 |
#eis = gzz.modules.email.DefaultEmailInStorm(mediaserver, id2) |
#eis = gzz.modules.email.DefaultEmailInStorm(mediaserver, id2) |
134 |
if isReconstructable(mediaserver, id2, tempstore): |
if isReconstructable(mediaserver, id2, tempstore): |
135 |
mediaserver.expungeDatum(tempstore) |
mediaserver.expungeDatum(tempstore) |
136 |
else: |
else: |
137 |
id2 = tempstore |
id2 = tempstore |
138 |
|
|
139 |
#print eis.getSubject().makeString(), ": ", id2.getString() |
#print eis.getSubject().makeString(), ": ", id2.getString() |
140 |
#print "----" |
#print "----" |
141 |
#print eis.getBody().makeString() |
#print eis.getBody().makeString() |
142 |
#print "----" |
#print "----" |
143 |
else: |
else: |
144 |
headerLinesH = java.util.ArrayList() |
headerLinesH = java.util.ArrayList() |
145 |
headerLinesB = java.util.ArrayList() |
headerLinesB = java.util.ArrayList() |
148 |
|
|
149 |
body = msg.fp.read() |
body = msg.fp.read() |
150 |
if isConvertible(body , getCharset(msg)): |
if isConvertible(body , getCharset(msg)): |
151 |
id = storeBody(mediaserver, msg, body, msgID) |
id = storeBody(mediaserver, msg, body, msgID) |
152 |
header = string.join(transformHeader(msg.headers, id), '') |
header = string.join(transformHeader(msg.headers, id), '') |
153 |
id2 = mediaserver.addDatum(header, headerLinesH, None, 0) |
id2 = mediaserver.addDatum(header, headerLinesH, None, 0) |
154 |
else: |
else: |
155 |
header = string.join(msg.headers, '') + '\r\n' + body |
header = string.join(msg.headers, '') + '\r\n' + body |
156 |
id2 = mediaserver.addDatum(header, headerLinesH, None, 0) |
id2 = mediaserver.addDatum(header, headerLinesH, None, 0) |
157 |
|
|
158 |
if isReconstructable(mediaserver, id2, tempstore): |
if isReconstructable(mediaserver, id2, tempstore): |
159 |
mediaserver.expungeDatum(tempstore) |
mediaserver.expungeDatum(tempstore) |
160 |
else: |
else: |
161 |
id2 = tempstore |
id2 = tempstore |
162 |
|
|
163 |
#eis = gzz.modules.email.DefaultEmailInStorm(mediaserver, id2) |
#eis = gzz.modules.email.DefaultEmailInStorm(mediaserver, id2) |
164 |
#print eis.getSubject().makeString(), ": ", id2.getString() |
#print eis.getSubject().makeString(), ": ", id2.getString() |
165 |
#print "----" |
#print "----" |
166 |
#print eis.getBody().makeString() |
#print eis.getBody().makeString() |
167 |
#print "----" |
#print "----" |
168 |
mail.close() |
mail.close() |
169 |
tMail.close() |
tMail.close() |
170 |
return id2 |
return id2 |
178 |
cBody = java.lang.String(body, charset); |
cBody = java.lang.String(body, charset); |
179 |
except java.io.UnsupportedEncodingException: |
except java.io.UnsupportedEncodingException: |
180 |
print charset, "not supported" |
print charset, "not supported" |
181 |
return 0 |
return 0 |
182 |
|
|
183 |
bBody = cBody.getBytes(charset) |
bBody = cBody.getBytes(charset) |
184 |
#if body.equals(bBody): |
#if body.equals(bBody): |
195 |
|
|
196 |
rec = "" |
rec = "" |
197 |
try: |
try: |
198 |
print "--------\n-------\n%s-------\n--------\n" % \ |
#reconstruct(mail, mediaserver, msid, 0) |
199 |
msgZip (reconstruct(mail, mediaserver), str(t)) |
#print "--------\n-------\n%s-------\n--------\n" % \ |
200 |
|
# msgZip (reconstruct(mail, mediaserver), str(t)) |
201 |
|
None |
202 |
except: |
except: |
203 |
print "Reconverting failed." |
print "Reconverting failed." |
204 |
return 1 |
return 1 |
205 |
|
|
206 |
# print "\t\t\t", msg.getparam("access-type") |
# print "\t\t\t", msg.getparam("access-type") |
207 |
# if msg.gettype() == "message/external-body" and string.lower(msg.getparam("access-type")) == "x-storm": |
# if msg.gettype() == "message/external-body" and string.lower(msg.getparam("access-type")) == "x-storm": |
208 |
# id = msg.getparam("block")[len("storm:block:"):] |
# id = msg.getparam("block")[len("storm:block:"):] |
209 |
# id = gzz.mediaserver.Mediaserver.Id(id) |
# id = gzz.mediaserver.Mediaserver.Id(id) |
210 |
|
|
211 |
#print "Reconstruct==>" |
#print "Reconstruct==>" |
212 |
#print msg |
#print msg |
225 |
|
|
226 |
return ret |
return ret |
227 |
|
|
228 |
def reconstruct(mail, mediaserver): |
def reconstruct(mail, mediaserver, msid, pos): |
229 |
mail = StringIO.StringIO(mail) |
mail = StringIO.StringIO(mail) |
230 |
msg = mimetools.Message(mail) |
msg = mimetools.Message(mail) |
231 |
type = msg.gettype() |
type = msg.gettype() |
232 |
|
msgData = [] |
233 |
|
|
234 |
if type == "message/external-body" and string.lower(msg.getparam("access-type")) == "x-storm": |
if type == "message/external-body" and string.lower(msg.getparam("access-type")) == "x-storm": |
235 |
id = msg.getparam("block")[len("storm:block:"):] |
pts = PermanentTextScroll(ms, msid) |
236 |
id = gzz.mediaserver.Mediaserver.Id(id) |
id = msg.getparam("block")[len("storm:block:"):] |
237 |
t = java.lang.String(mediaserver.getDatum(id).getBytes(), "UTF8") # Noch den Zeichensatz umwandeln |
id = gzz.mediaserver.Mediaserver.Id(id) |
238 |
msgData = msg.fp.read() + str(t) |
t = java.lang.String(mediaserver.getDatum(id).getBytes(), "UTF8") |
239 |
|
save = msg.fp.read() + str(t) |
240 |
|
|
241 |
|
msgData.append(pts.getSpan(pos, len(save))) |
242 |
elif type[:10] == "multipart/": |
elif type[:10] == "multipart/": |
243 |
mulmsg = multifile.MultiFile(mail, 0) |
mulmsg = multifile.MultiFile(mail, 0) |
244 |
mulmsg.push(msg.getparam("boundary")) |
mulmsg.push(msg.getparam("boundary")) |
245 |
|
|
246 |
msgData = "--%s" % msg.getparam("boundary") |
boundary = "--%s" % msg.getparam("boundary") |
247 |
|
msgData.append(PermanentTextScroll(boundary).getCurrent()) |
248 |
|
#msgData = "--%s" % msg.getparam("boundary") |
249 |
|
|
250 |
while mulmsg.next(): |
while mulmsg.next(): |
251 |
submsg = mimetools.Message(mulmsg) |
submsg = mimetools.Message(mulmsg) |
252 |
msgData += reconstruct(str(submsg) + submsg.fp.read(), mediaserver) |
msgSpan = reconstruct(str(submsg) + submsg.fp.read(), mediaserver, msid, pos + len(boundary)) |
253 |
|
msgData.append(msgSpan) |
254 |
|
|
255 |
msgData += "--%s--" % msg.getparam("boundary") |
#msgData += "--%s--" % msg.getparam("boundary") |
256 |
|
msgData.append(PermanentTextScroll("--%s--" % msg.getparam("boundary")).getCurrent()) |
257 |
else: |
else: |
258 |
msgData = str(msg) + '\r\n' + msg.fp.read() |
msgData = str(msg) + '\r\n' + msg.fp.read() |
259 |
|
|
260 |
mail.close() |
mail.close() |
261 |
return msgData |
return msgData |
271 |
addDefaultHeaders = 0 |
addDefaultHeaders = 0 |
272 |
|
|
273 |
if msgtype == "message/rfc822": |
if msgtype == "message/rfc822": |
274 |
cbodyid = storeMail(body, mediaserver) |
cbodyid = save(mediaserver, body) |
275 |
elif msgtype == "text/plain": |
elif msgtype == "text/plain": |
276 |
headerLinesB = java.util.ArrayList() |
headerLinesB = java.util.ArrayList() |
277 |
headerLinesB.add('Content-Type: text/plain; charset=UTF-8') |
headerLinesB.add('Content-Type: text/plain; charset=UTF-8') |
281 |
addDefaultHeaders = 1 |
addDefaultHeaders = 1 |
282 |
headerLinesB.add('Content-Transfer-Encoding: ' + msg.getencoding()) |
headerLinesB.add('Content-Transfer-Encoding: ' + msg.getencoding()) |
283 |
|
|
284 |
tBody = java.lang.String(body, getCharset(msg)) |
tBody = java.lang.String(body, getCharset(msg)) |
285 |
cbodyid = mediaserver.addDatum(tBody.getBytes("UTF8"), headerLinesB, None, 0) |
cbodyid = mediaserver.addDatum(tBody.getBytes("UTF8"), headerLinesB, None, 0) |
286 |
else: |
else: |
287 |
headerLinesB = java.util.ArrayList() |
headerLinesB = java.util.ArrayList() |
288 |
headerLinesB.add('Content-Type: ' + msgtype |
headerLinesB.add('Content-Type: ' + msgtype |
293 |
addDefaultHeaders = 1 |
addDefaultHeaders = 1 |
294 |
headerLinesB.add('Content-Transfer-Encoding: ' + msg.getencoding()) |
headerLinesB.add('Content-Transfer-Encoding: ' + msg.getencoding()) |
295 |
|
|
296 |
cbodyid = mediaserver.addDatum(body, headerLinesB, None, addDefaultHeaders) |
cbodyid = mediaserver.addDatum(body, headerLinesB, None, addDefaultHeaders) |
297 |
|
|
298 |
return cbodyid |
return cbodyid |