热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Linux邮件服务器之跟我一步一步来实现一个邮件系统【转】

转自:http:tchuairen.blog.51cto.com38481181686875原创作品,允许转载,转载时请务必以超链接形式标

转自:http://tchuairen.blog.51cto.com/3848118/1686875/

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://tchuairen.blog.51cto.com/3848118/1686875

上一篇介绍了邮件服务器的各组件功能和原理,这次来由浅的入深来一步步实现一个邮件系统。

 

实验环境:

操作系统CentOS release 5.11 64位
postfix-2.11.6
courier-authlib-0.64.0
cyrus-sasl-2.1.22-7.el5_8.1
cyrus-sasl-plain-2.1.22-7.el5_8.1
dovecot.x86_64 0:1.0.7-8.el5_9.1
extman-1.1
extmail-1.2
Unix-Syslog-1.1

一、安装postfix,建立基本配置

postfix安装过程(略)详细可见上一篇博文

 

http://tchuairen.blog.51cto.com/3848118/1684872

 

1、编辑配置文件" /etc/postfix/main.cf " 定义如下内容:

1
2
3
4
5
myhostname = mail.qupeiyin.net
myorigin = $mydomain
mydomain = qupeiyin.net
mydestination = $myhostname, localhost.$mydomain, localhost,$mydomain
mynetworks = 127.0.0.0/8,mynetworks

参数说明:

myhostname主机名,与host那么相同。
myorigin发件人地址域
mydomain  所在域
mydestination目标收件地址
mynetworks 可以被中继的客户端网段
alias_map = hash:/etc/aliases别名查找表

2、安装dovecot实现邮件接收

yum install dovecot -y

编辑配置文件 /etc/dovecot/dovecot.conf 

启用协议

protocols = imap pop3

启动dovecot服务

/etc/init.d/dovecot start

启动成功后会监听端口:imap4:143/tcp,pop3:110/tcp 以明文方式工作;

 

3、postfix + SASL 用户认证

saslauthd -v  显示当前主机saslauthd服务所支持的验证方式

修改验证方式

vim /etc/sysconfig/saslauthd

wKioL1XW0dyhUPUwAAC5iR3uOhs552.jpg

 

启动saslauthd服务

/etc/init.d/saslauthd start

设置开机启动

chkconfig saslauthd on

测试验证机制是否可用,出现OK表示正常;

testsaslauthd -u username-p pass

0: OK "Success."

 

邮箱格式:

mbox:一个文件存储所有邮件

maildir:一个文件存储一封邮件,所有邮件存储在一个目录中;

#home_mailbox = Mailbox  定义邮箱格式

#home_mailbox = Maildir/

#mail_spool_directory = /var/mail   定义maildir格式邮箱文件的保存路径

 

4、让postfix支持sasl认证功能

编辑配置文件 /etc/postfix/main.cf 添加如下内容:

1
2
3
4
5
6
7
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_invalid_hostname,reject_non_fqdn_hostname,reject_unknown_sender_domain,reject_non_fqdn_sender,reject_non_fqdn_recipient,reject_unknown_recipient_domain,reject_unauth_pipelining,reject_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_security_options = noanonymous
smtpd_sasl_path = smtpd
smtpd_banner = Welcome to our Server !

参数说明:

broken_sasl_auth_clients 是否要通过SASL验证客户端身份
smtpd_recipient_restrictions 定义收件人限制
smtpd_sasl_auth_enable = yes启用SASL认证功能
smtpd_sasl_local_domain = $myhostname 基于SASL认证的时候指定本地的域
smtpd_sasl_security_optionsSASL认证的安全选项,noanonymous表示不支持匿名用户
smtpd_sasl_path = smtpd指定使用SASL的服务器程序
smtpd_banner 定义登陆时候的欢迎信息
 
 

参数说明(二):

permit_mynetworks允许本地网络
permit_sasl_authenticated允许SASL验证通过的用户
reject_invalid_hostname拒绝不合法的主机名的主机来收发邮件
reject_non_fqdn_hostname拒绝不是fqdn格式主机名的主机
reject_unknown_sender_domain拒绝无法识别的发件人域
reject_non_fqdn_sender拒绝没有fqdn的发件人
reject_non_fqdn_recipient拒绝没有fqdn的收件人
reject_unknown_recipient_domain拒绝无法识别的收件人域
reject_unauth_pipelining无法验证的管道
reject_unauth_destination拒绝无法验证的目标地址

 

编辑配置文件/usr/lib64/sasl2/smtpd.conf 添加如下内容:

