Creating Mailboxes via Script
Patrick Boutilier
boutilpj at ednet.ns.ca
Wed Mar 5 08:19:01 EST 2003
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.
-------------- next part --------------
#!/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