翻译并修改自Archlinux Wiki。话说Archlinux的Wiki真好啊,基本上需要的资料都能找到。和AUR一起,是我最喜欢Archlinux的两样东西。
1. 安装MySQL、PHP和Apache并配置。
此处不多说,参照此文。
2. 安装配置Postfix
pacman -S postfix
2.1 配置DNS
如果你有自己的域名,需要配置好MX记录和A(或者CNAME)记录,具体方法不在本文讨论之内。
2.2 修改/etc/postfix/main.cf
按照如下示例修改main.cf文件(yourdomain.net替换成你自己的域名):
myhostname = mail.yourdomain.net
mydomain = yourdomain.net
myorigin = $mydomain
mydestination = localhost
mynetworks_style = host
relay_domains = $mydestination
home_mailbox = Maildir/
然后在文件末尾添加如下配置:
virtual_mailbox_domains = virtualdomain.tld
virtual_alias_maps = hash:/etc/postfix/virtual_alias, mysql:/etc/postfix/mysql_virtual_forwards.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailboxes.cf
virtual_mailbox_base = /home/vmailer
virtual_uid_maps = static:5003
virtual_gid_maps = static:5003
virtual_minimum_uid = 5003
virtual_mailbox_limit = 0
其中virtualdomain.tld是你想设置的邮箱域名,例如可以是你的真实域名:yourdomain.net
具体参数的含义参考Wiki。
2.3 修改/etc/postfix/aliases
在此文件里修改或者添加类似如下参数:
root: cactus
cactus是虚拟用户名,即给别人的收件人名。此处设为转给root用户接收,也可以设置为其他用户。
设置完成后,执行:
postalias /etc/postfix/aliases
2.4 新建/etc/postfix/virtual_alias
默认没有此文件,需要新建后粘贴下列配置:
MAILER-DAEMON: postmaster
postmaster: root
# General redirections for pseudo accounts
bin: root
daemon: root
named: root
nobody: root
uucp: root
www: root
ftp-bugs: root
postfix: root
# Put your local aliases here.
# Well-known aliases
manager: root
dumper: root
operator: root
abuse: postmaster
# trap decode to catch security attacks
decode: root
# Person who should get root's mail. Don't receive mail as root!
root: cactus@virtualdomain.tld
修改最后一行即可。然后也是执行下列命令:
postalias /etc/postfix/virtual_alias
2.5 新建/etc/postfix/mysql_virtual_domains.cf
粘贴如下配置:
user = postfixuser password = XXXXXXXXXX hosts = localhost dbname = postfix table = domains select_field = 'virtual' where_field = domain
2.6 新建/etc/postfix/mysql_virtual_mailboxes.cf
粘贴如下配置:
user = postfixuser password = XXXXXXXXXX hosts = localhost dbname = postfix table = users select_field = concat(domain,'/',email,'/') where_field = email
2.7 新建/etc/postfix/mysql_virtual_forwards.cf
粘贴如下配置:
user = postfixuser password = XXXXXXXXXX hosts = localhost dbname = postfix table = forwardings select_field = destination where_field = source
2.8 测试Postfix配置
执行下列命令,如果没有任何错误提示,则配置正常:
postfix check
2.9 添加daemon
在/etc/rc.conf里,在DAEMONS字段中加入postfix,例如:
DAEMONS=(syslog-ng hotplug !pcmcia iptables network netfs crond sshd mysqld postfix httpd)
2.10 新建邮件用户
groupadd -g 5003 vmail useradd -g vmail -u 5003 -d /home/vmailer -s /bin/false vmailer mkdir /home/vmailer chown vmailer.vmail /home/vmailer chmod -R 750 /home/vmailer passwd vmailer
3. 配置MySQL
登录mysql,设置必要的用户和数据库:
mysql -u root -p
3.1 创建邮件服务器专用数据库及mysql用户
建立数据库:
CREATE DATABASE postfix; USE postfix;
建立用户并授权:
CREATE USER 'postfixuser' IDENTIFIED BY 'XXXXXXXXXX'; GRANT SELECT, INSERT, UPDATE, DELETE ON domains TO postfixuser; GRANT SELECT, INSERT, UPDATE, DELETE ON forwardings TO postfixuser; GRANT SELECT, INSERT, UPDATE, DELETE ON users TO postfixuser;
其中,postfixuser和XXXXXXXXXX是在第二步提到的那3个cf文件里配置的。
3.2 建立表
在mysql中直接复制执行下列命令:
CREATE TABLE `domains` (
`domain` varchar(50) NOT NULL default '',
PRIMARY KEY (`domain`),
UNIQUE KEY `domain` (`domain`)
);
CREATE TABLE `forwardings` (
`source` varchar(80) NOT NULL default '',
`destination` text NOT NULL,
PRIMARY KEY (`source`)
);
CREATE TABLE `users` (
`email` varchar(80) NOT NULL default '',
`password` varchar(20) NOT NULL default '',
`quota` varchar(20) NOT NULL default '20971520',
`domain` varchar(255) NOT NULL default '',
UNIQUE KEY `email` (`email`)
);
3.3 加入域名
INSERT INTO `domains` VALUES ('virtualdomain.tld');
3.4 加入一个用户
INSERT INTO `users` VALUES ('cactus@virtualdomain.tld', ENCRYPT('secret'), '20971520', 'virtualdomain.tld');
其中,secret是cactus@virtualdomain.tld这个邮箱帐户的密码。
3.5 测试Postfix
/etc/rc.d/postfix start
用其他邮箱给你配置好的邮箱地址发一封邮件,然后执行:
find /home/vmailer
看到类似以下输出时,说明Postfix工作正常:
/home/vmailer/virtualdomain.tld/cactus@virtualdomain.tld /home/vmailer/virtualdomain.tld/cactus@virtualdomain.tld/tmp /home/vmailer/virtualdomain.tld/cactus@virtualdomain.tld/cur /home/vmailer/virtualdomain.tld/cactus@virtualdomain.tld/new /home/vmailer/virtualdomain.tld/cactus@virtualdomain.tld/new/1102974226.2704_0.bonk.testmail.org
最后的那个1102974226.2704_0.bonk.testmail.org文件就是邮件本身,可以用cat命令查看内容。
4. 安装配置Courier IMAP
安装Courier IMAP:
pacman -S courier-imap courier-imap-mysql
4.1 配置/etc/authlib/authdaemonrc
authmodulelist="authmysql"
即把其他认证类型屏蔽掉,只留这一个。
4.2 配置/etc/authlib/authmysqlrc
MYSQL_SERVER localhost MYSQL_USERNAME postfixuser MYSQL_PASSWORD XXXXXXXXXX MYSQL_SOCKET /var/run/mysqld/mysqld.sock MYSQL_DATABASE postfix # MYSQL_NAME_FIELD name MYSQL_USER_TABLE users MYSQL_CRYPT_PWFIELD password MYSQL_UID_FIELD '5003' MYSQL_GID_FIELD '5003' MYSQL_LOGIN_FIELD email MYSQL_HOME_FIELD "/home/vmailer" MYSQL_MAILDIR_FIELD concat(domain,'/',email,'/') MYSQL_QUOTA_FIELD quota
将斜体部分替换成你自己的对应设置,其他地方照抄即可。
4.3 重启一下服务
/etc/rc.d/authdaemond start /etc/rc.d/courier-imap start /etc/rc.d/courier-imap stop /etc/rc.d/authdaemond stop
然后,修改/etc/conf.d/courier-imap
CI_DAEMONS="imapd" #CI_DAEMONS="imapd pop3d imapd-ssl pop3d-ssl"
4.4 添加daemon
在/etc/rc.conf里,添加courier-imap服务:
DAEMONS=(syslog-ng hotplug !pcmcia iptables network netfs crond sshd mysqld postfix authdaemond courier-imap httpd)
4.5 建立软链接
笔者在依照wiki配置Courier IMAP的过程中,最后出现不认虚拟域名的问题,于是采用软链接的方法解决:
ln -s /home/vmailer/virtualdomain.tld/cactus@virtualdomain.tld /home/vmailer/Maildir
4.6 启动Courier IMAP
/etc/rc.d/courier-imap start
可以从/var/log/mail.log中查看排错信息。
4.7 测试Courier IMAP
telnet localhost imap Trying 127.0.0.1... Connected to localhost.localdomain. Escape character is '^]'. * OK [[CAPABILITY IMAP4rev1 ... ]] Courier-IMAP ready. A LOGIN "cactus@virtualdomain.tld" "password" A OK LOGIN Ok. B SELECT "Inbox" * FLAGS (\Draft \Answered ... \Recent) * OK [[PERMANENTFLAGS (\Draft \Answered ... \Seen)]] Limited * 8 EXISTS * 5 RECENT * OK [[UIDVALIDITY 1026858715]] Ok B OK [[READ-WRITE]] Ok Z LOGOUT * BYE Courier-IMAP server shutting down Z OK LOGOUT completed Connection closed by foreign host.
斜体字是用户输入。
5. 安装配置Squirrelmail
可以事先配置SSL,保证安全传输。不在本文讨论之列。
安装Squirrelmail:
pacman -S squirrelmail
默认安装在/srv/http/squirrelmaildir目录下,即Archlinux的apache默认目录。
5.1 执行配置脚本
cd /srv/http/squirrelmaildir/config perl conf.pl
脚本启动后,按“D”,回车。然后输入”courier”,即选择Courier IMAP的预配置。同时可选修改同目录下config.php内的若干处设置。
5.2 测试配置
用浏览器访问squirrelmail/src/configtest.php,可能会提示目录不存在或无法访问等错误。按照错误提示建立目录及修改权限,并且在/etc/php/php.ini的open_basedir变量中加入新建的目录即可。
5.3 登录Squirrelmail
使用之前自定义的用户名:cactus@virtualdomain.tld 密码: secret,登录网页邮箱。
至此,一个可用的邮件服务器及网页邮箱已经搭建完成,如有问题,欢迎回复讨论!
如需转载此文,请标明来源,谢谢!
本文为悠然居(https://wordpress.youran.me/)的原创文章,转载请注明出处!
注意,现在Courier-imap和Squirrelmail已从官方源移出,进入AUR。请先安装AUR里的yaourt再用其安装两者。
话说什么时候archlinux变得这么复杂了,连安装系统时候的那个图形化界面都没了,改成像Gentoo那样的全命令行形式。这明显抬高了archlinux的门槛啊
virtual_mailbox_domains 重复了
@mugbya
嗯,还是直接看archlinux wiki吧,这三年多里面wiki也更新了不少次了