SHOW:
|
|
- or go back to the newest paste.
1 | #!/usr/bin/env python | |
2 | # timestamp.py | |
3 | # Author: Zachary Cutlip | |
4 | # twitter: @zcutlip | |
5 | - | # Purpose: A program to fix sorting of mail messages that have been POPed or IMAPed in the wrong order |
5 | + | # Purpose: A program to fix sorting of mail messages that have been POPed or |
6 | - | # Compares time stamp sent and timestamp received on an RFC822-formatted email message, |
6 | + | # IMAPed in the wrong order. Compares time stamp sent and timestamp |
7 | - | # and renames the message file using the most recent timestamp that is no more than 24 hours |
7 | + | # received on an RFC822-formatted email message, and renames the |
8 | - | # after the date sent. Updates the file's atime/mtime with the timestamp, as well. Does not |
8 | + | # message file using the most recent timestamp that is no more than |
9 | - | # modify the headers or contents of the message. |
9 | + | # 24 hours after the date sent. Updates the file's atime/mtime with |
10 | # the timestamp, as well. Does not modify the headers or contents of | |
11 | # the message. | |
12 | ||
13 | import sys | |
14 | import os | |
15 | import email | |
16 | import email.utils | |
17 | import re | |
18 | regex=re.compile("([0-9]+)(\..*$)") | |
19 | ||
20 | msg_filename=sys.argv[1] | |
21 | print msg_filename | |
22 | msg=email.message_from_file(open(msg_filename,"r")) | |
23 | ||
24 | datesent=email.utils.mktime_tz(email.utils.parsedate_tz(msg.get("Date"))) | |
25 | ||
26 | #print datesent | |
27 | date_rx=0 | |
28 | for rx_hdr in msg.get_all("Received"): | |
29 | rx_date_str=rx_hdr.split(";")[-1] | |
30 | #print rx_date_str | |
31 | tmp_rx=email.utils.mktime_tz(email.utils.parsedate_tz(rx_date_str)) | |
32 | if(tmp_rx - datesent) > (24*60*60): | |
33 | continue | |
34 | ||
35 | date_rx=tmp_rx | |
36 | break | |
37 | ||
38 | #print date_rx | |
39 | ||
40 | ||
41 | #received header missing? | |
42 | if(date_rx < 1): | |
43 | date_rx = datesent | |
44 | ||
45 | m=regex.match(msg_filename) | |
46 | ||
47 | if len(m.groups()) == 2: | |
48 | newfilename=str(int(date_rx))+m.groups()[1] | |
49 | print newfilename | |
50 | if os.path.isfile(newfilename): | |
51 | print "File exists!: "+newfilename | |
52 | else: | |
53 | os.rename(msg_filename,newfilename) | |
54 | os.utime(newfilename,(date_rx,date_rx)) |