Changeset 1654 in subversion


Ignore:
Timestamp:
Aug 17, 2008 1:30:07 PM (5 years ago)
Author:
thomasb
Message:

Add option to export all folders of a mail account

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/roundcubemail/bin/msgexport.sh

    r1291 r1654  
    1 #!/usr/bin/php -qC  
     1#!/usr/bin/php 
    22<?php 
    33 
     
    4444        print "--host   IMAP host\n"; 
    4545        print "--user   IMAP user name\n"; 
    46         print "--mbox   Mailbox/folder name\n"; 
    47         print "--file   Mailbox/folder name\n"; 
     46        print "--mbox   Folder name, set to '*' for all\n"; 
     47        print "--file   Output file\n"; 
    4848} 
    4949 
     
    5858        $percent = round(100 * $pos / $max); 
    5959        vputs(sprintf("%3d%% [%-51s] %d/%d\033[K\r", $percent, @str_repeat('=', $percent / 2) . '>', $pos, $max)); 
     60} 
     61 
     62function export_mailbox($mbox, $filename) 
     63{ 
     64        global $IMAP; 
     65         
     66        $IMAP->set_mailbox($mbox); 
     67         
     68        vputs("Getting message list of {$mbox}..."); 
     69        vputs($IMAP->messagecount()." messages\n"); 
     70         
     71        if ($filename) 
     72        { 
     73                if (!($out = fopen($filename, 'w'))) 
     74                { 
     75                        vputs("Cannot write to output file\n"); 
     76                        return; 
     77                } 
     78                vputs("Writing to $filename\n"); 
     79        } 
     80        else 
     81                $out = STDOUT; 
     82         
     83        for ($count = $IMAP->messagecount(), $i=1; $i <= $count; $i++) 
     84        { 
     85                $headers = $IMAP->get_headers($i, null, false); 
     86                $from = current($IMAP->decode_address_list($headers->from, 1, false)); 
     87                 
     88                fwrite($out, sprintf("From %s %s UID %d\n", $from['mailto'], $headers->date, $headers->uid)); 
     89                fwrite($out, iil_C_FetchPartHeader($IMAP->conn, $IMAP->mailbox, $i, null)); 
     90                fwrite($out, iil_C_HandlePartBody($IMAP->conn, $IMAP->mailbox, $i, null, 1)); 
     91                fwrite($out, "\n\n\n"); 
     92                 
     93                progress_update($i, $count); 
     94        } 
     95        vputs("\ncomplete.\n"); 
     96         
     97        if ($filename) 
     98                fclose($out); 
    6099} 
    61100 
     
    110149        vputs("IMAP login successful.\n"); 
    111150         
    112         $IMAP->set_mailbox($args['mbox']); 
    113          
    114         vputs("Getting message list of {$args['mbox']}..."); 
    115         vputs($IMAP->messagecount()." messages\n"); 
    116          
    117         if ($args['file']) 
     151        $filename = null; 
     152        $mailboxes = $args['mbox'] == '*' ? $IMAP->list_mailboxes(null) : array($args['mbox']); 
     153 
     154        foreach ($mailboxes as $mbox) 
    118155        { 
    119                 if (!($out = fopen($args['file'], 'w'))) 
    120                 { 
    121                         vputs("Cannot write to output file\n"); 
    122                         exit; 
    123                 } 
     156                if ($args['file']) 
     157                        $filename = preg_replace('/\.[a-z0-9]{3,4}$/i', '', $args['file']) . asciiwords($mbox) . '.mbox'; 
     158                else if ($args['mbox'] == '*') 
     159                        $filename = asciiwords($mbox) . '.mbox'; 
     160                         
     161                if ($args['mbox'] == '*' && in_array(strtolower($mbox), array('junk','spam','trash'))) 
     162                        continue; 
     163 
     164                export_mailbox($mbox, $filename); 
    124165        } 
    125         else 
    126                 $out = STDOUT; 
    127          
    128         for ($count = $IMAP->messagecount(), $i=1; $i <= $count; $i++) 
    129         { 
    130                 $headers = $IMAP->get_headers($i, null, false); 
    131                 $from = current($IMAP->decode_address_list($headers->from, 1, false)); 
    132                  
    133                 fwrite($out, sprintf("From %s %s UID %d\n", $from['mailto'], $headers->date, $headers->uid)); 
    134                 fwrite($out, iil_C_FetchPartHeader($IMAP->conn, $IMAP->mailbox, $i, null)); 
    135                 fwrite($out, iil_C_HandlePartBody($IMAP->conn, $IMAP->mailbox, $i, null, 1)); 
    136                 fwrite($out, "\n\n\n"); 
    137                  
    138                 progress_update($i, $count); 
    139         } 
    140         vputs("\ncomplete.\n"); 
    141166} 
    142167else 
Note: See TracChangeset for help on using the changeset viewer.