From 687b224da2d390611aa364040b88841b91cbbef6 Mon Sep 17 00:00:00 2001
From: thomascube <thomas@roundcube.net>
Date: Sun, 17 Aug 2008 13:28:02 -0400
Subject: [PATCH] Allow to import mbox files

---
 bin/msgimport.sh |   44 +++++++++++++++++++++++++++++++++++---------
 1 files changed, 35 insertions(+), 9 deletions(-)

diff --git a/bin/msgimport.sh b/bin/msgimport.sh
index 98a0389..a3ae4c3 100755
--- a/bin/msgimport.sh
+++ b/bin/msgimport.sh
@@ -1,4 +1,4 @@
-#!/usr/bin/php -qC 
+#!/usr/bin/php
 <?php
 
 define('INSTALL_PATH', preg_replace('/bin\/$/', '', getcwd()) . '/');
@@ -9,7 +9,7 @@
 /**
  * Parse commandline arguments into a hash array
  */
-function get_args($aliases=array())
+function get_opt($aliases=array())
 {
 	$args = array();
 	for ($i=1; $i<count($_SERVER['argv']); $i++)
@@ -38,18 +38,18 @@
 	return $args;
 }
 
-
 function print_usage()
 {
-	print "Usage:  msgimport -h imap-host -u user-name -f message-file\n";
+	print "Usage:  msgimport -h imap-host -u user-name -m mailbox -f message-file\n";
 	print "--host   IMAP host\n";
 	print "--user   IMAP user name\n";
+	print "--mbox   Target mailbox\n";
 	print "--file   Message file to upload\n";
 }
 
 
 // get arguments
-$args = get_args(array('h' => 'host', 'u' => 'user', 'p' => 'pass', 'f' => 'file')) + array('host' => 'localhost');
+$args = get_opt(array('h' => 'host', 'u' => 'user', 'p' => 'pass', 'm' => 'mbox', 'f' => 'file')) + array('host' => 'localhost', 'mbox' => 'INBOX');
 
 if ($_SERVER['argv'][1] == 'help')
 {
@@ -104,13 +104,39 @@
 if ($IMAP->connect($host, $args['user'], $args['pass'], $imap_port, $imap_ssl))
 {
 	print "IMAP login successful.\n";
-	print "Uploading message...\n";
+	print "Uploading messages...\n";
 	
+	$count = 0;
+	$message = $lastline = '';
+	
+	$fp = fopen($args['file'], 'r');
+	while (($line = fgets($fp)) !== false)
+	{
+		if (preg_match('/^From\s+/', $line) && $lastline == '')
+		{
+			if (!empty($message))
+			{
+				if ($IMAP->save_message($args['mbox'], rtrim($message)))
+					$count++;
+				else
+					die("Failed to save message to $mailbox\n");
+				$message = '';
+			}
+			continue;
+		}
+
+		$message .= $line;
+		$lastline = rtrim($line);
+	}
+
+	if (!empty($message) && $IMAP->save_message($args['mbox'], rtrim($message)))
+		$count++;
+
 	// upload message from file
-	if  ($IMAP->save_message('INBOX', file_get_contents($args['file'])))
-		print "Message successfully added to INBOX.\n";
+	if ($count)
+		print "$count messages successfully added to $mailbox.\n";
 	else
-		print "Adding message failed!\n";
+		print "Adding messages failed!\n";
 }
 else
 {

--
Gitblit v1.9.1