16 |
16 |
from datetime import datetime
|
17 |
17 |
|
18 |
18 |
import imaplib
|
19 |
|
import email
|
|
19 |
|
|
20 |
from email import message_from_string
|
|
21 |
from email.header import decode_header
|
20 |
22 |
|
21 |
23 |
import TTConfig
|
22 |
24 |
import MySQLdb
|
23 |
25 |
|
24 |
26 |
from TroubleTicketParser import *
|
25 |
27 |
|
26 |
|
def get_unparsed_emails(cursor, table):
|
27 |
|
""" A generator for returning unparsed emails."""
|
|
28 |
def get_unparsed_emails_from_imap(server, username, passwd):
|
|
29 |
"""A generator for returning unparsed emails from the IMAP server."""
|
|
30 |
c = imaplib.IMAP4(server)
|
|
31 |
c.login(username, passwd)
|
|
32 |
c.select()
|
|
33 |
typ, data = c.search(None, 'ALL')
|
|
34 |
for num in data[0].split():
|
|
35 |
typ, data = c.fetch(num, '(RFC822)')
|
|
36 |
for response_part in data:
|
|
37 |
if isinstance(response_part, tuple):
|
|
38 |
msg = message_from_string(response_part[1])
|
|
39 |
header = ""
|
|
40 |
body = ""
|
|
41 |
if msg.is_multipart():
|
|
42 |
for msg_part in msg.get_payload(decode=True):
|
|
43 |
body = body + msg_part.get_payload(decode=True)
|
|
44 |
else:
|
|
45 |
body = msg.get_payload(decode=True)
|
|
46 |
for header_key in msg.keys():
|
|
47 |
header = header + "\n" + header_key + ": " + msg[header_key]
|
|
48 |
email = {
|
|
49 |
'ID': msg['Message-ID'],
|
|
50 |
'subject' : decode_header(msg['subject'])[0][0],
|
|
51 |
'header' : header,
|
|
52 |
'body' : body
|
|
53 |
}
|
|
54 |
print email
|
|
55 |
yield email
|
|
56 |
c.close()
|
|
57 |
c.logout()
|
|
58 |
exit()
|
|
59 |
|
|
60 |
def get_unparsed_emails_from_db(cursor, table):
|
|
61 |
""" A generator for returning unparsed emails from the unnormalised DB."""
|
28 |
62 |
# Not using the more practical """ string because we want to
|
29 |
63 |
# be able to add easily the following line for testing:
|
30 |
64 |
# "AND header like '%grnet%' AND body like '%9966%' "
|
... | ... | |
200 |
234 |
TTConfig.TTdb['passwd'] = options.frompass
|
201 |
235 |
TTConfig.TTdb_v2['passwd'] = options.topass
|
202 |
236 |
|
203 |
|
if options.mail is False:
|
204 |
|
raw_db = TTConfig.TTdb['db']
|
205 |
|
try:
|
206 |
|
db1_conn = MySQLdb.connect(**TTConfig.TTdb)
|
207 |
|
db1_cursor = db1_conn.cursor()
|
208 |
|
print "Successfully connected to database " + raw_db
|
209 |
|
except:
|
210 |
|
print "Error connecting to database " + raw_db
|
211 |
|
exit()
|
212 |
|
|
213 |
|
# normalised_db = TTConfig.TTdb_v2['db']
|
214 |
|
# try:
|
215 |
|
# db2_conn = MySQLdb.connect(**TTConfig.TTdb_v2)
|
216 |
|
# print "Successfully connected to database " + normalised_db
|
217 |
|
# except:
|
218 |
|
# print "Error connecting to database " + normalised_db
|
219 |
|
# exit()
|
|
237 |
normalised_db = TTConfig.TTdb_v2['db']
|
|
238 |
try:
|
|
239 |
db2_conn = MySQLdb.connect(**TTConfig.TTdb_v2)
|
|
240 |
print "Successfully connected to database " + normalised_db
|
|
241 |
except:
|
|
242 |
print "Error connecting to database " + normalised_db
|
|
243 |
exit()
|
220 |
244 |
|
221 |
245 |
emails_table = TTConfig.configuration['table_raw_emails']
|
222 |
246 |
|
... | ... | |
227 |
251 |
overwrite = 0
|
228 |
252 |
if options.mail is True:
|
229 |
253 |
print "Trying to read unparsed tickets from IMAP server..."
|
230 |
|
M = imaplib.IMAP4("imap.laposte.net")
|
231 |
|
M.login("egee.tts@laposte.net", "CUTqaxPI")
|
232 |
|
M.select()
|
233 |
|
typ, data = M.search(None, 'ALL')
|
234 |
|
for num in data[0].split():
|
235 |
|
typ, data = M.fetch(num, '(RFC822)')
|
236 |
|
for response_part in data:
|
237 |
|
if isinstance(response_part, tuple):
|
238 |
|
msg = email.message_from_string(response_part[1])
|
239 |
|
for header in [ 'subject', 'to', 'from' ]:
|
240 |
|
print '%-8s: %s' % (header.upper(), msg[header])
|
241 |
|
break
|
242 |
|
M.close()
|
243 |
|
M.logout()
|
244 |
|
exit()
|
|
254 |
host = TTConfig.IMAP_server['host']
|
|
255 |
user = TTConfig.IMAP_server['user']
|
|
256 |
unparsed_emails = get_unparsed_emails_from_imap(host,
|
|
257 |
user,
|
|
258 |
options.frompass)
|
245 |
259 |
else:
|
246 |
260 |
print "Trying to read unparsed tickets from " \
|
247 |
261 |
+ str(TTConfig.TTdb['db']) + "..."
|
248 |
|
unparsed_emails = get_unparsed_emails(db1_cursor, emails_table)
|
|
262 |
raw_db = TTConfig.TTdb['db']
|
|
263 |
try:
|
|
264 |
db1_conn = MySQLdb.connect(**TTConfig.TTdb)
|
|
265 |
db1_cursor = db1_conn.cursor()
|
|
266 |
print "Successfully connected to database " + raw_db
|
|
267 |
except:
|
|
268 |
print "Error connecting to database " + raw_db
|
|
269 |
exit()
|
|
270 |
unparsed_emails = get_unparsed_emails_from_db(db1_cursor, emails_table)
|
249 |
271 |
for raw_mail in unparsed_emails:
|
250 |
272 |
mails_read = mails_read + 1
|
251 |
273 |
num_found_keys = 0
|