Creating Mailboxes via Script

Joe Dennick joe at dennick.net
Fri Mar 7 12:34:07 EST 2003


Yes, I changed all of the values to reflect my system, and I tested it
with a few Print statements.  The MySQL piece works flawlessly.  I can
successfully telnet to port 143 on localhost and I have used that to set
up users in the past.  That's what has me baffled.  Everything should
work, but it doesn't.  I believe the Perl modules have changed in the
last 12 months or so.

Than you for your assistance on this!

Joe

-----Original Message-----
From: Patrick Boutilier [mailto:boutilpj at ednet.ns.ca] 
Sent: Friday, March 07, 2003 9:13 AM
To: joe at dennick.net
Subject: Re: Creating Mailboxes via Script


Joe,

Did you change these values to what they sould be for your site? If so 
can you telnet to port 143 of the mail server and login that way?

  ( . login cyrususer cyruspass)


my $cyrususer = "user";
my $cyruspass = "pass";
my $mysqluser = "user";
my $mysqlpass = "pass";
my $mysqlhost = "host";
my $mysqldatabase = "database";
my $mysqluserfield = "field";
my $mysqlusertable = "table";
my $IMAPSERVER = "localhost";


Joe Dennick wrote:
> OK, I've been playing with this script and variations of it for a 
> while now, and I still can't get it to successfully login to the IMAP
server.  It always produces the following error:  Can't call method
"login" on an undefined value at ./bulk line 32.
> 
> I had to go to cpan.org to download the Net::IMAP module and get it 
> installed, but it still didn't make this error go away.  I'm no Perl 
> guru, but it looks to me like the connect on line 31 didn't 
> successfully complete causing line 32 to really get mad on the login 
> request.
> 
> Any assistance would be greately appreciated!
> 
> Thank you!
> 
> Joe Dennick
> joe at dennick.net
> 
> 
> 
> Patrick Boutilier <boutilpj at ednet.ns.ca> wrote the Mar 5, 2003 7:19 
> AM:
> 
> 
>>
>>Joe Dennick wrote:
>>
>>>We've got Cyrus-Imap 2.1.12 running very well for our company Red Hat

>>>8.0.  We are authenticating against a MySQL database that we use as a

>>>master Security Container for all of our application authentication 
>>>and entitlements.  We've already populated the database with all of 
>>>the user information required including usernames, passwords, shadow 
>>>passwords, email addresses, etc.  Now we need to create Cyrus-Imap 
>>>mailboxes for each user (close to 3,000 mailboxes).  I've seen 
>>>several articles that talk about scripting CYRADM to read a text file

>>>containing usernames, but I can't get any of the scripting examples 
>>>to work.  It appears as though Cyrus-Imap, or specifically CYRADM has

>>>changed since the examples were created.  Is there a way to script or

>>>batch create users?  All I really need to do is create the mailbox 
>>>and set the ACL so cyrus (admin
>>>account) has admin control over the mailbox.  I can manually create
the
>>>mailboxes with the following commands:
>>>
>>>     cyradm --user cyrus localhost
>>>     IMAP Password:  *******
>>>     localhost.localdomain> createmailbox user.12345
>>>     localhost.localdomain> setacl user.12345 cyrus all
>>>     localhost.localdomain> quit
>>>
>>>Thank you in advance for your assistance.
>>>
>>>Joe Dennick
>>>joe at dennick.net
>>>
>>
>>
>>We use a variant of the following script to add new users but in your
>>case you should be able to use this as all your MySQL accounts need a 
>>Cyrus user created.
>>
>>
>>
>>#!/usr/bin/perl -w
>>#
>>
>>use File::Basename;
>>use Net::IMAP;
>>use DBI;
>>
>>my $cyrususer = "user";
>>my $cyruspass = "pass";
>>my $mysqluser = "user";
>>my $mysqlpass = "pass";
>>my $mysqlhost = "host";
>>my $mysqldatabase = "database";
>>my $mysqluserfield = "field";
>>my $mysqlusertable = "table";
>>my $IMAPSERVER = "localhost";
>>
>>$dbh = 
>>DBI->connect("DBI:mysql:$mysqldatabase:$mysqlhost","$mysqluser","$mysq
>>lpass") || die "SEM: MySQL database connected failed: $DBI::errstr\n";
>>
>>my $select = "SELECT $mysqluserfield FROM $mysqlusertable";
>>        my $sth = $dbh->prepare($select)
>>            || die "Can't prepare select statement: $DBI::errstr";
>>        my $rc = $sth->execute
>>            || die "Can't execute statement: $DBI::errstr";
>>        if ($sth->rows == 0) {
>>                exit 1;
>>        }
>>
>>	# Login to IMAP server
>>	$imap = new Net::IMAP($IMAPSERVER, Synchronous => 1) || die "no
go $! !";
>>	$response = $imap->login($cyrususer, $cyruspass);
>>	print "Login: ", $response->status, "-", $response->status_text,

>>"\n";
>>
>>	while ($userid = $sth->fetchrow) {
>>		print "user.$userid\n";
>>                
>>		# Create the new mailbox
>>		$response = $imap->create(user.$userid);
>>		print "Create: ", $response->status, "-",
$response->status_text, "\n";
>>	}
>>	
>>	# Disconnect from IMAP server
>>	$response = $imap->logout();
>>	print "Logout: ", $response->status, "-",
$response->status_text, 
>>"\n";
>>
>>$dbh->disconnect();
> 
> 






More information about the Info-cyrus mailing list