mirror of
				https://bitbucket.org/jsuto/piler.git
				synced 2025-10-30 19:02:27 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			134 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			134 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| 
 | |
| $webuidir = "";
 | |
| 
 | |
| $port = 143;
 | |
| $ssl = false;
 | |
| $server = '';
 | |
| $username = '';
 | |
| $password = '';
 | |
| 
 | |
| 
 | |
| $opts = 'h:s:P:u:p:';
 | |
| $lopts = array(
 | |
|                 'webui:',
 | |
|                 'server:',
 | |
|                 'port:',
 | |
|                 'username:',
 | |
|                 'password:',
 | |
|                 'help'
 | |
|               );
 | |
| 
 | |
| 
 | |
| if($options = getopt($opts, $lopts)) {
 | |
| 
 | |
|    if(isset($options['webui'])) { $webuidir = $options['webui']; }
 | |
|    if(isset($options['server'])) { $server = $options['server']; }
 | |
|    if(isset($options['port'])) { $port = $options['port']; }
 | |
|    if(isset($options['username'])) { $username = $options['username']; }
 | |
|    if(isset($options['password'])) { $password = $options['password']; }
 | |
| 
 | |
|    if(isset($options['help'])) { usage(); }
 | |
| }
 | |
| 
 | |
| 
 | |
| if($webuidir == '' || $server == '' || $username == '') { usage(); }
 | |
| 
 | |
| if($port == 993) { $ssl = true; }
 | |
| 
 | |
| $pwd = getcwd();
 | |
| 
 | |
| chdir($webuidir);
 | |
| 
 | |
| require_once 'Zend/Mail/Protocol/Imap.php';
 | |
| require_once 'Zend/Mail/Storage/Imap.php';
 | |
| 
 | |
| 
 | |
| chdir($pwd);
 | |
| 
 | |
| 
 | |
| try {
 | |
|    $imap = new Zend_Mail_Protocol_Imap($server, $port, $ssl);
 | |
| 
 | |
|    $login = $imap->login($username, $password);
 | |
| 
 | |
|    if($login) {
 | |
|       print "login OK\n";
 | |
|       $storage = new Zend_Mail_Storage_Imap($imap);
 | |
|       download_users_emails($storage);
 | |
| 
 | |
|    } else {
 | |
|       print "login FAILED at $server for $username\n";
 | |
|    }
 | |
| }
 | |
| catch (Zend_Mail_Protocol_Exception $e) {
 | |
|    print "ERR connecting\n";
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| function download_users_emails($storage) {
 | |
|    global $imap;
 | |
|    $count = 0;
 | |
| 
 | |
|    $folders = new RecursiveIteratorIterator($storage->getFolders(), RecursiveIteratorIterator::SELF_FIRST);
 | |
| 
 | |
|    foreach ($folders as $folder) {
 | |
| 
 | |
|       $__folder = preg_replace("/\W/", "_", $folder);
 | |
| 
 | |
|       if($folder->isSelectable()) {
 | |
|          $storage->selectFolder($folder);
 | |
|          $num = $storage->countMessages();
 | |
| 
 | |
|          $__folder = preg_replace("/\W/", "_", $folder);
 | |
| 
 | |
|          print "processing $folder ($num messages)\n";
 | |
| 
 | |
|          $count += saveMessages($storage, $__folder, $num);
 | |
|       }
 | |
|    }
 | |
| 
 | |
|    print "downloaded $count messages\n";
 | |
| 
 | |
|    return $count;
 | |
| }
 | |
| 
 | |
| 
 | |
| function saveMessages($storage, $folder = '', $num = 0) {
 | |
|    global $username;
 | |
|    $count = 0;
 | |
| 
 | |
|    $messages = $storage->piler_batch_fetch(1, $num);
 | |
| 
 | |
|    foreach($messages as $k => $v) {
 | |
|       $uuid = $storage->getUniqueId($k);
 | |
| 
 | |
|       $tmpname = "piler-" . $username . "-" . $folder . "-" . $k . "-" . $uuid . ".eml";
 | |
|       $f = fopen($tmpname, "w+");
 | |
|       if($f){
 | |
|          fwrite($f, $v['RFC822.HEADER'] . $v['RFC822.TEXT']);
 | |
|          fclose($f);
 | |
| 
 | |
|          $count++;
 | |
|       }
 | |
|    }
 | |
| 
 | |
|    return $count;
 | |
| }
 | |
| 
 | |
| 
 | |
| function usage() {
 | |
|    print "\nUsage: " . __FILE__ . "\n\n";
 | |
|    print "\t--webui <path to webui directory>\n";
 | |
|    print "\t--server <imap server name>\n";
 | |
|    print "\t--port <port number> [default: 143]\n";
 | |
|    print "\t--username <imap username>\n";
 | |
|    print "\t--password <imap password>\n";
 | |
|    print "\t--help\n\n";
 | |
| 
 | |
|    exit;
 | |
| }
 |