免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12345下一页
最近访问板块 发新帖
查看: 17910 | 回复: 45
打印 上一主题 下一主题

[FreeBSD] FreeBSD6.1功能完善的mail system [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-09-14 13:31 |只看该作者 |倒序浏览
Email System Install Manual
ver1.1

說明 :

測試域名:test.com ; hostname=mail.test.com
系統環境 :

Postfix + PostfixAdmin + MySQL + Apache22 + PHP4 + PHP4-Session + Cyrus-sasl + Courier-imap + Maildrop + Squirrelmail +ClamAV+Amavisd-new+SpamAssassin

1 OS:FreeBSD 6.1 Release
2 mysql-server-5.x:/usr/ports/database/mysql50-server
3 apache-2.2.x:/usr/ports/www/apache22
4 php5-x:/usr/ports/lang/php5
5 php5-session-5.x:/usr/ports/www/php5-session
6 cyrus-sasl-2.x:/usr/ports/security/cyrus-sasl2
7 postfix-2.3.x:/usr/ports/mail/postfix
8 PostfixAdmin :/usr/ports/mail/postfixadmin
9 courier-imap-4.x:/usr/ports/mail/courier-imap
10 maildrop-1.x:/usr/ports/mail/maildrop
11 squirrelmail-1.4.x:/usr/ports/mail/squirrelmail
12 ClamAV(ClamAntiVirus):/usr/ports/security/clamav
13 Amavisd-new:/usr/ports/security/amavisd-new
14 SpamAssassin:/usr/ports/mail/p5-Mail-SpamAssassin

安裝前先更新port tree
系統采用最小化安裝
#cd /usr/ports/net/csup //切換到安裝路徑
#make install clean //安裝並清除過程中不必要的檔案
#cd /usr/share/examples/cvsup //路徑
#cp ports-supfile /root/ //放到/usr下(看你高興要放哪)
#cd /root
#vi ports-supfile //修改原更新站台位置內容如下
default host CHANGE_THIS.FreeBSD.org //官方站台(預設值)
default host cvsup.cn.freebsd.org //改為國內站台,如此下載速度較快
#cd /root //切換路徑
#rehash //才不會出現指令無效訊息(csup: Command not found.)
#csup -L 2 ports-supfile //開始更新
#cd /usr/ports;make fetchindex //或取ports INDEX文件,可以不做這步

安裝 MySQL50 ( Server/Client )
官方網站:http://www.mysql.com
#cd /usr/ports/databases/mysql50-server/
#make install clean

#vi /etc/rc.conf # 設定 mysql 開機自動啟動

mysql_enable="YES"

#/usr/local/etc/rc.d/mysql-server start # 手動啟動 mysql 。

#netstats -na |grep LISTEN # 確認 mysql server 有啟動

tcp4 0 0 *.3306 *.* LISTEN

Setp 2.

安裝 Apache2.2.x
官方網站 http://www.apache.org
#cd /usr/ports/www/apache22
#make install clean

#vi /etc/rc.conf # 設定 apache22 開機自動 up

apache22_enable="YES"
#vi /boot/loader.conf #添加 apache22的accf 選項
accf_http_local=”yes”

#vi /usr/local/etc/apache22/httpd.conf

ServerAdmin test@test.com
ServerName 127.0.0.1
AddDefaultCharset big5

#/usr/local/sbin/apachectl start
#ps -ax |grep http # 確認 apache 有啟動

70558 ?? Ss 0:00.06 /usr/local/sbin/httpd -k start
70559 ?? S 0:00.01 /usr/local/sbin/httpd -k start
70560 ?? S 0:00.01 /usr/local/sbin/httpd -k start
70561 ?? S 0:00.01 /usr/local/sbin/httpd -k start

Setp 3.

安裝 PHP5 + php5-session + cyrus-sasl2
官方網站 http://www.php.net
#cd /usr/ports/lang/php5
#make install clean
Options for php5.x # 選 apache,debug不選避免zend出錯
[X] APACHE Build Apache Module

#vi /usr/local/etc/apache22/httpd.conf # 修改 apache22 設定讓 php 運行在apache22

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
DirectoryIndex index.php index.html index.html.var

#cd /usr/local/etc/
#cp php.ini-dist php.ini
#vi php.ini

register_globals =On # 修改 register_globals =Off 變成 On ,squirrelmail 會用得到

#cd /usr/ports/www/php5-session/ # 安裝 php5-session 是 postfixadmin 需要用到的,所以是必須要加裝的
官方網站 http://www.php.net
#make install clean

#apachectl restart # 重新起動 apache
#vi /usr/local/www/apache22/data/index.php
<?
phpinfo();
?>

測試 php5 有無安裝成功: http://192.168.2.130/index.php

# cd /usr/ports/security/cyrus-sasl2 # 安裝 cyrus-sasl
官方網站 http://cyrusimap.web.cmu.edu
# make install WITH_AUTHDAEMON=yes clean
#vi /usr/local/lib/sasl2/smtpd.conf # 配置 sasl SMTP 認證
方案一
pwcheck_method: authdaemond
log_level: 3
mech_list: PLAIN LOGIN
authdaemond_path:/var/run/authdaemond/socket

方案二,
pwcheck_method: auxprop
auxprop_plugin: sasldb
mech_list: plain login cram-md5 digest-md5

# saslpasswd2 –c smtpauth@ # 創建用戶smtpauth@,如果不加”@”,將創建形如username@hostname.
Password: # password : 123456
Again (for verification):
# sasldblistusers2 # 查看sasldb2.db
smtpauth@: userPassword
Setp 4.

安裝 Postfix
官方網站 http://www.postfix.org
#cd /usr/ports/mail/postfix
#make install WITH_AUTHDAEMON=yes clean
Postfix configuration options # 只選 SASL2 跟 MySQL
[X] SASL2 Cyrus SASLv2 (Simple Authentication and Security Layer)
[X] MySQL MySQL map lookups (choose version with WITH_MYSQL_VER)

Would you like to activate Postfix in /etc/mail/mailer.conf [n]? y # 選 yes

#vi /etc/rc.conf # 開機自動啟動 postfix
加入:
postfix_enable=”YES”
#echo ‘postfix: root’ >> /etc/aliases
#/usr/local/bin/newaliases
#chown postfix:postfix /etc/opiekeys

#vi /usr/local/etc/postfix/main.cf

myhostname = mail.test.com
mydomain = test.com
myorigin = $mydomain
mydestination = $myhostname localhost localhost.$mydomain
mynetworks = 192.168.2.0/24, 127.0.0.0/8
inet_interfaces = all
relay_domains = $mydestination

virtual_mailbox_base = /var/mailbox/
virtual_mailbox_maps = mysql:/usr/local/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_mailbox_domains = mysql:/usr/local/etc/postfix/mysql_virtual_domains_maps.cf
virtual_alias_domains =
virtual_alias_maps = mysql:/usr/local/etc/postfix/mysql_virtual_alias_maps.cf

virtual_uid_maps = static:5001
virtual_gid_maps = static:5001

virtual_transport = virtual
transport_maps = mysql:/usr/local/etc/postfix/mysql_virtual_transport_maps.cf

message_size_limit = 15728640
virtual_mailbox_limit = 2097152000
virtual_create_maildirsize = yes
virtual_mailbox_extended = yes

virtual_mailbox_limit_maps = mysql:/usr/local/etc/postfix/mysql_virtual_mailbox_limit_maps.cf
virtual_mailbox_limit_override = yes
virtual_maildir_limit_message = Sorry,the user's maildir has overdrawn his diskspace quota,please try again later.
virtual_overquota_bounce = yes

broken_sasl_auth_clients = yes
smtpd_recipient_restrictions = permit_mynetworks
permit_sasl_authenticated
permit_auth_destination
reject_invalid_hostname
reject_unknown_sender_domain
reject_non_fqdn_sender
reject_non_fqdn_recipient
reject_unknown_recipient_domain
reject_unauth_pipelining
reject_unauth_destination
reject
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $mydomain
smtpd_sasl_security_options = noanonymous
smtpd_sasl_application_name = smtpd
smtpd_client_restrictions = permit_sasl_authenticated
reject_non_fqdn_sender
reject_unknown_sender_domain
reject_sender_login_mismatch
smtpd_banner = $myhostname ESMTP "SZ Mail Server"

content_filter = smtp-amavis:[127.0.0.1]:10024


說明:同域多服務器情況
test.com 域下有A(廣州office) 、B(深圳office)兩台mail server ,A保存所有廣州office的郵箱;B 保存所有深圳office的郵箱。
廣州office:所有發往 “廣州office”內部的郵件將由A mail server進行本地投遞,發往 “深圳office” 的郵件將通過transport_maps (mail address list) 指向 B mail server 進行投遞。
深圳office:所有發往 “深圳office”內部的郵件將由B mail server進行本地投遞,發往 “廣州office”的郵件將通過transport_maps (mail address list) 指向 A mail server 進行投遞。
其中:A mail server 的transport_maps 記錄 “深圳office”的所有郵件地址;B mail server的transport_maps 記錄 “廣州office” 的所有郵件地址。

#mkdir /var/mailbox # 建立郵件存放目錄

#pw groupadd vmail -g 5001 # 建立 vmail 這個使用者帳號及群組
#pw useradd vmail -u 5001 -g 5001 -s/sbin/nologin -d/dev/null # 無home目錄及不可登錄系統。

#chown -R vmail:vmail /var/mailbox
#chmod -R ug+rwx,o-rwx /var/mailbox #(chmod –R 770 /var/mailbox)

#vi /usr/local/etc/postfix/mysql_virtual_alias_maps.cf # 建立MySQL 跟 postfix 之間的資料對應關聯文件,總共五個。
user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = alias
select_field = goto
where_field = address

#vi /usr/local/etc/postfix/mysql_virtual_domains_maps.cf
user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = domain
select_field = description
where_field = domain

#vi /usr/local/etc/postfix/mysql_virtual_transport_maps.cf
user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = alias
select_field = transport_maps
where_field = mlist
#vi /usr/local/etc/postfix/mysql_virtual_mailbox_maps.cf
user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = mailbox
select_field = maildir
where_field = username

#vi /usr/local/etc/postfix/mysql_virtual_mailbox_limit_maps.cf
user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = mailbox
select_field = quota
where_field = username

#/usr/local/sbin/postfix start # 啟動 postfix

[ 本帖最后由 @kang 于 2006-9-16 10:23 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2006-09-14 13:32 |只看该作者
Setp 4.

安裝 Postfixadmin
官方網站 http://high5.net/postfixadmin
#cd /usr/ports/mail/postfixadmin/
#make install clean

#chown -R vmail:vmail /usr/local/www/postfixadmin # 修改所有 postfixadmin 的目錄資料夾權限
#cd /usr/local/www/postfixadmin
#chmod 640 *.php *.css
#cd /usr/local/www/postfixadmin/admin/
#chmod 640 *.php .ht*
#cd /usr/local/www/postfixadmin/images/
#chmod 640 *.gif *.png
#cd /usr/local/www/postfixadmin/languages/
#chmod 640 *.lang
#cd /usr/local/www/postfixadmin/templates/
#chmod 640 *.tpl
#cd /usr/local/www/postfixadmin/users/
#chmod 640 *.php

#cd /usr/local/www/postfixadmin # 建立 Postfixadmin 的 MySQL 資料庫
vi DATABASE_MYSQL.TXT # 在以下位置新增兩行,加下劃線紅色的為新增行
# Table structure for table alias # ailas表中存儲alias 和transport_maps 信息。
#
CREATE TABLE alias (
address varchar(255) NOT NULL default '',
goto text NOT NULL,
domain varchar(255) NOT NULL default '',
created datetime NOT NULL default '0000-00-00 00:00:00',
modified datetime NOT NULL default '0000-00-00 00:00:00',
active tinyint(1) NOT NULL default '1',
mlist varchar(255) NULL default ‘’, # 新增字段mlist
transport_maps varchar(255) NULL default ‘’, # 新增字段 transport_maps
PRIMARY KEY (address),
KEY address (address)
) TYPE=MyISAM COMMENT='Postfix Admin - Virtual Aliases';

#mysql -u root –p < DATABASE_MYSQL.TXT # root password: testadmin

#vi config.inc.php # 修改 postfixadmin 的設定檔
$CONF['default_language'] = 'tw';
$CONF['database_type'] = 'mysql';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfixadmin';
$CONF['database_password'] = 'postfixadmin';
$CONF['database_name'] = 'postfix';
$CONF['encrypt'] = 'md5crypt'; # 用md5 加密密碼
$CONF['domain_path'] = 'YES';
$CONF['domain_in_mailbox'] = 'NO';
$CONF['quota'] = 'YES';
$CONF['alias_control'] = 'YES';
$CONF['footer_text'] = 'Return to mail.test.com';
$CONF['footer_link'] = 'http://mail.test.com/postfixadmin/';

论坛徽章:
0
3 [报告]
发表于 2006-09-14 13:32 |只看该作者
#vi /usr/local/etc/apache22/httpd.conf # 修改 apache 的 User 跟 Group

#User www
#Group www
User vmail
Group vmail

#vi /usr/local/etc/apache22/Includes/mine.conf # 增加 apache 對應的 postfixadmin 虛擬目錄

Alias /postfixadmin/ "/usr/local/www/postfixadmin/"
<Directory "/usr/local/www/postfixadmin">
Options None
AllowOverride ALL
Order allow,deny
Allow from all
</Directory>

#apachectl stop # 重新啟動apache
#apachectl start

由於postfixadmin 本身沒有添加transport_maps選項功能,為了實現添加mail address list記錄到alias 表中需要修改以下幾個文件:
# vi /usr/local/www/postfixadmin/variables.inc.php # 增加如下四個變量
$fTransport_maps = "";
$fMlist = "";
$tMlist = "";
$tTransport_maps = "";

# vi /usr/local/www/postfixadmin/templates/craete-alias.tpl # 加下劃線部分為新增行

<div id="edit_form">
<form name="alias" method="post">
<table>
<tr>
<td colspan="3"><h3><?php print $PALANG['pCreate_alias_welcome']; ?></h3></td>
</tr>
<tr>
<td><?php print $PALANG['pCreate_alias_address']; ?></td>
<td><input class="flat" type="text" name="fAddress" value="<?php print $tAddress; ?>" /></td>
<td>
<select class="flat" name="fDomain">
<?php
for ($i = 0; $i < sizeof ($list_domains); $i++)
{
if ($tDomain == $list_domains[$i])
{
print "<option value=\"$list_domains[$i]\" selected>$list_domains[$i]</option>\n";
}
else
{
print "<option value=\"$list_domains[$i]\">$list_domains[$i]</option>\n";
}
}
?>
</select>
<?php print $pCreate_alias_address_text; ?>
</td>
</tr>
<tr>
<td><?php print $PALANG['pCreate_alias_goto'] . ":"; ?></td>
<td><input class="flat" type="text" name="fGoto" value="<?php print $tGoto; ?>" /></td>
<td><?php print $pCreate_alias_goto_text; ?></td>
</tr>
<tr>
<td><?php print "Mlist" . ":"; ?></td>
<td><input class="flat" type="text" name="fMlist" value="<?php print $tMlist; ?>" /></td>
</tr>
<tr>
<td><?php print "Transport_maps" . ":"; ?></td>
<td><input class="flat" type="text" name="fTransport_maps" value="<?php print $tTransport_maps; ?>" /></td>
</tr>
<tr>
<td colspan="3" class="hlp_center"><input class="button" type="submit" name="submit" value="<?php print $PALANG['pCreate_alias_button']; ?>" /></td>
</tr>
<tr>
<td colspan="3" class="standout"><?php print $tMessage; ?></td>
</tr>
<tr>
<td colspan="3" class="help_text"><?php print $PALANG['pCreate_alias_catchall_text']; ?></td>
</tr>
</table>
</div>

# vi /usr/local/www/postfixadmin/templates/edit-alias.tpl # 加下劃線部分為新增或修改部分

<div id="edit_form">
<form name="alias" method="post">
<table>
<tr>
<td colspan="3"><h3><?php print $PALANG['pEdit_alias_welcome']; ?></h3></td>
</tr>
<tr>
<td><?php print $PALANG['pEdit_alias_address'] . ":"; ?></td>
<td><?php print $fAddress; ?></td>
<td>&nbsp;</td>
</tr>
<tr>
<td><?php print $PALANG['pEdit_alias_goto'] . ":"; ?></td>
<td>
<textarea class="flat" rows="10" cols="60" name="fGoto">
<?php
$array = preg_split ('/,/', $tGoto);
for ($i = 0 ; $i < sizeof ($array) ; $i++)
{
if (empty ($array[$i])) continue;
print "$array[$i]\n";
}
?>
</textarea>
</td>
<td>&nbsp;</td>
</tr>
<tr>
<td><?php print "Mlist" . ":"; ?></td>
<td><input class="flat" type="text" name="fMlist" value="<?php print $tMlist; ?>" /></td>
</tr>
<tr>
<td><?php print "Transport_maps" . ":"; ?></td>
<td><input class="flat" type="text" name="fTransport_maps" value="<?php print $tTransport_maps; ?>" /></td>
</tr>
<tr>
<td colspan="3" class="hlp_center"><input class="button" type="submit" name="submit" value="<?php print $PALANG['pEdit_alias_button']; ?>" /></td>
</tr>
<tr>
<td colspan="3" class="standout"><?php print $tMessage; ?></td>
</tr>
</table>
</form>
</div>

# vi /usr/local/www/postfixadmin/templates/admin_list-virtual.tpl # 加下劃線部分為新增或修改部分
<div id="admin_virtual">
<form name="overview" method="post">
<select name="fDomain" onChange="this.form.submit()";>
<?php
for ($i = 0; $i < sizeof ($list_domains); $i++)
{
if ($fDomain == $list_domains[$i])
{
print "<option value=\"$list_domains[$i]\" selected>$list_domains[$i]</option>\n";
}
else
{
print "<option value=\"$list_domains[$i]\">$list_domains[$i]</option>\n";
}
}
?>
</select>
<input type="hidden" name="limit" value="0">
<input type="submit" name="go" value="<?php print $PALANG['pAdminList_virtual_button']; ?>" />
</form>
<h4><?php print $PALANG['pAdminList_virtual_welcome'] . $fDomain; ?></h4>
<p><?php print $PALANG['pAdminList_virtual_alias_alias_count'] . ": " . $limit['alias_count'] . " / " . $limit['aliases']; ?></p>
<p><?php print $PALANG['pAdminList_virtual_alias_mailbox_count'] . ": " . $limit['mailbox_count'] . " / " . $limit['mailboxes']; ?></p>
<form name="search" method="post" action="search.php">
<input type="textbox" name="search" size="10">
</form>
</div>

<?php
print "<div id=\"nav_bar\">\n";
if ($tDisplay_back_show == 1)
{
print "<a href=\"list-virtual.php?domain=$fDomain&limit=$tDisplay_back\"><img border=\"0\" src=\"../images/arrow-l.png\" title=\"" . $PALANG['pOverview_left_arrow'] . "\" alt=\"" . $PALANG['pOverview_left_arrow'] . "\"></a>\n";
}
if ($tDisplay_up_show == 1)
{
print "<a href=\"list-virtual.php?domain=$fDomain&limit=0\"><img border=\"0\" src=\"../images/arrow-u.png\" title=\"" . $PALANG['pOverview_up_arrow'] . "\" alt=\"" . $PALANG['pOverview_up_arrow'] . "\"></a>\n";
}
if ($tDisplay_next_show == 1)
{
print "<a href=\"list-virtual.php?domain=$fDomain&limit=$tDisplay_next\"><img border=\"0\" src=\"../images/arrow-r.png\" title=\"" . $PALANG['pOverview_right_arrow'] . "\" alt=\"" . $PALANG['pOverview_right_arrow'] . "\"></a>\n";
}
print "</div>\n";

if (sizeof ($tAlias) > 0)
{
print "<table id=\"alias_table\">\n";
print " <tr>\n";
print " <td colspan=\"5\"><h3>" . $PALANG['pOverview_alias_title'] . "</h3></td>";
print " </tr>";
print " <tr class=\"header\">\n";
print " <td>" . $PALANG['pAdminList_virtual_alias_address'] . "</td>\n";
print " <td>" . $PALANG['pAdminList_virtual_alias_goto'] . "</td>\n";
print " <td>Transport_map</td>\n";
print " <td colspan=\"2\">&nbsp;</td>\n";
print " </tr>\n";

for ($i = 0; $i < sizeof ($tAlias); $i++)
{
if ((is_array ($tAlias) and sizeof ($tAlias) > 0))
{
print " <tr class=\"hilightoff\" onMouseOver=\"className='hilighton';\" onMouseOut=\"className='hilightoff';\">\n";
print " <td>" . $tAlias[$i]['address'] . "</td>\n";
print " <td>" . ereg_replace (",", "<br>", $tAlias[$i]['goto']) . "</td>\n";
print " <td>" . $tAlias[$i]['transport_maps'] . "</td>\n";
print " <td><a href=\"edit-alias.php?address=" . urlencode ($tAlias[$i]['address']) . "&domain=$fDomain" . "\">" . $PALANG['edit'] . "</a></td>\n";
print " <td><a href=\"delete.php?table=alias" . "&delete=" . urlencode ($tAlias[$i]['address']) . "&domain=$fDomain" . "\"onclick=\"return confirm ('" . $PALANG['confirm'] . $PALANG['pOverview_get_aliases'] . ": ". $tAlias[$i]['address'] . "')\">" . $PALANG['del'] . "</a></td>\n";
print " </tr>\n";
}
}
print "</table>\n";
}

if (sizeof ($tMailbox) > 0)
{
print "<table id=\"mailbox_table\">\n";
print " <tr>\n";
print " <td colspan=\"7\"><h3>" . $PALANG['pOverview_mailbox_title'] . "</h3></td>";
print " </tr>";
print " <tr class=\"header\">\n";
print " <td>" . $PALANG['pAdminList_virtual_mailbox_username'] . "</td>\n";
print " <td>" . $PALANG['pAdminList_virtual_mailbox_name'] . "</td>\n";
if ($CONF['quota'] == 'YES') print " <td>" . $PALANG['pAdminList_virtual_mailbox_quota'] . "</td>\n";
print " <td>" . $PALANG['pAdminList_virtual_mailbox_modified'] . "</td>\n";
print " <td>" . $PALANG['pAdminList_virtual_mailbox_active'] . "</td>\n";
print " <td colspan=\"2\">&nbsp;</td>\n";
print " </tr>\n";

for ($i = 0; $i < sizeof ($tMailbox); $i++)
{
if ((is_array ($tMailbox) and sizeof ($tMailbox) > 0))
{
print " <tr class=\"hilightoff\" onMouseOver=\"className='hilighton';\" onMouseOut=\"className='hilightoff';\">\n";
print " <td>" . $tMailbox[$i]['username'] . "</td>\n";
print " <td>" . $tMailbox[$i]['name'] . "</td>\n";
if ($CONF['quota'] == 'YES') print " <td>" . $tMailbox[$i]['quota'] / $CONF['quota_multiplier'] . "</td>\n";
print " <td>" . $tMailbox[$i]['modified'] . "</td>\n";
$active = ($tMailbox[$i]['active'] == 1) ? $PALANG['YES'] : $PALANG['NO'];
print " <td><a href=\"edit-active.php?username=" . urlencode ($tMailbox[$i]['username']) . "&domain=$fDomain" . "\">" . $active . "</a></td>\n";
print " <td><a href=\"edit-mailbox.php?username=" . urlencode ($tMailbox[$i]['username']) . "&domain=$fDomain" . "\">" . $PALANG['edit'] . "</a></td>\n";
print " <td><a href=\"delete.php?table=mailbox" . "&delete=" . urlencode ($tMailbox[$i]['username']) . "&domain=$fDomain" . "\"onclick=\"return confirm ('" . $PALANG['confirm'] . $PALANG['pOverview_get_mailboxes'] . ": ". $tMailbox[$i]['username'] . "')\">" . $PALANG['del'] . "</a></td>\n";
print " </tr>\n";
}
}
print "</table>\n";
}
?>

# vi /usr/local/www/postfixadmin/admin/create-alias.php # 加下劃線部分為新增或修改部分
<?php
//
// Postfix Admin
// by Mischa Peters <mischa at high5 dot net>
// Copyright (c) 2002 - 2005 High5!
// License Info: http://www.postfixadmin.com/?file=LICENSE.TXT
//
// File: create-alias.php
//
// Template File: create-alias.tpl
//
// Template Variables:
//
// tMessage
// tAddress
// tGoto
// tDomain
//
// Form POST \ GET Variables:
//
// fAddress
// fGoto
// fDomain
//
require ("../variables.inc.php");
require ("../config.inc.php");
require ("../functions.inc.php");
include ("../languages/" . check_language () . ".lang");

$list_domains = list_domains ();

if ($_SERVER['REQUEST_METHOD'] == "GET")
{
$pCreate_alias_goto_text = $PALANG['pCreate_alias_goto_text'];

if (isset ($_GET['domain'])) $tDomain = escape_string ($_GET['domain']);

include ("../templates/header.tpl");
include ("../templates/admin_menu.tpl");
include ("../templates/create-alias.tpl");
include ("../templates/footer.tpl");
}

if ($_SERVER['REQUEST_METHOD'] == "POST")
{
$pCreate_alias_goto_text = $PALANG['pCreate_alias_goto_text'];

$fAddress = escape_string ($_POST['fAddress']) . "@" . escape_string ($_POST['fDomain']);
$fAddress = strtolower ($fAddress);
$fGoto = escape_string ($_POST['fGoto']);
$fGoto = strtolower ($fGoto);
$fMlist = escape_string ($_POST['fMlist']);
$fMlist = strtolower ($fMlist);
$fTransport_maps = escape_string ($_POST['fTransport_maps']);
$fTransport_maps = strtolower ($fTransport_maps);
$fDomain = escape_string ($_POST['fDomain']);

if (!preg_match ('/@/',$fGoto))
{
$fGoto = $fGoto . "@" . escape_string ($_POST['fDomain']);
}

if (!check_alias ($fDomain))
{
$error = 1;
$tAddress = escape_string ($_POST['fAddress']);
$tGoto = $fGoto;
$tDomain = $fDomain;
$tMlist = $fMlist;
$tTransport_maps = $fTransport_maps;
$pCreate_alias_address_text = $PALANG['pCreate_alias_address_text_error3'];
}

if (empty ($fAddress) or !check_email ($fAddress))
{
$error = 1;
$tAddress = escape_string ($_POST['fAddress']);
$tGoto = $fGoto;
$tMlist = $fMlist;
$tTransport_maps = $fTransport_maps;
$tDomain = $fDomain;
$pCreate_alias_address_text = $PALANG['pCreate_alias_address_text_error1'];
}

if (empty ($fGoto) or !check_email ($fGoto))
{
$error = 1;
$tAddress = escape_string ($_POST['fAddress']);
$tGoto = $fGoto;
$tDomain = $fDomain;
$tMlist = $fMlist;
$tTransport_maps = $fTransport_maps;
$pCreate_alias_goto_text = $PALANG['pCreate_alias_goto_text_error'];
}

if (escape_string ($_POST['fAddress']) == "*") $fAddress = "@" . escape_string ($_POST['fDomain']);

$result = db_query ("SELECT * FROM alias WHERE address='$fAddress'");
if ($result['rows'] == 1)
{
$error = 1;
$tAddress = escape_string ($_POST['fAddress']);
$tGoto = $fGoto;
$tDomain = $fDomain;
$tMlist = $fMlist;
$tTransport_maps = $fTransport_maps;
$pCreate_alias_address_text = $PALANG['pCreate_alias_address_text_error2'];
}

if ($error != 1)
{
if (preg_match ('/^\*@(.*)$/', $fGoto, $match)) $fGoto = "@" . $match[1];

$result = db_query ("INSERT INTO alias (address,goto,domain,created,modified,mlist,transport_maps) VALUES ('$fAddress','$fGoto','$fDomain',NOW(),NOW(),'$fMlist','$fTransport_maps')");
if ($result['rows'] != 1)
{
$tDomain = $fDomain;
$tMessage = $PALANG['pCreate_alias_result_error'] . "<br />($fAddress -> $fGoto)<br />";
}
else
{
db_log ($CONF['admin_email'], $fDomain, "create alias", "$fAddress -> $fGoto");

$tDomain = $fDomain;
$tMessage = $PALANG['pCreate_alias_result_succes'] . "<br />($fAddress -> $fGoto)</br />";
}
}

include ("../templates/header.tpl");
include ("../templates/admin_menu.tpl");
include ("../templates/create-alias.tpl");
include ("../templates/footer.tpl");
}
?>

论坛徽章:
0
4 [报告]
发表于 2006-09-14 13:33 |只看该作者
# vi /usr/local/www/postfixadmin/admin/edit-alias.php # 加下劃線部分為新增或修改部分
<?php
//
// Postfix Admin
// by Mischa Peters <mischa at high5 dot net>
// Copyright (c) 2002 - 2005 High5!
// License Info: http://www.postfixadmin.com/?file=LICENSE.TXT
//
// File: edit-alias.php
//
// Template File: edit-alias.tpl
//
// Template Variables:
//
// tMessage
// tGoto
//
// Form POST \ GET Variables:
//
// fAddress
// fDomain
// fGoto
//
require ("../variables.inc.php");
require ("../config.inc.php");
require ("../functions.inc.php");
include ("../languages/" . check_language () . ".lang");

if ($_SERVER['REQUEST_METHOD'] == "GET")
{
$fAddress = escape_string ($_GET['address']);
$fDomain = escape_string ($_GET['domain']);

$result = db_query ("SELECT * FROM alias WHERE address='$fAddress' AND domain='$fDomain'");
if ($result['rows'] == 1)
{
$row = db_array ($result['result']);
$tGoto = $row['goto'];
$tMlist = $row['mlist'];
$tTransport_maps = $row['transport_maps'];
}
else
{
$tMessage = $PALANG['pEdit_alias_address_error'];
}

include ("../templates/header.tpl");
include ("../templates/admin_menu.tpl");
include ("../templates/edit-alias.tpl");
include ("../templates/footer.tpl");
}

if ($_SERVER['REQUEST_METHOD'] == "POST")
{
$pEdit_alias_goto = $PALANG['pEdit_alias_goto'];

$fAddress = escape_string ($_GET['address']);
$fAddress = strtolower ($fAddress);
$fDomain = escape_string ($_GET['domain']);
$fGoto = escape_string ($_POST['fGoto']);
$fGoto = strtolower ($fGoto);
$fMlist = escape_string ($_POST['fMlist']);
$fMlist = strtolower ($fMlist);
$fTransport_maps = escape_string ($_POST['fTransport_maps']);
$fTransport_maps = strtolower ($fTransport_maps);

if (empty ($fGoto))
{
$error = 1;
$tGoto = $fGoto;
$tMlist = $fMlist;
$tTransport_maps = $fTransport_maps;
$tMessage = $PALANG['pEdit_alias_goto_text_error1'];
}

$goto = preg_replace ('/\\\r\\\n/', ',', $fGoto);
$goto = preg_replace ('/\r\n/', ',', $goto);
$goto = preg_replace ('/[\s]+/i', '', $goto);
$goto = preg_replace ('/\,*$/', '', $goto);
$array = preg_split ('/,/', $goto);

for ($i = 0; $i < sizeof ($array); $i++) {
if (in_array ("$array[$i]", $CONF['default_aliases'])) continue;
if (empty ($array[$i])) continue;
if (!check_email ($array[$i]))
{
$error = 1;
$tGoto = $goto;
$tMlist = $fMlist;
$tTransport_maps = $fTransport_maps;
$tMessage = $PALANG['pEdit_alias_goto_text_error2'] . "$array[$i]</div>";
}
}

if ($error != 1)
{
$result = db_query ("UPDATE alias SET goto='$goto',mlist='$fMlist',transport_maps='$fTransport_maps',modified=NOW() WHERE address='$fAddress' AND domain='$fDomain'");
if ($result['rows'] != 1)
{
$tMessage = $PALANG['pEdit_alias_result_error'];
}
else
{
db_log ($CONF['admin_email'], $fDomain, "edit alias", "$fAddress -> $goto");

header ("Location: list-virtual.php?domain=$fDomain");
exit;
}
}

include ("../templates/header.tpl");
include ("../templates/admin_menu.tpl");
include ("../templates/edit-alias.tpl");
include ("../templates/footer.tpl");
}
?>

论坛徽章:
0
5 [报告]
发表于 2006-09-14 13:34 |只看该作者
# vi /usr/local/www/postfixadmin/admin/list-virtual.php # 加下劃線部分為新增或修改部分
<?php
//
// Postfix Admin
// by Mischa Peters <mischa at high5 dot net>
// Copyright (c) 2002 - 2005 High5!
// License Info: http://www.postfixadmin.com/?file=LICENSE.TXT
//
// File: list-virtual.php
//
// Template File: admin_list-virtual.tpl
//
// Template Variables:
//
// tMessage
// tAlias
// tMailbox
//
// Form POST \ GET Variables:
//
// fDomain
//
require ("../variables.inc.php");
require ("../config.inc.php");
require ("../functions.inc.php");
include ("../languages/" . check_language () . ".lang");

$list_domains = list_domains ();

$tAlias = array();
$tMailbox = array();

if ($_SERVER['REQUEST_METHOD'] == "GET")
{
$fDisplay = 0;
$page_size = $CONF['page_size'];

if (isset ($_GET['domain'])) $fDomain = escape_string ($_GET['domain']);
if (isset ($_GET['limit'])) $fDisplay = escape_string ($_GET['limit']);

if ((is_array ($list_domains) and sizeof ($list_domains) > 0)) if (empty ($fDomain)) $fDomain = $list_domains[0];

$limit = get_domain_properties ($fDomain);

if ((is_array ($list_domains) and sizeof ($list_domains) > 0)) if (empty ($fDomain)) $fDomain = $list_domains[1];

if ($CONF['alias_control'] == "YES")
{
$query = "SELECT alias.address,alias.goto,alias.transport_maps FROM alias WHERE alias.domain='$fDomain' ORDER BY alias.address LIMIT $fDisplay, $page_size";
}
else
{
$query = "SELECT alias.address,alias.goto,alias.transport_maps FROM alias LEFT JOIN mailbox ON alias.address=mailbox.username WHERE alias.domain='$fDomain' AND mailbox.maildir IS NULL ORDER BY alias.address LIMIT $fDisplay, $page_size";
}

$result = db_query ("$query");
if ($result['rows'] > 0)
{
while ($row = db_array ($result['result']))
{
$tAlias[] = $row;
}
}

$result = db_query ("SELECT * FROM mailbox WHERE domain='$fDomain' ORDER BY username LIMIT $fDisplay, $page_size");
if ($result['rows'] > 0)
{
while ($row = db_array ($result['result']))
{
$tMailbox[] = $row;
}
}

if (isset ($limit))
{
if ($fDisplay >= $page_size)
{
$tDisplay_back_show = 1;
$tDisplay_back = $fDisplay - $page_size;
}
if (($limit['alias_count'] > $page_size) or ($limit['mailbox_count'] > $page_size))
{
$tDisplay_up_show = 1;
}
if ((($fDisplay + $page_size) < $limit['alias_count']) or (($fDisplay + $page_size) < $limit['mailbox_count']))
{
$tDisplay_next_show = 1;
$tDisplay_next = $fDisplay + $page_size;
}
}

include ("../templates/header.tpl");
include ("../templates/admin_menu.tpl");
include ("../templates/admin_list-virtual.tpl");
include ("../templates/footer.tpl");
}

if ($_SERVER['REQUEST_METHOD'] == "POST")
{
$fDisplay = 0;
$page_size = $CONF['page_size'];

$fDomain = escape_string ($_POST['fDomain']);
if (isset ($_POST['limit'])) $fDisplay = escape_string ($_POST['limit']);

$limit = get_domain_properties ($fDomain);

if ($CONF['alias_control'] == "YES")
{
$query = "SELECT alias.address,alias.goto,alias.transport_maps FROM alias WHERE alias.domain='$fDomain' ORDER BY alias.address LIMIT $fDisplay, $page_size";
}
else
{
$query = "SELECT alias.address,alias.goto,alias.transport_maps FROM alias LEFT JOIN mailbox ON alias.address=mailbox.username WHERE alias.domain='$fDomain' AND mailbox.maildir IS NULL ORDER BY alias.address LIMIT $fDisplay, $page_size";
}

$result = db_query ("$query");
if ($result['rows'] > 0)
{
while ($row = db_array ($result['result']))
{
$tAlias[] = $row;
}
}

$result = db_query ("SELECT * FROM mailbox WHERE domain='$fDomain' ORDER BY username LIMIT $fDisplay, $page_size");
if ($result['rows'] > 0)
{
while ($row = db_array ($result['result']))
{
$tMailbox[] = $row;
}
}

if (isset ($limit))
{
if ($fDisplay >= $page_size)
{
$tDisplay_back_show = 1;
$tDisplay_back = $fDisplay - $page_size;
}
if (($limit['alias_count'] > $page_size) or ($limit['mailbox_count'] > $page_size))
{
$tDisplay_up_show = 1;
}
if ((($fDisplay + $page_size) < $limit['alias_count']) or (($fDisplay + $page_size) < $limit['mailbox_count']))
{
$tDisplay_next_show = 1;
$tDisplay_next = $fDisplay + $page_size;
}
}

include ("../templates/header.tpl");
include ("../templates/admin_menu.tpl");
include ("../templates/admin_list-virtual.tpl");
include ("../templates/footer.tpl");
}
?>

论坛徽章:
0
6 [报告]
发表于 2006-09-14 13:35 |只看该作者
# vi /usr/local/www/postfixadmin/admin/search.php # 加下劃線部分為新增或修改部分
<?php
//
// Postfix Admin
// by Mischa Peters <mischa at high5 dot net>
// Copyright (c) 2002 - 2005 High5!
// License Info: http://www.postfixadmin.com/?file=LICENSE.TXT
//
// File: search.php
//
// Template File: search.tpl
//
// Template Variables:
//
// tAlias
// tMailbox
//
// Form POST \ GET Variables:
//
// fSearch
//
require ("../variables.inc.php");
require ("../config.inc.php");
require ("../functions.inc.php");
include ("../languages/" . check_language () . ".lang");

$tAlias = array();
$tMailbox = array();

if ($_SERVER['REQUEST_METHOD'] == "GET")
{
if (isset ($_GET['search'])) $fSearch = escape_string ($_GET['search']);

if ($CONF['alias_control'] == "YES")
{
$query = "SELECT alias.address,alias.goto,alias.mlist,alias.transport_maps,alias.modified,alias.domain FROM alias WHERE alias.address LIKE '%$fSearch%' OR alias.goto LIKE '%$fSearch%' ORDER BY alias.address";
}
else
{
$query = "SELECT alias.address,alias.goto,alias.mlist,alias.transport_maps ,alias.modified,alias.domain FROM alias LEFT JOIN mailbox ON alias.address=mailbox.username WHERE alias.address LIKE '%$fSearch%' AND mailbox.maildir IS NULL ORDER BY alias.address";
}

$result = db_query ("$query");

if ($result['rows'] > 0)
{
while ($row = db_array ($result['result']))
{
$tAlias[] = $row;
}
}

$result = db_query ("SELECT * FROM mailbox WHERE username LIKE '%$fSearch%' ORDER BY username");
if ($result['rows'] > 0)
{
while ($row = db_array ($result['result']))
{
$tMailbox[] = $row;
}
}

include ("../templates/header.tpl");
include ("../templates/admin_menu.tpl");
include ("../templates/admin_search.tpl");
include ("../templates/footer.tpl");
}

if ($_SERVER['REQUEST_METHOD'] == "POST")
{
if (isset ($_POST['search'])) $fSearch = escape_string ($_POST['search']);

if ($CONF['alias_control'] == "YES")
{
$query = "SELECT alias.address,alias.goto,alias.mlist,alias.transport_maps,alias.modified,alias.domain FROM alias WHERE alias.address LIKE '%$fSearch%' OR alias.goto LIKE '%$fSearch%' ORDER BY alias.address";
}
else
{
$query = "SELECT alias.address,alias.goto,alias.mlist,alias.transport_maps,lias.modified,alias.domain FROM alias LEFT JOIN mailbox ON alias.address=mailbox.username WHERE alias.address LIKE '%$fSearch%' AND mailbox.maildir IS NULL ORDER BY alias.address";
}

$result = db_query ("$query");

if ($result['rows'] > 0)
{
while ($row = db_array ($result['result']))
{
$tAlias[] = $row;
}
}

$result = db_query ("SELECT * FROM mailbox WHERE username LIKE '%$fSearch%' ORDER BY username");
if ($result['rows'] > 0)
{
while ($row = db_array ($result['result']))
{
$tMailbox[] = $row;
}
}

include ("../templates/header.tpl");
include ("../templates/admin_menu.tpl");
include ("../templates/admin_search.tpl");
include ("../templates/footer.tpl");
}
?>

论坛徽章:
0
7 [报告]
发表于 2006-09-14 13:35 |只看该作者
# vi /usr/local/www/postfixadmin/templates/admin_search.tpl # 加下劃線部分為新增或修改部分
<div id="overview">
<h4><?php print $PALANG['pSearch_welcome'] . $fSearch; ?></h4>
<form name="search" method="post" action="search.php">
<input type="textbox" name="search">
</form>
</div>

<?php
if (sizeof ($tAlias) > 0)
{
print "<table id=\"alias_table\">\n";
print " <tr>\n";
print " <td colspan=\"5\"><h3>".$PALANG['pOverview_alias_title']."</h3></td>";
print " </tr>";
print " <tr class=\"header\">\n";
print " <td>" . $PALANG['pOverview_alias_address'] . "</td>\n";
print " <td>" . $PALANG['pOverview_alias_goto'] . "</td>\n";
print " <td>Mlist</td>\n";
print " <td>Transport_maps</td>\n";
print " <td>" . $PALANG['pOverview_alias_modified'] . "</td>\n";
print " <td colspan=\"2\">&nbsp;</td>\n";
print " </tr>\n";

for ($i = 0; $i < sizeof ($tAlias); $i++)
{
if ((is_array ($tAlias) and sizeof ($tAlias) > 0))
{
print " <tr class=\"hilightoff\" onMouseOver=\"className='hilighton';\" onMouseOut=\"className='hilightoff';\">\n";
print " <td>" . $tAlias[$i]['address'] . "</td>\n";
print " <td>" . ereg_replace (",", "<br>", $tAlias[$i]['goto']) . "</td>\n";
print " <td>" . $tAlias[$i]['mlist'] . "</td>\n";
print " <td>" . $tAlias[$i]['transport_maps'] . "</td>\n";
print " <td>" . $tAlias[$i]['modified'] . "</td>\n";
print " <td><a href=\"edit-alias.php?address=" . urlencode ($tAlias[$i]['address']) . "&domain=" . $tAlias[$i]['domain'] . "\">" . $PALANG['edit'] . "</a></td>\n";
print " <td><a href=\"delete.php?table=alias&delete=" . urlencode ($tAlias[$i]['address']) . "&domain=" . $tAlias[$i]['domain'] . "\"onclick=\"return confirm ('" . $PALANG['confirm'] . $PALANG['pOverview_get_aliases'] . ": ". $tAlias[$i]['address'] . "')\">" . $PALANG['del'] . "</a></td>\n";
print " </tr>\n";
}
}

print "</table>\n";
}

if (sizeof ($tMailbox) > 0)
{
print "<table id=\"mailbox_table\">\n";
print " <tr>\n";
print " <td colspan=\"7\"><h3>".$PALANG['pOverview_mailbox_title']."</h3></td>";
print " </tr>";
print " <tr class=\"header\">\n";
print " <td>" . $PALANG['pOverview_mailbox_username'] . "</td>\n";
print " <td>" . $PALANG['pOverview_mailbox_name'] . "</td>\n";
if ($CONF['quota'] == 'YES') print " <td>" . $PALANG['pOverview_mailbox_quota'] . "</td>\n";
print " <td>" . $PALANG['pOverview_mailbox_modified'] . "</td>\n";
print " <td>" . $PALANG['pOverview_mailbox_active'] . "</td>\n";
print " <td colspan=\"2\">&nbsp;</td>\n";
print " </tr>\n";

for ($i = 0; $i < sizeof ($tMailbox); $i++)
{
if ((is_array ($tMailbox) and sizeof ($tMailbox) > 0))
{
print " <tr class=\"hilightoff\" onMouseOver=\"className='hilighton';\" onMouseOut=\"className='hilightoff';\">\n";
print " <td>" . $tMailbox[$i]['username'] . "</td>\n";
print " <td>" . $tMailbox[$i]['name'] . "</td>\n";
if ($CONF['quota'] == 'YES') print " <td>" . $tMailbox[$i]['quota'] / $CONF['quota_multiplier'] . "</td>\n";
print " <td>" . $tMailbox[$i]['modified'] . "</td>\n";
$active = ($tMailbox[$i]['active'] == 1) ? $PALANG['YES'] : $PALANG['NO'];
print " <td><a href=\"edit-active.php?username=" . urlencode ($tMailbox[$i]['username']) . "&domain=" . $tMailbox[$i]['domain'] . "\">" . $active . "</a></td>\n";
print " <td><a href=\"edit-mailbox.php?username=" . urlencode ($tMailbox[$i]['username']) . "&domain=" . $tMailbox[$i]['domain'] . "\">" . $PALANG['edit'] . "</a></td>\n";
print " <td><a href=\"delete.php?table=mailbox&delete=" . urlencode ($tMailbox[$i]['username']) . "&domain=" . $tMailbox[$i]['domain'] . "\"onclick=\"return confirm ('" . $PALANG['confirm'] . $PALANG['pOverview_get_mailboxes'] . ": ". $tMailbox[$i]['username'] . "')\">" . $PALANG['del'] . "</a></td>\n";
print " </tr>\n";
}
}
print "</table>\n";
}
?>

Setp 5.

安装Courier-imap+maildrop
官方網站 http://www.courier-mta.org
#cd /usr/ports/mail/courier-imap
#make WITH_MYSQL=yes install clean
Options for courier-imap 4.1.x # 選了 AUTH_MYSQL,OpenSSl
[X] AUTH_MYSQL MySQL support
[X] OPENSSL
#chmod +x /var/run/authdaemond
#cd /usr/local/etc/courier-imap
#cp imapd.cnf.dist imapd.cnf
#cp pop3d.cnf.dist pop3d.cnf

#vi /usr/local/etc/authlib/authdaemonrc # 刪除其他的 authxxxx 只留下 authmysql

authmodulelist="authmysql"
authmodulelistorig="authmysql"

论坛徽章:
0
8 [报告]
发表于 2006-09-14 13:36 |只看该作者
#vi /usr/local/etc/authlib/authmysqlrc # 注意:在這個文件中不能使用空白鍵,只能用 tab 鍵,localhost 也不能使用單引號。

MYSQL_SERVER localhost
MYSQL_SOCKET /tmp/mysql.sock
MYSQL_DATABASE postfix
MYSQL_USERNAME postfix
MYSQL_PASSWORD postfix
MYSQL_USER_TABLE mailbox
MYSQL_LOGIN_FIELD username
MYSQL_CRYPT_PWFIELD password # 採用md5加密密碼
MYSQL_UID_FIELD '5001'
MYSQL_GID_FIELD '5001'
MYSQL_HOME_FIELD '/var/mailbox/'
MYSQL_MAILDIR_FIELD maildir
MYSQL_NAME_FIELD name
MYSQL_QUOTA_FIELD quota
MYSQL_WHERE_CLAUSE active='1'

#vi /etc/rc.conf # 建立開機自動啟動

courier_authdaemond_enable="YES"
courier_imap_pop3d_enable="YES"
courier_imap_imapd_enable="YES"

安裝 maildrop
如果采用postfix 的virtual則不用安裝
#cd /usr/ports/mail/maildrop # 安裝 maildrop
#make WITH_AUTHLIB=yes install clean
Options for maildrop 2.0.x # 只選了 AUTH_MYSQL
[X] AUTH_MYSQL MySQL support

因為 maildrop 没有建立 maildir 及刪除maildir 的功能,所以要自己建立兩個shell script 執行(maildirmake.sh ,maildirdel.sh),如果采用virtual做transport,virtual可以自動創建郵箱。
#vi /usr/sbin/maildirmake.sh # 建立新的 /usr/sbin/maildirmake.sh 文件

#!/bin/sh
MailDir=”/var/mailbox”
umask 077
mkdir –p “$MailDir/$1”
/usr/local/bin/maildirmake “$MailDir/$1/$2”

#chmod 755 /usr/sbin/maildirmake.sh

#vi /usr/sbin/maildirdel.sh # 該腳本將會刪除用戶的郵箱目錄及目錄下的所有郵件。
#!/bin/sh
rm –rf /var/mailbox/$1/$2
#chmod 755 /usr/sbin/maildirdel.sh

#vi /usr/local/www/postfixadmin/admin/create-mailbox.php # 更改 create-mailbox.php 文件,在此文件的第 200 行後加入下面這一行:

system("/usr/sbin/maildirmake.sh $fDomain ".$_POST['fUsername']);

#vi /usr/local/www/postfixadmin/create-mailbox.php # 同樣也必須要更改 postfixadmin 目錄下的create-mailbox.php 文件,於 210 行後加入下面這行,其作用為讓網域管理員也可新增使用者。

system("/usr/sbin/maildirmake.sh $fDomain ".$_POST['fUsername']);
更改postfixadmin目錄及postfixadmin/admin目錄下的delete.php文件
在$result = db_query ("SELECT * FROM mailbox WHERE username='$fDelete' AND domain='$fDomain'");行後加幾行(在50或90幾行處):
# vi /var/www/postfixadmin/admin/delete.php (vi /var/www/postfixadmin/delete.php)
$userarray=explode("@",$fDelete);
$user=$userarray[0];
$domain=$userarray[1];
system("/usr/sbin/maildirdel.sh $domain $user");
注意:
如果采用virtual 投遞郵件則可以省去以上步驟(到安裝maildrop部分),maildrop也可以不用安裝。
如果沒有安裝maildrop,新建域後需要在/usr/mailbox/下手動新建以域名命名的文件夾,郵箱則由virtual自動創建。
#/usr/local/sbin/authdaemond start # 手動啟動 authdaemond
#ps -ax |grep authdaemond # 確認 authdaemond 有 up

55665 p0 S 0:00.03 /usr/local/libexec/courier-authlib/authdaemond
55666 p0 S 0:00.00 /usr/local/libexec/courier-authlib/authdaemond


#/usr/local/libexec/courier-imap/imapd.rc start # 手動啟動 imap 服務
#/usr/local/libexec/courier-imap/pop3d.rc start # 手動啟動 pop3 服務
#netstat -na |grep LISTEN # 確認 110 跟 143 port 有 up

tcp4 0 0 *.110 *.* LISTEN
tcp4 0 0 *.143 *.* LISTEN

Setp 6.

初步測試 Postfixadmin + Postfix + MySQL
http://192.168.2.130/postfixadmin/setup.php # 查看 Postfixadmin 的 php 環境有無ok

Postfix Admin Setup Checker 1.0.0
Running software:

- PHP version 5.1.4
- Apache/2.2.2 (FreeBSD) PHP/5.1.4
Checking for dependencies:
- Magic Quotes: ON
- Depends on: presence config.inc.php - OK
- Depends on: MySQL 3.23, 4.0 - OK
- Depends on: MySQL 5.x - OK
- Depends on: session - OK
- Depends on: pcre - OK

#cd /usr/local/www/postfixadmin/
#mv setup.php setup_backup.php # 將 setup.php 刪除或改名稱

论坛徽章:
0
9 [报告]
发表于 2006-09-14 13:37 |只看该作者
http://192.168.2.130/postfixadmin/admin/ # 預設帳號密碼為 admin /admin,進入後即可建立新網域及帳號來測試,建立test.com 網域及 test@test.com 帳號,密碼為test,如下圖:
注意
Mlist:只有不是本機地址才需要填寫
Transport_maps: 只有不是本機地址才需要填寫
例如:從深圳office (B mail server) 發送郵件到guangzhou@test.com (A mail server)這個地址,在B mail server 上的mlist,transports_maps設置如下:
Mlist:guangzhou@test.com
Transport_maps:smtp:A.test.com(或者直接輸入ip地址)

如果是本地server的地址,則Mlist,Transport部分不用輸入任何記錄,說明該地址郵件由本地server進行投遞。

#telnet 127.0.0.1 25 # 測試 25 port 看看 postfix 運行有無正常
Trying 127.0.0.1...
Connected to localhost.test.com.
Escape character is '^]'.
220 mail.test.com ESMTP "Version not Available"
mail from:test@test.com
250 Ok
rcpt to:test@test.com
250 Ok
data
354 End data with <CR><LF>.<CR><LF>
Subject:test
1234
.
250 Ok: queued as 4ED91C5124
quit
221 Bye
Connection closed by foreign host.

#telnet 127.0.0.1 110 # 測試 110 port 看看 pop3 有無正常運作
Trying 127.0.0.1...
Connected to localhost.test.com.
Escape character is '^]'.
+OK Hello there.
user test@test.com
+OK Password required.
pass xxxxx
+OK logged in.
list
+OK POP3 clients that break here, they violate STD53.
.
quit
+OK Bye-bye.
Connection closed by foreign host.

檢查 MySQL 資料庫內容
#mysql -u root p # 查看 MySQL 資料庫
mysql>SHOW DATABASES; # 查看 MySQL 有那些資料庫,注意 ”;” 結尾

+ ---------- +
| Database |
+ ---------- +
| mysql |
| postfix |
| test |
+ ---------- +

mysql>USE mysql; # 進入 mysql 資料庫
Database changed
mysql>SHOW TABLES; # 查看 mysql 這個資料庫裡有多少個資料表

+ ----------------- +
| Tables_in_mysql |
+ ----------------- +
| columns_priv |
| db |
| func |
| host |
| tables_priv |
| user |
+ ----------------- +

mysql>DESC db; # 可查看 db 資料表型態
mysql>SELECT * FROM db; # 可查看 db 資料表內所插入的所有內容
mysql>SELECT * FROM user; # 可查看 user 資料表內所插入的所有內容

mysql>USE postfix; # 切換到 postfix 資料庫
Database changed
mysql>SHOW TABLES; # 查看 postfix 資料庫中的所有資料表

+ ------------------- +
| Tables_in_postfix |
+ ------------------- +
| admin |
| alias |
| domain |
| domain_admins |
| log |
| mailbox |
| vacation |
+ ------------------- +

mysql>SELECT * FROM domain; # 查看 domain 資料表內的資料

Setp 7.

安裝 Squirrelmail ( WebMail )
官方網站http://www.squirrlmail.org
#cd /usr/ports/mail/squirrelmail/ # 安裝松鼠 webmail 的主程式,外掛程式需獨立安裝。安裝路徑為:/usr/ports/mail/squirrelmail-*
#make install clean
#vi /usr/local/etc/php.ini # 修改 php.ini

file_uploads = On
session.auto_start = 1

#vi /usr/local/etc/apache22/Includes/mine.conf # 再加入 squirrelmail 的路徑到 apache 網頁目錄

Alias /squirrelmail/ "/usr/local/www/squirrelmail/"
<Directory "/usr/local/www/squirrelmail">
Options None
AllowOverride AuthConfig
Order allow,deny
Allow from all
</Directory>

#apachectl restart # 重新啟動 apache
#chown -R vmail:vmail /var/spool/squirrelmail

#cd /usr/local/www/squirrelmail # 修改 configure 設定值
#./configure
選 10. Languages

1. Default Language : 的 en_US 改成 zh_TW。
2. Default Charset : 改成 big5
Command >> Q
You have not saved your data.
Save? [Y/n]: Y

论坛徽章:
0
10 [报告]
发表于 2006-09-14 13:42 |只看该作者
# Encapsulate spam in an attachment.
# 要如何處理垃圾郵件。因為郵件還會經過防毒程式的處理,所以必須設定為 0。
# 0:將資訊寫入郵件表頭。
# 1:將垃圾郵件轉為附件。
# 2:將垃圾郵件轉為純文字附件。
report_safe 0

# Enable the Bayes system. 使用貝氏學習系統
use_bayes 1
#得分超過10分視為垃圾郵件。
required_score 10
# Enable Bayes auto-learning. 開起貝氏自動學習功能
bayes_auto_learn 1

下載中文垃圾郵件過濾規則Chinese_rules.cf
# cd /usr/local/share/spamassassin/
# fetch http://www.ccert.edu.cn/spam/sa/Chinese_rules.cf
# killall -1 spamd
測試病毒掃描
給該test@test.com用戶發送郵件,包含以下內容:
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
查看日誌 /var/log/maillog,如果出現類似如下提示,則表明成功
Aug 9 15:12:35 mail2 postfix/pipe[1814]: BFF9452118: to=<test@test.com>, orig_to=<virusalert@test.com>, relay=maildrop, delay=0.26, dela
ys=0.15/0.03/0/0.08, dsn=2.0.0, status=sent (delivered via maildrop service)
Aug 9 15:12:35 mail2 postfix/qmgr[530]: BFF9452118: removed
郵件病毒掃描日誌將被記錄在/var/log/clamav/clamav.log中!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP