Автор: fd254
Дата сообщения: 25.09.2006 20:11
G_R
У меня есть, правда для себя делал, так что без претензий.
[more=mailadd]
#!/usr/bin/perl
use DBI;
use Getopt::Long;
use Mail::Mailer;
use MIME::QuotedPrint;
# Константы
my ($id,$pass,$quota,$help);
$mbox_host="domain.ru";
GetOptions ( "user=s" => \$id, # Имя пользователя
"pass=s" => \$userpass, # Пароль
"q=i" => \$quota, # Квота
"help" => \$help # Помощь
);
die "Введите имя пользователя " unless defined $id;
die "Введите пароль" unless defined $userpass;
die "Введите дисковую квоту" unless defined $quota;
sub userexist {
my $valid_id=$_[0];
$host="localhost";
$user="mail";
$pass="password";
$base="maildb";
$port="3306";
$dsn = "DBI:mysql:database=$base;host=$host;port=$port";
$dbh = DBI->connect($dsn, $user, $pass,{'RaiseError' => 1});
$sth = $dbh->prepare(qq{SELECT * FROM users WHERE id=? });
$sth->execute($valid_id);
while ( my $ref = $sth->fetchrow_hashref()) {
if ( $ref->{'active'}) {
die "Пользователь $valid_id уже существует в системе\n";
}
}
$sth->finish;
$dbh->disconnect;
}
sub useradd {
my ($id,$userpass,$quota,$mbox_host)=@_;
my $shell="\/sbin\/nologin";
my $uid="102";
my $gid="8";
my $active="Y";
my $home="\/home\/vmail\/domains\/";
$homedir=$home.$mbox_host."\/".$id;
# Соединение с базой данных
$db_host="localhost";
$db_user="mail";
$db_pass="password";
$db_base="maildb";
$db_port="3306";
$dsn = "DBI:mysql:database=$db_base;host=$db_host;port=$db_port";
$dbh = DBI->connect($dsn, $db_user, $db_pass,{'RaiseError' => 1});
$sth = $dbh->prepare( qq{ INSERT INTO users VALUES (?,ENCRYPT(?),?,?,?,?,?,?,?,?) });
$sth->execute($id,$userpass,$userpass,$uid,$gid,$mbox_host,$shell,$homedir,$quota,$active);
$sth->finish();
$dbh->disconnect();
}
sub sendmail {
my ($id,$mbox_host) = @_;
$from_address="Свой_Адрес_сюда@".$mbox_host;
$to_address=$id."@".$mbox_host;
$pre_subj="Добро пожаловать на $mbox_host"; # $mbox_host
$post_subj=encode_qp($pre_subj,"");
$post_subj=~s/ /_/g;
$subject="=?koi8-r?Q?".$post_subj."?=";
$body="Здравствуйте!\n\nНадеемся, что Вы будете довольны работой Вашего почтового ящика и удовлетворены набором предлагаемых Вам услуг:\n\t*Объем почтового ящика - 25 Мб*\n\t*Максимальный размер письма - 10 Мб*\n\t*Защита от вирусов\n\tЗащита от спама\n\tДоступ по протоколу IMAP\n\t**/\n\tНе забывайте периодически чистить почтовые папки, в соотвестствии с размером Вашаего ящика.\n\t /*\n\n\n\tИнженер отдела информатизации\n\t";
$mailer = Mail::Mailer->new("sendmail");
$mailer->open(\%headers);
$mailer->open({
"From" => $from_address,
"To" => $to_address,
"Subject" => $subject,
"MIME-Version" => "1.0",
"Content-Type" => "text/plain; charset=KOI8-R; format=flowed",
"Content-Transfer-Encoding" => "8bit",
})
or die "Не могу открыть: $!\n";
print $mailer $body;
$mailer->close;
}
userexist($id);
useradd($id,$userpass,$quota,$mbox_host);
sendmail($id,$mbox_host);
[/more]
Весь русский текст набран в кодировке KOI8-R
А пользуюсь так: mailadd --user=user --pass=password --quota=число