#!/usr/bin/perl # plesk 用一括登録スクリプト作成プログラム #設定できるもの # メールアドレス # メールボックスに保存をするかどうか # 転送先メールアドレス(メールグループ) #=pod # #==実行例 # #perl create_mailuser.pl < userlist.txt # #実行後、create_mailuser.log が生成されます。 #うまくいかなかったユーザー登録は、create_mailuser.logからコマンドを取り出して #再度実行することも出来ます。 # #※create_mailuser.logとuserlist.txtはプレーンパスワードを含むため #実行後はすぐに削除すること。 #必要であれば、 .bash_history も削除すること。 # # antivirusを有効にするか ex. inout / in / out / off # 標準では、最大15までなのでoff固定にする。 # インストールを止めたので、未指定に変更 # #==読み込むファイルフォーマット # #タブ区切りのファイル # #$address メールアドレス ex: user@example.jp #$password パスワード(プレーン) #$description 説明(日本語の姓名をセット) # # #=cut my $mailsh = "/usr/local/psa/bin/mail"; $| = 1; open(MAIL,">>create_mailuser.log"); print MAIL "\n"; print MAIL `date`; print MAIL "\n"; while(<>){ my $line = ""; $line = $_; $line =~ s/\x0D\x0A/\n/g; $line =~ tr/\x0D\x0A/\n\n/; chomp($line); next if $line eq ""; my($address,$password,$description) = trim_dquote(trim(split(/\t/, $line,3))); my $cmd = ""; $cmd = qq|echo "Creating... $address \t> description:$description"|; my $result = `$cmd`; print $result; print MAIL $cmd."\n"; $cmd = << "_CMD_"; $mailsh \\ --create $address \\ -mailbox true \\ -passwd $password \\ -passwd_type plain \\ -description $description \\ 2>&1 _CMD_ $cmd =~ s/\n$//g; my $result = ""; $result = `$cmd`; print $result."\n\n"; # write log $result =~ s/^/#/g; $result =~ s/\n/\n#/g; print MAIL $cmd."\n".$result."\n\n"; # sleep `sleep 5`; for my $group_mem (@mailgroups){ my $cmd = ""; $cmd = qq|echo "Add group member... $address \t>$group_mem"|; my $result = `$cmd`; print $result; print MAIL $cmd."\n"; my $cmd = << "_ADDCMD_"; $mailsh \\ --update $address \\ -group true \\ -groupmem add:$group_mem \\ 2>&1 _ADDCMD_ $cmd =~ s/\n$//g; my $result = ""; $result = `$cmd`; print $result."\n\n"; # write log $result =~ s/\n$//g; $result =~ s/^/#/g; $result =~ s/\n/\n#/g; print MAIL $cmd."\n".$result."\n\n"; # sleep `sleep 3`; } } close(MAIL); sub trim { #$string = trim($string); #@many = trim(@many); my @out = @_; for (@out) { s/^\s+//; s/\s+$//; } return wantarray ? @out : $out[0]; } sub trim_dquote { #$string = trim_dquote($string); #@many = trim_dquote(@many); my @out = @_; for (@out) { s/^"//; s/"$//; } @out = trim(@out); return wantarray ? @out : $out[0]; } __END__