pwcheck_method:saslauthd

mech_list:PLAIN LOGIN

log_level:3

当需要调试的时候,打开log_level可以输出更为详细的信息。

 

5、实现postfix基于客户端的访问控制

在配置文件"/etc/postfix/main.cf"使用如下参数控制:

1
2
3
4
5
smtpd_client_restrictions= 
smtpd_data_restrictions= 
smtpd_helo_restrictions=  
smtpd_recipient_restrictions = permit_mynetworks,reject_unauth_destination
smtpd_sender_restrictions=

参数说明:

smtpd_client_restrictions用于限定符合条件的才允许连接服务器
smtpd_data_restrictions用于限定符合条件的用户才允许发送data指令
smtpd_helo_restrictions用于限定符合条件的用户才允许发送helo指令
smtpd_recipient_restrictions用于限定符合条件的用户才允许发送rcpt to指令
smtpd_sender_restrictions用于限定符合条件的用户才允许发送mail from指令

 

内置限制条件:(更多参考postfix手册)

reject_unauth_destination-拒绝未经认证的目标

permit_mynetworks-该网段的主机可以被中继

 

编辑配置文件 /usr/lib64/sasl2/smtpd.conf 添加以下内容:

pwcheck_method:saslauthd

mech_list:PLAIN LOGIN

 

访问控制文件

    /etc/postfix/access

    python@admin.com reject

    microsoft.com ok

规则编写格式:

pattern  action

邮件地址的pattern格式如下:

user@domain用于匹配指定邮件地址
domain.tld用于匹配以此域名作为邮件地址中的域名部分的所有邮件地址
user@用于匹配以此作为邮件地址中用户名部分的所有邮件地址

 

主机名称/地址 pattern格式如下:

ip    用于匹配特定的IP地址或网络内的所有主机

network /mask  CIDR格式,匹配指定网络内的所有主机

关于action

ok 接受其pattern匹配的邮件地址或主机名称/地址

拒绝部分:

4NN text

5NN text

    其中4NN类表示过一会重试,5NN类表示严重错误。

REJECT optional text  拒绝;text为可选信息

DEFER  optional text  拒绝;text为可选信息

 

自定义访问表的条件通常使用check_client_access,check_helo_access,check_sender_access,check_recipient_access 进行,他们后面通常跟上type:mapname格式的访问类型和名称。其中,check_sender_access,check_recipient_access 用来检查客户端提供的邮件地址,其访问表中可以使用完整的邮件地址,如admin@tuchao.com;也可以只使用域名,如果tuchao.com,还可以只有用户名的部分,如hadoop@。

 

实例演示(一):

拒绝ip:115.204.89.87  windows 客户端发送邮件

1、编辑 /etc/postfix/access 作为客户端检查控制文件,添加如下一行:

115.204.89.87 REJECT

2、将此文件转换为hash格式

postmap  /etc/postfix/access

wKiom1XW146AjWNGAACrfxHNbIQ692.jpg

3、配置postfix使用此文件对客户端进行检查

编辑配置文件 vim /etc/postfix/main.cf 加入一行:

smtpd_client_restrictions = check_client_access hash:/etc/postfix/access

注:这里的hash类型就代表了.db的文件,所以这里不要写后缀。

 

4、让postfix重新载入配置文件

/etc/init.d/postfix reload

现在使用windows上的客户端发邮件,就会看到被拒绝了;

wKioL1XW2gvBlVDlAAD_peWG3l8581.jpg

 

实例演示(二):

拒绝所在域为 huairen.com 的发件人发送邮件。

1、编辑 /etc/postfix/access 作为客户端检查控制文件,添加如下一行:

huairen.com REJECT

 

2、将此文件转换为hash格式

postmap  /etc/postfix/access

 

3、配置postfix使用此文件对客户端进行检查

编辑配置文件 vim /etc/postfix/main.cf 加入一行:

smtpd_sender_restrictions = check_sender_access hash:/etc/postfix/access

 

4、让postfix重新载入配置文件

/etc/init.d/postfix reload

修改客户端的发件人地址,我这里使用的Outlook。 文件—账户设置—找到自己的邮箱地址—更改;

wKiom1XW2caxnmybAACGobaeYLk257.jpg

然后尝试发一封邮件出去

wKioL1XW2-TCArFGAAEPircNzhQ948.jpg

可以明显看到拒绝信息,Sender address rejected:Access denied

 

实例演示(三):

拒绝所有邮件头部用户名为tuchao的地址发邮件

