Aleksander Machniak
2013-03-07 a6ceb4ea49cd50b2872f6031d83f54d174d7792a
commit | author | age
d48470 1 #!/usr/bin/env php
0712a3 2 <?php
T 3
ab8b44 4 define('INSTALL_PATH', realpath(dirname(__FILE__) . '/..') . '/' );
6cc6e7 5 ini_set('memory_limit', -1);
0712a3 6
bd911b 7 require_once INSTALL_PATH.'program/include/clisetup.php';
0712a3 8
6d0998 9 function print_usage()
0712a3 10 {
687b22 11     print "Usage:  msgimport -h imap-host -u user-name -m mailbox -f message-file\n";
b48bd0 12     print "--host   IMAP host\n";
T 13     print "--user   IMAP user name\n";
687b22 14     print "--mbox   Target mailbox\n";
b48bd0 15     print "--file   Message file to upload\n";
6d0998 16 }
T 17
18
19 // get arguments
929030 20 $opts = array('h' => 'host', 'u' => 'user', 'p' => 'pass', 'm' => 'mbox', 'f' => 'file');
AM 21 $args = rcube_utils::get_opt($opts) + array('host' => 'localhost', 'mbox' => 'INBOX');
6d0998 22
T 23 if ($_SERVER['argv'][1] == 'help')
24 {
25     print_usage();
26     exit;
27 }
28 else if (!($args['host'] && $args['file']))
29 {
30     print "Missing required parameters.\n";
31     print_usage();
0712a3 32     exit;
T 33 }
34 else if (!is_file($args['file']))
35 {
36     print "Cannot read message file\n";
6d0998 37     exit;
0712a3 38 }
T 39
6d0998 40 // prompt for username if not set
T 41 if (empty($args['user']))
42 {
43     //fwrite(STDOUT, "Please enter your name\n");
44     echo "IMAP user: ";
45     $args['user'] = trim(fgets(STDIN));
46 }
47
48 // prompt for password
9787ca 49 if (empty($args['pass']))
T 50 {
929030 51     $args['pass'] = rcube_utils::prompt_silent("Password: ");
9787ca 52 }
b48bd0 53
0712a3 54 // parse $host URL
T 55 $a_host = parse_url($args['host']);
56 if ($a_host['host'])
57 {
58     $host = $a_host['host'];
59     $imap_ssl = (isset($a_host['scheme']) && in_array($a_host['scheme'], array('ssl','imaps','tls'))) ? TRUE : FALSE;
60     $imap_port = isset($a_host['port']) ? $a_host['port'] : ($imap_ssl ? 993 : 143);
61 }
62 else
63 {
64     $host = $args['host'];
65     $imap_port = 143;
66 }
67
68 // instantiate IMAP class
69 $IMAP = new rcube_imap(null);
70
71 // try to connect to IMAP server
72 if ($IMAP->connect($host, $args['user'], $args['pass'], $imap_port, $imap_ssl))
73 {
74     print "IMAP login successful.\n";
687b22 75     print "Uploading messages...\n";
0712a3 76     
687b22 77     $count = 0;
T 78     $message = $lastline = '';
79     
80     $fp = fopen($args['file'], 'r');
81     while (($line = fgets($fp)) !== false)
82     {
3e48b9 83         if (preg_match('/^From\s+-/', $line) && $lastline == '')
687b22 84         {
T 85             if (!empty($message))
86             {
87                 if ($IMAP->save_message($args['mbox'], rtrim($message)))
88                     $count++;
89                 else
9787ca 90                     die("Failed to save message to {$args['mbox']}\n");
687b22 91                 $message = '';
T 92             }
93             continue;
94         }
95
96         $message .= $line;
97         $lastline = rtrim($line);
98     }
99
100     if (!empty($message) && $IMAP->save_message($args['mbox'], rtrim($message)))
101         $count++;
102
0712a3 103     // upload message from file
687b22 104     if ($count)
9787ca 105         print "$count messages successfully added to {$args['mbox']}.\n";
0712a3 106     else
687b22 107         print "Adding messages failed!\n";
0712a3 108 }
T 109 else
110 {
111     print "IMAP login failed.\n";
112 }
113
d48470 114 ?>