ご注意下さい
この記事は3年以上前に書かれた記事ですので、内容が古い可能性があります。
qmailでバーチャルドメインを有効にするには、/var/qmail/control/virtualdomainsを編集し、
<virtual domain>:<real user>-<設定名>
とし、/home/
僕は自分ひとりの環境なんで、
<virtual domain>:alias-<設定名>
として、/var/qmail/alias/.qmail-<設定名>-<メールアカウント>としていますが。
(詳しくは、「sendmail を捨て, qmail に乗り換える ---qmail の仕組みから設定管理, 迷惑メール対策まで---」 http://www.gcd.org/sengoku/docs/NikkeiLinux00-03_qmail.pdf をご参照。)
またメーリングリストドライバはCMLを使用しています(設定の仕方はこの記事ご参照)。今回はCML+バーチャルドメインの環境構築をメモ。
この設定をすると何がおいしいかというと、
・virtualdomains設定していてもCMLでML運用可能
っていうことです。
つまり、domain1.comとdomain2.comを運用していたとすると、ML@domain1.comとML@domain2.comは明確に 違うMLになるわけです。
*1 virtualdomains設定していないと上記は一緒のML
*2 CMLではドメインに関係なく同一の名前のメーリングリストは作れない。
( CMLを二重にインスコすれば可?また.qmaiに直接書く等の方法なら可。)
以下4つのファイルに修正を加えます。
~CML/alias-root.pl
~CML/alias-user.pl
~CML/cmld
~CML/cmdt
修正点は以下。
・virtualdomainを入力するように修正
・/var/qmail/control/virtualdomainsをチェック
・cmld, cmdtはDOMAINを指定するように修正
パッチを作ったので置いておきます。(責任は持てません)
alias-root.pl.patch
--- alias-root.pl.org 2004-07-17 20:55:23.000000000 +0900
+++ alias-root.pl 2004-08-03 20:15:43.000000000 +0900
@@ -7,6 +7,7 @@
$mlname = $ARGV[0];
$admin = $ARGV[1];
+$virtualdomain = $ARGV[2];
$answer = "";
$nobody = "";
@@ -14,6 +15,7 @@
print "You have to exclude '\@domain.name'\n";
$mlname = "";
$admin = "";
+ $virtualdomain = "";
}
until ($answer =~ /[yY]/ || $answer =~ /[yY][eE][sS]/) {
@@ -33,6 +35,29 @@
$admin = "";
}
}
+ while ($virtualdomain eq "") {
+ print "Enter ML Virtualdomain name: ";
+ chomp($vdomain =
+ if($vdomain eq "") {
+ $vdomain = "none";
+ }
+ $virtualdomain = $vdomain;
+ }
+ if(!open(IN,"/var/qmail/control/virtualdomains")){
+ print "virtualdomains file is not set.\n";
+ $vdomain = "none";
+ }
+ @lines =
+ close(IN);
+ foreach $line (@lines) {
+ chomp($line);
+ if ($line =~ /$vdomain/i){
+ ($domain,$alias) = split(/:/,$line);
+ ($alasname,$virtualdomain) = split(/-/,$alias);
+ }
+ }
+ if ($vdomain eq "none") { $virtualdomain = ""; }
+
print "Enter qmail alias directly [/var/qmail/alias]: ";
chomp($qmaildir =
if ($qmaildir eq "") {
@@ -40,6 +65,7 @@
}
print "\nML name is '$mlname'.\n";
print "ML admin is '$admin'.\n";
+ print "ML virtualdomain is '$virtualdomain'.\n";
print "qmail alias directly is '$qmaildir'.\n\n";
print "Are they correct? [y/N]: ";
chomp($answer =
@@ -51,6 +77,10 @@
print "\nInstalling alias files...\n\n";
+if($virtualdomain ne "") {
+ $mlname = "\L${virtualdomain}\E-\L${mlname}\E";
+}
+
open(MLADMIN, ">${qmaildir}/.qmail-\L${mlname}\E-request") || die "$!";
print MLADMIN "${admin}-\L${mlname}\E-request\n";
print "Created ${qmaildir}/.qmail-\L${mlname}\E-request\n";
alias-user.pl.patch
--- alias-user.pl.org 2004-07-17 20:55:24.000000000 +0900
+++ alias-user.pl 2004-08-03 20:17:46.000000000 +0900
@@ -11,6 +11,7 @@
$mlname = $ARGV[0];
$admin = $ARGV[1];
+$virtualdomain = $ARGV[2];
$answer = "";
$cmldir = "";
@@ -36,6 +37,29 @@
$admin = $tmpadmin;
}
}
+ while ($virtualdomain eq "") {
+ print "Enter ML Virtualdomain name: ";
+ chomp($vdomain =
+ if($vdomain eq "") {
+ $vdomain = "none";
+ }
+ $virtualdomain = $vdomain;
+ }
+ if(!open(IN,"/var/qmail/control/virtualdomains")){
+ print "virtualdomains file is not set.\n";
+ $vdomain = "none";
+ }
+ @lines =
+ close(IN);
+ foreach $line (@lines) {
+ chomp($line);
+ if ($line =~ /$vdomain/i){
+ ($domain,$alias) = split(/:/,$line);
+ ($alasname,$virtualdomain) = split(/-/,$alias);
+ }
+ }
+ if ($vdomain eq "none") { $virtualdomain = ""; }
+
while ($cmldir eq "") {
print "Enter cml directly [${tmpcmldir}]: ";
chomp($cmldir =
@@ -50,6 +74,7 @@
}
print "\nML name is '$mlname'.\n";
print "ML admin is '$admin'.\n";
+ print "ML virtualdomain is '$virtualdomain'.\n";
print "CML directly is '$cmldir'.\n\n";
print "Are they correct? [y/N]";
chomp($answer =
@@ -62,33 +87,39 @@
print "\nInstalling alias files...\n\n";
-open(MLADMIN, ">.qmail-\L${mlname}\E-request") || die "$!";
+if($virtualdomain ne "") {
+ $mlvname = "\L${virtualdomain}\E-\L${mlname}\E";
+} else {
+ $mlvname = $mlname;
+}
+
+open(MLADMIN, ">.qmail-\L${mlvname}\E-request") || die "$!";
print MLADMIN "$admin\n";
-print "Created ~/.qmail-\L${mlname}\E-request\n";
+print "Created ~/.qmail-\L${mlvname}\E-request\n";
close(MLADMIN);
-open(ML, ">.qmail-\L${mlname}\E") || die "$!";
+open(ML, ">.qmail-\L${mlvname}\E") || die "$!";
print ML "|${cmldir}/cmld ${mlname}\n";
-print "Created ~/.qmail-\L${mlname}\E\n";
+print "Created ~/.qmail-\L${mlvname}\E\n";
close(ML);
-open(MLCONTROL, ">.qmail-\L${mlname}\E-control") || die "$!";
+open(MLCONTROL, ">.qmail-\L${mlvname}\E-control") || die "$!";
print MLCONTROL "|${cmldir}/cmas ${mlname}\n";
-print "Created ~/.qmail-\L${mlname}\E-control\n";
+print "Created ~/.qmail-\L${mlvname}\E-control\n";
close(MLCONTROL);
-if (-l ".qmail-\L${mlname}\E-dist") {
- unlink(".qmail-\L${mlname}\E-dist") || die "$!";
+if (-l ".qmail-\L${mlvname}\E-dist") {
+ unlink(".qmail-\L${mlvname}\E-dist") || die "$!";
}
-symlink("${cmldir}/${mlname}/${mlname}-list", ".qmail-\L${mlname}\E-dist") || die "$!";
-print "Created ~/.qmail-\L${mlname}\E-dist\n";
+symlink("${cmldir}/${mlname}/${mlname}-list", ".qmail-\L${mlvname}\E-dist") || die "$!";
+print "Created ~/.qmail-\L${mlvname}\E-dist\n";
-if (-l ".qmail-\L${mlname}\E-digest-dist") {
- unlink(".qmail-\L${mlname}\E-digest-dist") || die "$!";
+if (-l ".qmail-\L${mlvname}\E-digest-dist") {
+ unlink(".qmail-\L${mlvname}\E-digest-dist") || die "$!";
}
-symlink("${cmldir}/${mlname}/${mlname}-digest", ".qmail-\L${mlname}\E-digest-dist") || die "$!";
-print "Created ~/.qmail-\L${mlname}\E-digest-dist\n";
+symlink("${cmldir}/${mlname}/${mlname}-digest", ".qmail-\L${mlvname}\E-digest-dist") || die "$!";
+print "Created ~/.qmail-\L${mlvname}\E-digest-dist\n";
-chmod(0644, ".qmail-\L${mlname}\E", ".qmail-\L${mlname}\E-control") || die "$!" ;
+chmod(0644, ".qmail-\L${mlvname}\E", ".qmail-\L${mlvname}\E-control") || die "$!" ;
print "\ndone.\n\n";
cmld.patch
--- cmld.org 2004-07-17 20:59:51.000000000 +0900
+++ cmld 2004-08-03 16:02:36.000000000 +0900
@@ -759,7 +759,7 @@
# Mail send to member of ML
#cat $HEAD $BODY | $SENDMAIL -oi -f$UNIXFROM -oem -odb $ML-dist
-cat $HEAD $BODY | $SENDMAIL $SENDMAILOPTION2 -f$UNIXFROM $SENDMAILOPTION3 $ML-dist
+cat $HEAD $BODY | $SENDMAIL $SENDMAILOPTION2 -f$UNIXFROM $SENDMAILOPTION3 $ML-dist@$DOMAIN
if [ "$ARCHIVE" = "DO" ]
then
cmdt.patch
--- cmdt.org 2004-07-17 20:55:19.000000000 +0900
+++ cmdt 2004-08-03 16:04:01.000000000 +0900
@@ -205,7 +205,7 @@
cat $HEAD $DGSTDIST | \
# $SENDMAIL -oi -f$UNIXFROM -oem -odb $ML-digest-dist
- $SENDMAIL $SENDMAILOPTION2 -f$UNIXFROM $SENDMAILOPTION3 $ML-digest-dist
+ $SENDMAIL $SENDMAILOPTION2 -f$UNIXFROM $SENDMAILOPTION3 $ML-digest-dist@$DOMAIN
sleep 60