1、添加一个访问控制文件 /etc/postfix/mailhostdeny 作为客户端检查控制文件,添加如下一行:

tuchao@ REJECT

 

2、将此文件转换为hash格式

postmap  /etc/postfix/mailhostdeny 

 

3、配置postfix使用此文件对客户端进行检查

编辑配置文件 vim /etc/postfix/main.cf 加入一行:

smtpd_recipient_restrictions = check_recipient_access hash:/etc/postfix/mailhostdeny,permit_mynetworks,reject_unauth_destination

注:在smtpd_recipient_restrictions配置中,必须要有两个内置参数permit_mynetworks,reject_unauth_destination,如果需要加入其他参数,这两个内置参数放到最后。

 

4、让postfix重新载入配置文件

/etc/init.d/postfix reload

尝试给tuchao@qupeiyin.net发送邮件

wKiom1XW2k6QnJWzAADmcX2X-94712.jpg

可以看到收件人不符合要求被拒绝了

 

邮件别名的使用

编辑别名配置文件 /etc/aliases 加入如下两行:

a:    python 

tuchao:  1183710107@qq.com

newaliases  执行此命令用于生成别名文件的hash格式,便于查找,每次修改过aliases文件都要执行。

说明:a:表示把所有发给本地a用户的邮件,全部转发给本地的python用户,这里a用户不存在也没关系服务器能识别到别名就可以了。  把所有发给本地tuchao用户的邮件。全部转发至1183710107@qq.com。

 

给a用户发送邮件测试

wKiom1XW2tDg7Q2_AACNZkgBllg945.jpg

给tuchao用户发邮件

wKiom1XW2uSRvLwfAAF7xWxS5S4458.jpg

 

过程中遇到的错误记录

 

错误一、-ERR Plaintext authentication disallowed on non-secure (SSL/TLS) connections.

RHEL5的dovecot都是不需要做任何修改,默认就可以使用的。
RHEL6对dovecot做了比较严格的默认配置,如果使用默认配置,客户端出现错:

-ERR Plaintext authentication disallowed on non-secure (SSL/TLS) connections.

需要修改dovecot主配置文件/etc/dovecot/dovecot.conf:
protocols = imap pop3 lmtp
login_trusted_networks = 0.0.0.0/0

设置/etc/dovecot/conf.d/10-mail.conf配置文件如下:
mail_location = mbox:~/mail:INBOX=/var/mail/%u

 

设置完mail_location值后,需要重启dovecot服务,同时需要创建相关的目录,否则还会出现如下错误:

freebsd# telnet 192.168.50.24 110
Trying 192.168.50.24...
Connected to 192.168.50.24.
Escape character is '^]'.
&#43;OK Dovecot ready. <2781.1.4d106bc3.JFuUEG&#43;bO68ixpY2W1zihg&#61;&#61;&#64;rhel6.766.com>
user oracle
&#43;OK
pass oracle
-ERR [IN-USE] Couldn&#39;t open INBOX: Internal error occurred. Refer to server log for more information. [2010-12-21 16:56:40]
Connection closed by foreign host.

