mirror of
				https://bitbucket.org/jsuto/piler.git
				synced 2025-11-04 07:42: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);
 | 
						|
 | 
						|
   while(list($k, $v) = each($messages)) {
 | 
						|
      $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;
 | 
						|
}
 |