Creating Mailboxes via Script

Joe Dennick joe at dennick.net
Thu Mar 6 12:26:29 EST 2003


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","$mysqlpass") || 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