[root&#64;rhel6 ~]# tail -f /var/log/maillog
Dec 21 16:56:40 rhel6 dovecot: pop3-login: Login: user&#61;, method&#61;PLAIN, rip&#61;192.168.50.211, lip&#61;192.168.50.24, mpid&#61;10115, secured
Dec 21 16:56:41 rhel6 dovecot: pop3(oracle): Error: chown(/u01/oracle/mail/.imap/INBOX, -1, 12(mail)) failed: Operation not permitted (egid&#61;501(dba), group based on

/var/mail/oracle)
Dec 21 16:56:41 rhel6 dovecot: pop3(oracle): Error: mkdir(/u01/oracle/mail/.imap/INBOX) failed: Operation not permitted
Dec 21 16:56:41 rhel6 dovecot: pop3(oracle): Error: Couldn&#39;t open INBOX: Internal error occurred. Refer to server log for more information. [2010-12-21 16:56:40]
Dec 21 16:56:41 rhel6 dovecot: pop3(oracle): Couldn&#39;t open INBOX top&#61;0/0, retr&#61;0/0, del&#61;0/0, size&#61;0

 

在该用户家目录下创建相应的目录&#xff1a;

su - tuchao

mkdir -p mail/.imap/INBOX

 

错误二、Temporary lookup failure

通过查看日志发现是没有aliase文件导致的&#xff0c;所以果断的添加的这么个文件&#xff0c;然后postmap一下就可以了。

postmap /etc/aliases

 

二、构建基于虚拟用户的虚拟域邮件系统架构

wKioL1XbIXGhkBo0AAM0oVnsDBk639.jpg

1、编译安装courier-authlib

官网&#xff1a;http://www.courier-mta.org/download.html#authlib

安装依赖的程序包&#xff0c;如果使用MySQL认证的话&#xff0c;需要安装MySQL。

yum install libtool openssl-devel tcl tcl-devel libart-lgpl libart-lgpl-devel expect libtool-ltdl libtool-ltdl-devel -y

编译参数

 ./configure \
--prefix&#61;/usr/local/courier-authlib \
--sysconfdir&#61;/etc \
--without-authpam \
--without-authvchkpw \
--without-authpgsql \
--with-authmysql \
--with-mysql-libs&#61;/alidata/server/mysql/lib/ \
--with-mysql-includes&#61;/alidata/server/mysql/include/ \
--with-redhat \
--with-authmysqlrc&#61;/etc/authmysqlrc \
--with-authdaemonrc&#61;/etc/authdaemonrc \
--with-mailuser&#61;postfix \
--with-mailgroup&#61;postfix \
--with-ltdl-lib&#61;/usr/lib \
--with-ltdl-include&#61;/usr/include/ \

LDFLAGS&#61;"-L/usr/lib64 -L/lib64"

 

--sysconfdir 配置文件的安装目录

--without-authpam 不支持pam认证

--with-redhat 实现基于redhat系统的优化&#xff0c;如果不是redhat系统不用加此参数&#xff1b;

--with-authmysqlrc 存放courier-authlib给mysql的配置文件路径

--with-authdaemonrc 存放该服务的配置文件路径

make && make install 

 

可以使用 --with-authdaemonvar&#61;/var/spool/authdaemon 选项来指定进程套接字目录路径

 

编译过程中遇到的错误&#xff1a;

1、在./configure的时候出现错误 configure: error: invalid ltdl library directory: &#96;/usr/lib64/&#39;

笔者在centos6.5 64位的系统上试了多次&#xff0c;也确保安装了libtool-ltdl libtool-ltdl-devel&#xff0c;依旧不行。

思路&#xff1a;当什么依赖的库和程序都安装了后&#xff0c;还是提示找不到&#xff0c;这时候就要考虑依赖的库与程序的版本不对应。

怀疑是courier-authlib 版本太新和系统库不匹配&#xff0c;于是将courier-authlib0.66.3 降低版本到 0.66.1 &#xff0c; 0.65.0&#xff0c;0.64.0

这时候应该不是软件版本问题&#xff0c;怀疑系统版本的库与该程序不兼容。

尝试将centos6替换为centos5.11 X86_64 &#xff0c;编译courier-authlib0.64.0 没有再出现此错误。

 

2、编译出现错误 configure&#xff1a;error The Courier Unicode Library 1.2 appears not to be installed 

提示Courier Unicode Library 没有安装&#xff0c;需要下载courier-unicode-1.2.tar.bz2 安装即可。

./configure

make && make install

 

3、./configure 出现错误 configure: error: –with-authmysql specified but no mysqlclient.so

是因为本机上有两个MySQL&#xff0c;卸载原来的MySQL就可以了。

 

4、编译出现错误 libltdl.so: could not read symbols: File in wrong format

是由于64位机器的原因&#xff0c;解决办法在configure的选项中加上  LDFLAGS&#61;"-L/usr/lib64 -L/lib64"

参考文档&#xff1a;http://wuliangxx.iteye.com/blog/656856

 

配置courier-authlib

建立配置文件&#xff0c;和configure  参数定义的名称一致

--with-authmysqlrc&#61;/etc/authmysqlrc 

--with-authdaemonrc&#61;/etc/authdaemonrc 
cp /etc/authdaemonrc.dist  /etc/authdaemonrc

cp /etc/authmysqlrc.dist /etc/authmysqlrc

编辑配置文件"/etc/authdaemonrc"  修改以下参数&#xff1a;

authmodulelist&#61;"authmysql"

authmodulelistorig&#61;"auauthmysql"

daemons&#61;10

authdaemonvar&#61;/usr/local/courier-authlib/var/spool/authdaemon

DEBUG_LOGIN&#61;0

参数说明&#xff1a;

authmodulelist  指定支持认证的模块列表

authmodulelistorig  指定源模块列表

daemons 开启的进程数&#xff0c;根据负载合理设置。

authdaemonvar 指定进程套接字目录路径

DEBUG_LOGIN 是否启动DEBUG模式记录日志&#xff0c;0表示不启用&#xff0c;2表示启用。

编辑配置文件 /etc/authmysqlrc 

1
2
3
4
5
6
7
8
9
10
11
12
13
MYSQL_SERVER           localhost
MYSQL_USERNAME         root
MYSQL_PASSWORD         redhat
MYSQL_SOCKET          /tmp/mysql.sock  连接MySQL的套接字文件
MYSQL_DATABASE         extmail  指定数据库名
MYSQL_USER_TABLE       mailbox  指定用户表
MYSQL_CRYPT_PWFIELD    password  指定保存密码的表字段名
MYSQL_UID_FIELD        2525  指定postfix的Uid
MYSQL_GID_FIELD        2525  指定postfix的Gid
MYSQL_LOGIN_FIELD      username  指定保存用户名的表字段名
MYSQL_HOME_FIELD       concat(&#39;/var/mailbox&#39;,homedir)  指定用户的邮筒位置
MYSQL_NAME_FIELD       name  指定用户的全名保存在哪个字段上
MYSQL_MAILDIR_FIELD    concat(&#39;/var/mailbox/&#39;,maildir)  创建和用户同名的邮件目录

 

提供服务启动脚本

cp courier-authlib-0.64.0/courier-authlib.sysvinit /etc/init.d/courier-authlib

chmod &#43;x /etc/init.d/courier-authlib

chkconfig --add courier-authlib

chkconfig courier-authlib on

启动服务

service courier-authlib start

 

2、配置postfix支持虚拟域和虚拟用户

1、编辑配置文件 /etc/postfix/main.cf 添加以下内容&#xff1a;

1
2
3
4
5
6
7
8
9
virtual_mailbox_base &#61; /var/mailbox
virtual_mailbox_maps &#61; mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_mailbox_domains &#61; mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_alias_domains &#61; 
virtual_uid_maps &#61; static:2525
virtual_gid_maps &#61; static:2525
virtual_transport &#61; virtual
mydestination &#61;
local_recipient_maps &#61;

virtual_transport  指定用户的投递代理

maiildrop_destination_recipient_limit  &#61; 1  定义限制&#xff0c;一次只投递一封邮件到一个用户邮箱。

maildrop_destination_concurrency_limit  &#61;1 一次并发只投递一封邮件

配额限制

message_size_limit &#61; 14336000

virtual_mailbox_limit &#61; 20971520

message_size_limit  定义单个邮件的最大大小

virtual_mailbox_limit  每个用户的邮箱最大可用空间

 

配置postfix和courier-authlib

新建虚拟用户邮箱所在的目录&#xff0c;并将权限赋予postfix用户。

mkdir  /var/mailbox

chown -R postfix /var/mailbox

 

修改配置文件 /usr/lib/sasl2/smtpd.conf  没有则建立&#xff0c;加入以下内容&#xff1a;

pwcheck_method:authdaemond

log_level:3

mech_list:PLAIN LOGIN

authdaemond_path:/usr/local/courier-authlib/var/spool/authdaemon/socket

authdaemond_path 此参数指定的路径&#xff0c;是和/etc/authdaemonrc文件中authdaemonvar参数定义的路径相对应。

下载extman源码&#xff0c;使用其doc目录下的extmail.sql和init.sql建立数据库&#xff1a;

tar xf extman-1.1.tar.gz

cd extman-1.1/docs

mysql

mysql

 

复制需要的配置文件

cp mysql* /etc/postfix/

并且将复制过去的5个配置文件&#xff0c;根据实际mysql的帐号配置做相应的修改。

对于MySQL5.1以后的版本&#xff0c;需要将脚本extmail.sql使用如下命令进行语法修改&#xff1a;

sed -i &#39;s/TYPE&#61;MyISAM/ENGINE&#61;InnoDB/g&#39; extmail.sql 

如果还出现错误 BLOB/TEXT column &#39;question&#39; can&#39;t have a default value 则进入脚本修改SQL语句&#xff0c;将text字段的default参数删除即可。

 

授权用户extmail访问extmail数据库的权限

GRANT ALL PRIVILEGES ON extmail.* TO &#39;extmail&#39;&#64;&#39;localhost&#39; IDENTIFIED BY &#39;extmail123&#39;;

GRANT ALL PRIVILEGES ON extmail.* TO &#39;extmail&#39;&#64;&#39;127.0.0.1&#39; IDENTIFIED BY &#39;extmail123&#39;;

启用虚拟域以后&#xff0c;需要取消中心域&#xff0c;即注释掉配置文件“/etc/postfix/main.cf”的几个参数&#xff1a;myhostname&#xff0c;myorigin&#xff0c;mydomain&#xff0c;mydestination&#xff1b; 也可以把mydestination 改成自己需要的&#xff1b;

重启postfix

service postfix restart

这是会发现无法给之前配置的域收发邮件了&#xff0c;因为之前的参数我们已经注释了。 这时域的配置保存在exmail库中的domain表中。

 

配置dovecot

 

vim /etc/dovecot.conf

1
2
3
4
5
6
7
8
9
auth default {
    mechanisms &#61; plain
    passdb sql {
        args &#61; /etc/dovecot-mysql.conf
&#xff5d;
userdb sql {
    args &#61; /etc/dovecot-mysql.conf
&#xff5d;
&#xff5d;

wKiom1XbOmGTjxU_AAClMWIrQY0163.jpg

 

参数说明&#xff1a;

mail_location &#61; maildir:/var/mailbox/%d/%n/Maildir

这两个为dovecot支持的两个弘&#xff1a;

%d  表示域名

%n  表示用户名

建立配置文件&#xff1a;vim /etc/dovecot-mysql.conf 

1
2
3
4
5
6
mail_location &#61; maildir:/var/mailbox/%d/%n/Maildir
driver &#61; mysql
connect &#61; host&#61;localhost dbname&#61;extmail user&#61;extmail password&#61;extmail123
default_pass_scheme &#61; CRYPT
password_query &#61; SELECT username AS user,password AS password FROM mailbox WHERE username &#61; &#39;%u&#39;
user_query &#61; SELECT maildir,uidnumber AS uid,gidnumber AS gid FROM mailbox WHERE username &#61; &#39;%u&#39;

注&#xff1a;如果mysql服务器是本地主机&#xff0c;如果mysql.sock文件路径不是默认的/var/lib/mysql/mysql.sock&#xff0c;可以使用host&#61;"socket" 来指定新位置&#xff1a;

connect &#61; host&#61;/tmp/mysql.sock dbname&#61;extmail user&#61;extmail password&#61;extmail123 

重启dovecot服务

service dovecot restart

 

安装Extmail-1.2

tar zxvf extmail-1.2.tar.gz 

cd extmail-1.2

mkdir -pv /var/www/extsuite

mv extmail-1.2 /var/www/extsuite/extmail

cp /var/www/extsuite/extmail/webmail.cf.default  /var/www/extsuite/extmail/webmail.cf

 

修改主配置文件 /var/www/extsuit/extmail/webmail.cf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
SYS_CONFIG &#61; /var/www/extsuite/extmail/
SYS_LANGDIR &#61; /var/www/extsuite/extmail/lang
SYS_TEMPLDIR &#61; /var/www/extsuite/extmail/html
SYS_HTTP_CACHE &#61; 0
SYS_SMTP_HOST &#61; 127.0.0.1
SYS_SMTP_PORT &#61; 25
SYS_SMTP_TIMEOUT &#61; 5
SYS_SPAM_REPORT_ON &#61; 0
SYS_USER_LANG &#61; zh_CN
SYS_MAILDIR_BASE &#61; /var/mailbox
SYS_MYSQL_USER &#61; extmail
SYS_MYSQL_PASS &#61; extmail123
SYS_MYSQL_DB &#61; extmail
SYS_MYSQL_HOST &#61; localhost
SYS_MYSQL_SOCKET &#61; /tmp/mysql.sock
SYS_MYSQL_TABLE &#61; mailbox
SYS_MYSQL_ATTR_USERNAME &#61; username
SYS_MYSQL_ATTR_DOMAIN &#61; domain
SYS_MYSQL_ATTR_PASSWD &#61; password
SYS_AUTHLIB_SOCKET &#61; /usr/local/courier-authlib/var/spool/authdaemon/socket

SYS_CONFIG 指定程序目录

SYS_LANGDIR 指定语言字符集的目录

SYS_TEMPLDIR 指定临时文件的目录

SYS_HTTP_CACHE http是否要缓存

SYS_SMTP_HOST 指定smtp服务器

SYS_SMTP_PORT smtp服务端口号

SYS_SMTP_TIMEOUT 指定超时时间

SYS_SPAM_REPORT_ON 发现垃圾邮件是否报告

SYS_USER_LANG 指定语言支持

SYS_MAILDIR_BASE 指定用户的邮筒文件夹

SYS_MYSQL_TABLE 指定在mysql中对应的表

SYS_MYSQL_ATTR_USERNAME 用户名对应的字段属性

SYS_MYSQL_ATTR_DOMAIN 域对应的字段属性

SYS_MYSQL_ATTR_PASSWD 用户密码对应的字段属性

SYS_AUTHLIB_SOCKET 指定courier-authlib socket文件位置

 

配置httpd

由于extmail要进行本地邮件的投递操作&#xff0c;故必须将运行httpd服务器用户的身份修改为你的邮件投递代理的用户&#xff0c;如果打开apache的suexec功能&#xff0c;可以实现虚拟主机运行身份的指定。 此例中的MDA为postfix自带&#xff0c;所以指定为postfix用户。

1
2
3
4
5
6
7
    ServerName mail.qupeiyin.net
    DocumentRoot /var/www/extsuite/extmail/html/
    ScriptAlias /extmail/cgi /var/www/extsuite/extmail/cgi
    Alias /extmail /var/www/extsuite/extmail/html/
    CustomLog logs/mail.qupeiyin.net.log common
</VirtualHost>

如果不打开apache的suexec功能&#xff0c;也可以让整个apache用postfix用户跑

User postfix

Group postfix

 

修改cgi执行文件属主为apache服务运行的身份用户

chown -R postfix.postfix /var/www/extsuite/extmail/cgi/

 

安装Unix-Syslog解决依赖关系

可以去http://search.cpan.org/搜索下载源码包

tar xf Unix-Syslog-1.1.tar.gz

cd Unix-Syslog-1.1

perl Makefile.PL

make && make install

 

配置extman

tar xf extman-1.1.tar.gz

mv extman-1.1 /var/www/extsuite/extman

cp /var/www/extsuite/extman/webman.cf.default /var/www/extsuite/extman/webman.cf

 

编辑配置文件 /var/www/extsuite/extman/webman.cf

SYS_MAILDIR_BASE &#61; /var/mailbox

SYS_SESS_DIR &#61; /tmp/extman/

SYS_CAPTCHA_ON &#61; 0

SYS_DEFAULT_UID &#61; 2525

SYS_DEFAULT_GID &#61; 2525

SYS_MYSQL_USER &#61; root

SYS_MYSQL_PASS &#61; redhat

SYS_MYSQL_DB &#61; extmail

SYS_MYSQL_HOST &#61; localhost

SYS_MYSQL_SOCKET &#61; /var/lib/mysql/mysql.sock

 

创建用于保存session的目录

mkdir /tmp/extman

chown postfix /tmp/extman/

修改cgi目录属主

chown -R postfix.postfix /var/www/extsuite/extman/cgi/

在httpd主配置文件中Extmail的虚拟主机部分&#xff0c;添加如下两行&#xff1a;

    ScriptAlias /extman/cgi /var/www/extsuite/extman/cgi
    Alias /extman /var/www/extsuite/extman/html

重启httpd服务器

service httpd restart

 

功能测试&#xff1a;

现在来访问我们的extmail

wKiom1XbRxeD3VejAAKegFrRfbM739.jpg

选择登陆邮箱管理&#xff0c;空密码帐号&#xff0c;直接点登陆跳到下一个界面&#xff1a;

wKioL1XbSYeyJ_weAAFTbQSkGns486.jpg

初始密码为&#xff1a;extmail*123*

登陆之后可进入邮箱控制台

wKioL1XbShvyB-PFAAEPcP-h5Jc895.jpg

现在登陆一个用户来发送邮件

wKiom1XbSFfz-eNcAAGopL30lEo404.jpg

 

点击发送后&#xff0c;QQ邮箱立马就收到了。

wKiom1XbSNziCIxFAACUB0xk0AI661.jpg

 

一套邮件系统就基本实现了&#xff0c;这里还没加上反垃圾邮件功能和SSL加密功能。

这些功能可参考&#xff1a;

extmail官网&#xff1a;http://www.extmail.org/

本文出自 “突破舒适区” 博客&#xff0c;请务必保留此出处http://tchuairen.blog.51cto.com/3848118/1686875


转:https://www.cnblogs.com/sky-heaven/p/7127658.html



推荐阅读
  • 在腾讯云服务器上部署Nginx的详细指南中,首先需要确保安装必要的依赖包。如果这些依赖包已安装,可直接跳过此步骤。具体命令包括 `yum -y install gcc gcc-c++ wget net-tools pcre-devel zlib-devel`。接下来,本文将详细介绍如何下载、编译和配置Nginx,以确保其在腾讯云服务器上顺利运行。此外,还将提供一些优化建议,帮助用户提升Nginx的性能和安全性。 ... [详细]
  • Java Socket 关键参数详解与优化建议
    Java Socket 的 API 虽然被广泛使用,但其关键参数的用途却鲜为人知。本文详细解析了 Java Socket 中的重要参数,如 backlog 参数,它用于控制服务器等待连接请求的队列长度。此外,还探讨了其他参数如 SO_TIMEOUT、SO_REUSEADDR 等的配置方法及其对性能的影响,并提供了优化建议,帮助开发者提升网络通信的稳定性和效率。 ... [详细]
  • Linux下MySQL 8.0.28安装指南
    本文详细介绍了在Linux系统上安装MySQL 8.0.28的步骤,包括下载数据库、解压数据包、安装必要组件和启动MySQL服务。 ... [详细]
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • php更新数据库字段的函数是,php更新数据库字段的函数是 ... [详细]
  • 基于Web的Kafka管理工具Kafkamanager首次访问Web界面的详细配置指南(附图解)
    首次访问Kafkamanager Web界面时,需要对Kafka集群进行配置。这一过程相对简单,用户只需依次点击【Cluster】>【Add Cluster】,按照提示完成相关设置即可。本文将通过图文并茂的方式,详细介绍每一步的配置步骤,帮助用户快速上手Kafkamanager。 ... [详细]
  • 本文介绍了如何使用Python的Paramiko库批量更新多台服务器的登录密码。通过示例代码展示了具体实现方法,确保了操作的高效性和安全性。Paramiko库提供了强大的SSH2协议支持,使得远程服务器管理变得更加便捷。此外,文章还详细说明了代码的各个部分,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 本文详细解析了客户端与服务器之间的交互过程,重点介绍了Socket通信机制。IP地址由32位的4个8位二进制数组成,分为网络地址和主机地址两部分。通过使用 `ipconfig /all` 命令,用户可以查看详细的IP配置信息。此外,文章还介绍了如何使用 `ping` 命令测试网络连通性,例如 `ping 127.0.0.1` 可以检测本机网络是否正常。这些技术细节对于理解网络通信的基本原理具有重要意义。 ... [详细]
  • 快速掌握Tomcat 8.5.40的配置与应用技巧 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • SecureCRT是一款功能强大的终端仿真软件,支持SSH1和SSH2协议,适用于在Windows环境下高效连接和管理Linux服务器。该工具不仅提供了稳定的连接性能,还具备丰富的配置选项,能够满足不同用户的需求。通过SecureCRT,用户可以轻松实现对远程Linux系统的安全访问和操作。 ... [详细]
  • 本指南详细介绍了如何在CentOS 6.6 64位系统上以root用户身份部署Tomcat 8服务器。系统环境为CentOS 6.6 64位,采用源码安装方式。所需软件为apache-tomcat-8.0.23.tar.gz,建议将软件下载至/root/opt目录。具体下载地址请参见官方资源。本指南涵盖了从环境准备到服务启动的完整步骤,适用于需要在该系统环境下搭建高性能Web应用服务器的技术人员。 ... [详细]
  • Amoeba 通过优化 MySQL 的读写分离功能显著提升了数据库性能。作为一款基于 MySQL 协议的代理工具,Amoeba 能够高效地处理应用程序的请求,并根据预设的规则将 SQL 请求智能地分配到不同的数据库实例,从而实现负载均衡和高可用性。该方案不仅提高了系统的并发处理能力,还有效减少了主数据库的负担,确保了数据的一致性和可靠性。 ... [详细]
  • 在开发过程中,我最初也依赖于功能全面但操作繁琐的集成开发环境(IDE),如Borland Delphi 和 Microsoft Visual Studio。然而,随着对高效开发的追求,我逐渐转向了更加轻量级和灵活的工具组合。通过 CLIfe,我构建了一个高度定制化的开发环境,不仅提高了代码编写效率,还简化了项目管理流程。这一配置结合了多种强大的命令行工具和插件,使我在日常开发中能够更加得心应手。 ... [详细]
  • 本文探讨了资源访问的学习路径与方法,旨在帮助学习者更高效地获取和利用各类资源。通过分析不同资源的特点和应用场景,提出了多种实用的学习策略和技术手段,为学习者提供了系统的指导和建议。 ... [详细]
author-avatar
ycy1873187
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有