Advertisement
Guest User

Untitled

a guest
Apr 7th, 2019
362
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
TCL 2.15 KB | None | 0 0
  1. #!/usr/bin/env tclsh
  2.  
  3. lappend auto_path "./tcllib/modules"
  4. package require mime
  5.  
  6. proc readmail { fn } {
  7.     set fp [open $fn r]
  8.     fconfigure $fp -translation binary -encoding binary
  9.     set data [read $fp]
  10.     close $fp
  11.  
  12.     set data [string map [list "\r\n" "\n"] $data]
  13.     return [mime::initialize -string $data]
  14. }
  15.  
  16. unset -nocomplain stat counter
  17. array set stat {}
  18.  
  19. set fns [lsort -dict [glob -directory "mail/Отправленные" *]]
  20.  
  21. foreach fn $fns {
  22.  
  23.     puts -nonewline "\x0D[incr counter]/[llength $fns] ..."; flush stdout
  24.  
  25.     set token [readmail $fn]
  26.     set fn [file tail $fn]
  27.  
  28.     set date [mime::parsedatetime [lindex [mime::getheader $token "Date"] 0] clock]
  29.  
  30.     set delto [mime::getheader $token "Delivered-To"]
  31.  
  32.     set recv [lindex [mime::getheader $token "Received"] end]
  33.     set recv [split $recv ";"]
  34.     set recv [lindex $recv 0]
  35.  
  36.     if { [lsearch [mime::getheader $token -names] "Subject"] == -1 } {
  37.         set subj "<empty>"
  38.     } else {
  39.         set subj [lindex [mime::getheader $token "Subject"] 0]
  40.         if { ![catch { mime::word_decode $subj } data] } {
  41.             lassign $data enc method data
  42.             set subj [encoding convertfrom $enc $data]
  43.         }
  44.     }
  45.  
  46.     set recv_first [lindex [mime::getheader $token "Received"] end]
  47.     set recv_first [lindex [split $recv_first \n] end]
  48.     set recv_first [mime::parsedatetime [string trim [lindex [split $recv_first ";"] end]] clock]
  49.  
  50.     set recv_end [lindex [mime::getheader $token "Received"] 0]
  51.     set recv_end [lindex [split $recv_end \n] end]
  52.     set recv_end [mime::parsedatetime [string trim [lindex [split $recv_end ";"] end]] clock]
  53.  
  54.     set recv_diff [expr { $recv_end - $recv_first }]
  55.  
  56.     set stat([list $date $fn]) [list \
  57.         $fn \
  58.         $date \
  59.         $delto \
  60.         $recv \
  61.         $subj \
  62.         $recv_diff \
  63.     ]
  64.  
  65.     mime:::finalize $token -subordinates "all"
  66. }
  67.  
  68. puts ""
  69.  
  70. foreach id [lsort -int -index 0 [array names stat]] {
  71.     lassign $stat($id) fn date delto recv subj recv_diff
  72.     puts stderr [join [list $fn [clock format $date -format "%Y-%m-%d %H:%M:%S"] $delto $recv $recv_diff $subj] \t]
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement