教育培训网站,适合30岁女人的培训班,seo关键词排名技术,烟台广告公司网站建设因为公司规模要扩大#xff0c;然后经理要求公司应该有自己的邮件系统。然后主动请命说我来搭建#xff0c;因为以前没有搭建过#xff0c;或者学过原理搭建起来很费劲#xff0c;看着人家的文档做#xff0c;也是不知道什么意思#xff0c;还还常出错。在纠结两天之后然后经理要求公司应该有自己的邮件系统。然后主动请命说我来搭建因为以前没有搭建过或者学过原理搭建起来很费劲看着人家的文档做也是不知道什么意思还还常出错。在纠结两天之后开始静下心来学习一下邮件服务器的工作原理 1、mail服务器是遵循c/s架构的模型。我们先来了解一下mail这个的工作过程(MTA要开启中继) (1)本地客户端(MUA)编写邮件地址。然后发送到哪个域名 (2)发送到邮件服务器(MTA).邮件服务器判断是否是本地的主机。是的话就投递本地(MDA). (3)要是是不是本地的主机。那么就通过SMTP协议发送到远端。(SMTP带有路由功能) (4)对方的SMTP接收邮件并放到一个固定的目录下面。 (5)客户端通过pop3协议把邮件从固定目录放到自己的目录下、进行读取。 2、好了上面就是一个简单的工作过程下面我们看一下每一个过程分别需要什么软件来实现。 MUA:outlook.foxmail.mutt(选择poxmail--我们的QQ邮箱) MTA:qmail、postfix、exim、exchange(选择postfix) 选项用户登录的人在方式SASL:v2 cyrus-sasl courier-authlib MDA:procmail、maildrop 企业基于网页认证: openwebmail、Extmail(Extman) 当然我们保存用户信息。这里选择的是Mysql。 3、下面就可以开始搭建这个环节了 1首先搭建好LAMP环境这里我选择的是源码编译安装(这一步大家都了解忽略) mysql /usr/local/mysql apache/usr/local/apache php/usr/local/php 2搭建bind。做域名解析因为邮件要用到MX记录所以要搭建一个DNS服务器要有MX、A记录和PTR记录。当然在现实环境中要是你能有环境解析可以不用搭建这里我是为了测试先搭建环境然后再放到公网上面应用。 直接用yum安装的方式。具体的步骤大家可以自己安装这里我给出自己的两个库的配置文件 第二个反省解析文件 然后自己做解析设置看看能不能解析到这个地址。注意/etc/resolv.conf的nameserver要指向自己。 3编译安装postfix。这里我选择的是postfix-2.2.10.tar.gz这个版本 1、操作的用户和组 1 2 3 4 groupadd -g 2525 postfix useradd -g postfix -u 2525 -s /sbin/nologin -M postfix groupadd -g 2526 postdrop useradd -g postdrop -u 2526 -s /sbin/nologin -M postdrop 2、编译安装postfix: 1 [rootlocalhost postfix-2.2.10] # make makefiles CCARGS-DHAS_MYSQL -I/usr/local/mysql/include -DUSE_SASL_AUTH - DUSE_CYRUS_SASL - I/usr/include/sasl -DUSE_TLS AUXLIBS-L/usr/local/mysql/lib -lmysqlclient -lz -lm -L/usr/lib/sasl2 -lsasl2 -lssl -lcrypto [rootlocalhost postfix-2.2.10]# make [rootlocalhost postfix-2.2.10]# make install 会出现上面这种信息一直选默认就好。然后记得按照自己的mysql的安装的头文件的库文件的路径来有时候会提示找不到头文件或者库文件自己做个链接过去就好。 2、启动:postfix start即可。 3、在shell界面下使用newaliases 将 /etc/aliases 转换成一个 sendmail 所能了解的数据库.不然后面测试时用不了的。 4、测试:新建两个用户user1和user2分别给他们密码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 [rootmail src] # telnet localhost 25 Trying ::1... telnet: connect to address ::1: Connection refused Trying 127.0.0.1... Connected to localhost. Escape character is ^] . helo localhost 250 mail.shihuasuan.com mail from:xiaoluoshikee.com 250 Ok rcpt to:user2shikee.com 250 Ok data 354 End data with CRLF.CRLF 1 2 3 4 250 Ok: queued as AE2FE262964 quit 221 Bye Connection closed by foreign host. 不报错的话一般都是表示成功了我们看一下日志tail /var/local/maillog 1 2 3 4 5 Nov 24 17:39:16 mail postfix /smtpd [10425]: AE2FE262964: clientlocalhost[127.0.0.1] Nov 24 17:39:23 mail postfix /cleanup [10430]: AE2FE262964: message- id 20141124093916.AE2FE262964mail.shihuasuan.com Nov 24 17:39:23 mail postfix /qmgr [10175]: AE2FE262964: fromxiaoluoshikee.com, size337, nrcpt1 (queue active) Nov 24 17:39:25 mail postfix /smtpd [10425]: disconnect from localhost[127.0.0.1] Nov 24 17:39:27 mail postfix /smtp [10432]: AE2FE262964: touser2shikee.com 可以看到是不成功的因为我是用我的线上环境些出来的。我关闭了中继的功能只有通过认证才实现这里我从别人那里截了一个图过来 这里没有编辑配置文件照样是能够测试成功的。当时当我们用别的计算机telnet到这个地方来的时候是不能发送邮件的因为postfix默认是给localhost做中继的要是局域网内的计算机都能使用。这里还要做如下配置: 5、 1 2 3 4 5 6 7 [rootlocalhos~] # vim /etc/postfix/main.cf myhostname mail.shikee.com myorigin shikee.com mydomain shikee.com mydestination $myhostname, localhost.$mydomain, localhost, $mydomain mynetworks 192.168.10.0 /24 , 127.0.0.0 /8 inet_interfaces all 6、现在可以局域网的机器.tenlnet访问看看是否已经可以了。 7、 为postfix开启基于cyrus-sasl的认证功能注:有的可能没有-a这个选项不过没有关系你自己编译的时候有加这个就好了。 1 2 3 [rootmail ~] # postconf -a cyrus dovecot 8、验正postfix是否支持cyrus风格的sasl认证如果您的输出为以上结果则是支持的其实很简单在main.cf中添加如下内容。 1 2 3 4 5 6 7 8 9 10 11 vi /etc/postfix/mail .rc broken_sasl_auth_clients yes smtpd_recipient_restrictionspermit_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_application_name smtpd smtpd_banner Welcome to our $myhostname ESMTP,Warning: Version not Available! [rootmail /] # vi /usr/lib64/sasl2/smtpd.conf pwcheck_method: saslauthd mech_list: PLAIN LOGIN 9、测试用户认证。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 [rootmail ~] # telnet localhost 25 Trying 192.168.10.205... Connected to mail.shihuasuan.com (192.168.10.205). Escape character is ^] . 220 Welcome to our mail.shihuasuan.com ESMTP,Warning: Version not Available! AUTH LOGIN #注意一定要加这个不然验证不通过。我在这里纠结了好久 334 VXNlcm5hbWU6 aGFkb29w #使用base64编码 echo -n hadoop | openssl base64 (这里是用户。下一个是密码) 334 UGFzc3dvcmQ6 aGFkb29w 235 2.7.0 Authentication successful mail from:hadoopshihuasuan.com 250 2.1.0 Ok rcpt to:xiaoluoshiahusuan.com 250 2.1.5 Ok data 354 End data with CRLF.CRLF hello 1 2 3 4 250 2.0.0 Ok: queued as 7B98E13DADA #基于验证并能发信成功 quit 221 2.0.0 Bye Connection closed by foreign host. 到了这一部初步的postfix基于。sasl认证我们已经做完了下面就开始搭建courier-authlib基于mysql的用户登录认证 10、安装courier-authlib:安装之前要确保libtool-ltdl, libtool-ltdl-devel,已安装上。 1 2 [rootmail courier-authlib-0.62.4] # ./configure --prefix/usr/local/courier-authlib --sysconfdir/etc --without-authpam --without-authshadow --without-authvchkpw --without-authpgsql --with-authmysql --with-mysql-libs/usr/local/mysql/lib --with-mysql-includes/usr/local/mysql/include --with-redhat --with-authmysqlrc/etc/authmysqlrc --with-authdaemonrc/etc/authdaemonrc --with-mailuserpostfix --with-mailgrouppostfix [rootmail courier-authlib-0.62.4] # make make install 这里一定注意的是要记得加--with-mailuser和--with-mailgroup。不然到后面安装maildrop接收邮件的时候会报这个类似权限不够的错误。 如temporary failure. Command output: ERR: authdaemon: s_connect() failed: Permission denied /usr/local/bin/maildrop: Temporary authentication failure. mysql的头文件和库文件的路径根据自己的需求改。我这里是源码安装。yum安装的话自己改路径。 10.1、修改文件支持mysql认证 1 2 3 4 [rootmail ~] # chmod 755 /usr/local/courier-authlib/var/spool/authdaemon/ #(soket路径) [rootmail ~] # cp /etc/authdaemonrc.dist /etc/authdaemonrc [rootmail ~] # cp /etc/authmysqlrc.dist /etc/authmysqlrc [rootmail ~] # vim /etc/authdaemonrc 1 2 authmodulelist authmysql #认证机制为mysql authmodulelistorig authmysql 10.2基于mysql来认证用户的账号和密码 请参照下边内容进行修改 1 span style font-family:arial, helvetica, sans-serif;font-size:16px; [rootmail ~] # vim /etc/authmysqlrc brMYSQL_SERVER localhost brMYSQL_PORT 3306 brMYSQL_USERNAME extmail brMYSQL_PASSWORD extmail brMYSQL_SOCKET /tmp/mysql.sock brMYSQL_DATABASE extmail brMYSQL_USER_TABLE mailbox brMYSQL_CRYPT_PWFIELD password brMYSQL_UID_FIELD 2525 br#GID 一定要与前边的组ID相一致 MYSQL_GID_FIELD 2525 brMYSQL_LOGIN_FIELD username brMYSQL_HOME_FIELD concat(/var/mailbox/,homedir) brMYSQL_NAME_FIELD namebrMYSQL_MAILDIR_FIELD concat(/var/mailbox/,maildir)# 邮件存放路径自己按需求修改。br/span 根据上面的模板修改就可以了注意不要把库弄错了因为后面我新建的库是extmail大家可以自己指定。 为了方便复制脚本到./etc/init.d/目录下。 1 2 3 4 5 6 7 [rootmail ~] # cd courier-authlib-0.64.0 [rootmail courier-authlib-0.62.4] # cp courier-authlib.sysvinit /etc/rc.d/init.d/courier-authlib [rootmail courier-authlib-0.62.4] # chmod x /etc/rc.d/init.d/courier-authlib [rootmail courier-authlib-0.62.4] # chkconfig --add courier-authlib [rootmail courier-authlib-0.62.4] # chkconfig courier-authlib on [rootmail courier-authlib-0.62.4] # service courier-authlib start 不报错的话启动成功。 10.3、建立存放文件目录也配置认证(smtpd文件不一定存在要自己创建) 1 2 3 4 5 6 7 [rootmail ~] # mkdir -pv /var/mailbox [rootmail ~] # chown -R postfix /var/mailbox [rootmail ~] # vim /usr/lib64/sasl2/smtpd.conf pwcheck_method: authdaemond log_level: 3 #日志级别先调试为3方便查看调试信息成功后设为1 mech_list:PLAIN LOGIN authdaemond_path: /usr/local/courier-authlib/var/spool/authdaemon/socket 10.4、编辑postfix文件让用户支持虚拟用户(直接复制即可) 1、编辑/etc/postfix/main.cf添加如下内容 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ##Virtual Mailbox Settings### virtual_mailbox_base /var/mailbox virtual_mailbox_maps mysql: /etc/postfix/mysql_virtual_mailbox_maps .cf virtual_mailbox_domains mysql: /etc/postfix/mysql_virtual_domains_maps .cf virtual_alias_domains virtual_alias_maps mysql: /etc/postfix/mysql_virtual_alias_maps .cf virtual_uid_maps static:2525 virtual_gid_maps static:2525 virtual_transport virtual maildrop_destination_recipient_limit 1 maildrop_destination_concurrency_limit 1 ###QUOTA Settings### message_size_limit 14336000 virtual_mailbox_limit 20971520 virtual_create_maildirsize yes virtual_mailbox_extended yes virtual_mailbox_limit_maps mysql: /etc/postfix/mysql_virtual_mailbox_limit_maps .cf virtual_mailbox_limit_override yes virtual_maildir_limit_message Sorry, the users maildir has overdrawn his diskspace quota , please Tidy your mailbox and try again later. virtual_overquota_bounce yes 这里会看到mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf 、mysql:/etc/postfix/mysql_virtual_domains_maps.cf 、 mysql:/etc/postfix/mysql_virtual_alias_maps.cf 现在目录下面是没有这个文件的。可以从以后网页下面的extman-1.1/docs/文件下复制过来这一部要注意不然不能收发邮件。 10、5导入数据库 1 2 3 [rootmail ~] # tar xf extman-1.1.tar.gz [rootmail ~] # cd extman-1.1/docs [rootmail docs] # mysql -u root -p extmail.sql #导入的时候会遇到报错是因为在数据库好像5.几之后存储引擎用的是ENGINE了所以把extmail.sql里面所以的TYPE都换成ENGINE。然后把刚才建立的数据删除再执行就好了 1 2 [rootmail docs] # mysql -u root -p init.sql [rootmail docs] # mysql 然后use extmail这个库show tables.发现里面有几张表了 1 2 3 4 5 6 7 8 9 mysql show tables; ------------------- | Tables_in_extmail | ------------------- | alias | | domain | | domain_manager | | mailbox | | manager 授权访问的用户和密码这个和前面配置的/etc/authmysqlrc的用户名密码是一一对应的。 1 2 mysql GRANT all privileges on extmail.* TO extmaillocalhost IDENTIFIED BY extmail ; mysqlflush privileges; 成功。启动postfix. postfix start #(注意查看是否启动成功或者报错信息) 此时就可以给予虚拟域发送邮件了为了验证成功性我们把里面的中继关闭。main.cf注释掉myhostname, mydestination, mydomain, myorigin几个以前的配置然后重新发送邮件。 11、安装dovecot: 11.1、 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 [rootmail courier-authlib-0.62.4] # yum install dovecot -y mail_location maildir: /var/mailbox/ %d/%n /Maildir # 宏 %d 代表域名 %n 代表用户名 auth default { mechanisms plain passdb sql { args /etc/dovecot/dovecot-mysql .conf } userdb sql { args /etc/dovecot/dovecot-mysql .conf } vim /etc/dovecot/dovecot-mysql .conf driver mysql # 数据库驱动为mysql connect hostlocalhost dbnameextmail userextmail passwordextmail default_pass_scheme CRYPT password_query SELECT username AS user,password AS password FROM mailbox WHERE username %u user_query SELECT maildir, uidnumber AS uid, gidnumber AS gid FROM mailbox WHERE username %u 两个配置文件直接copy负责下来放到对应路径下 接下来启动dovecot服务 1 2 # service dovecot start # chkconfig dovecot on #如果不成功我们可以启动日志通过日志来排除错误原因以后的工作中也要建立这样的思想哦。 #启用日志很简单只要启用log_path 即可 12、安装extmail: 12。1、解压并文件并放到自己网站对于得根目录下。 1 2 3 4 # tar zxvf extmail-1.2.tar.gz # mkdir -pv /usr/local/apache/htdocs/extsuite # mv extmail-1.2 /usr/local/apache/htdocs/extsuite/extmail # cp /usr/local/apache/htdocs/extsuite/extmail/webmail.cf.default /usr/local/apache/htdocs/extsuite/extmail/webmail.cf 12.2、修改配置文件 1 2 3 4 5 6 7 8 9 10 11 12 [rootmail extmail-1.2] # vi /usr/local/apache/htdocs/extsuite/extmail/webmail.cf 部分修改选项的说明 SYS_MESSAGE_SIZE_LIMIT 5242880 用户可以发送的最大邮件 SYS_USER_LANG en_US 语言选项可改作 SYS_USER_LANG zh_CN SYS_MAILDIR_BASE /home/domains 此处即为您在前文所设置的用户邮件的存放目录可改作 SYS_MAILDIR_BASE /var/mailbox SYS_MYSQL_USER db_user SYS_MYSQL_PASS db_pass 1 2 3 4 5 6 7 8 9 10 11 12 以上两句句用来设置连接数据库服务器所使用用户名、密码和邮件服务器用到的数据库这里修改为 SYS_MYSQL_USER extmail SYS_MYSQL_PASS extmail SYS_MYSQL_SOCKET /var/lib/mysql/mysql .sock 修改为 SYS_MYSQL_SOCKET /tmp/mysql .sock SYS_MYSQL_HOST localhost 指明数据库服务器主机名这里默认即可 SYS_MYSQL_TABLE mailbox SYS_MYSQL_ATTR_USERNAME username SYS_MYSQL_ATTR_DOMAIN domain SYS_MYSQL_ATTR_PASSWD password 以上用来指定验正用户登录里所用到的表以及用户名、域名和用户密码分别对应的表中列的名称这里默认即可 SYS_AUTHLIB_SOCKET /var/spool/authdaemon/socket 此句用来指明authdaemo socket文件的位置这里修改为 SYS_AUTHLIB_SOCKET /usr/local/courier-authlib/var/spool/authdaemon/socket 12.2、编译httpd.conf配置文件支持。虚拟主机 1 2 3 4 5 6 7 8 [rootmail conf] # vim /etc/httpd/conf/httpd.conf VirtualHost *:80 ServerName mail.zzu.com DocumentRoot /var/www/extsuite/extmail/html/ ScriptAlias /extmail/cgi /var/www/extsuite/extmail/cgi Alias /extmail /var/www/extsuite/extmail/html SuexecUserGroup postfix postfix /VirtualHost #修改 cgi执行文件属主为apache运行身份用户 [rootmail conf]# chown -R postfix.postfix /var/www/extsuite/extmail/cgi/ 如果您没有打开apache服务器的suexec功能,也可以使用以下方法解决 1 2 3 4 5 6 7 8 9 10 # vi /etc/httpd/httpd.conf User postfix Group postfix VirtualHost *:80 ServerName mail.zzu.com DocumentRoot /var/www/extsuite/extmail/html/ ScriptAlias /extmail/cgi /var/www/extsuite/extmail/cgi Alias /extmail /va /VirtualHost 12.3、编译安装 Unix-Syslog-1.1.tar.gz .(extmail和extmand的perl以来包) 1 2 3 [rootmail extmail-1.2] # cd /usr/local/src/Unix-Syslog-1.1 [rootmail Unix-Syslog-1.1] # perl Makefile.PL [rootmail Unix-Syslog-1.1] # make make install 重启httpd服务。 12.4、安装extman 1、解压并放到网址跟目录下。 mv extman-1.1 /usr/local/apache/htdocs/extsuite/extman 2、修改配置文件 1 2 3 # cp webman.cf.default webman.cf # vim /var/www/extsuite/extman/webman.cf SYS_MAILDIR_BASE /home/domains 此处即为您在前文所设置的用户邮件的存放目录可改作 1 2 3 SYS_MAILDIR_BASE /var/mailbox SYS_DEFAULT_UID 1000 SYS_DEFAULT_GID 1000 此两处后面设定的ID号需更改为前而创建的postfix用户和postfix组的id号本文使用的是2525因此上述两项需要修改为 1 2 3 4 5 6 7 SYS_DEFAULT_UID 2525 SYS_DEFAULT_GID 2525 SYS_MYSQL_USER webman SYS_MYSQL_PASS webman 修改为 SYS_MYSQL_USER extmail SYS_MYSQL_PASS extmail 修改cgi目录的属组为postfix并脚本别名添加至虚拟主机以便能正常访问extman [rootmail src]# chown -R postfix.postfix /usr/local/apache/htdocs/extsuite/extman/cgi/ 在httpd.conf的配置文件的虚拟目录下面添加如下两行 1 2 3 4 5 ScriptAlias /extman/cgi /usr/local/apache/htdocs/extsuite/extman/cgi Alias /extman /usr/local/apache/htdocs/extsuite/extman/html 然后在给extman的临时文件创建权限 [rootmail src] # mkdir -pv /tmp/extman/ [rootmail src] # chown postfix.postfix /tmp/extman/ 重启apache之后就可以访问了。(这里可能会提示确实什么包之类的各种各样问题可以百度一下把包安装上就可以访问了。) 可以使用默认的用户名和密码进入extman后台管理页面 可以对虚拟域和用户账号的管理默认管理帐号为rootextmail.org 密码为extmail*123* 然后自己可以创建自己的域然后新建账户这里就不演示。 过两天更新杀毒和邮件过滤的功能.这段时间为了搭建邮件服务器耗费了我不少精力因为还要去学原理。在马哥视频的学习终于搭建成功了这里的话要感谢马哥的视频帮我完成了这项工作。马哥教育你值得拥有。为了感谢帮打个广告 本文转自 小罗ge11 51CTO博客原文链接http://blog.51cto.com/xiaoluoge/1583919如需转载请自行联系原作者