基于虚拟帐号的邮件系统extmail(1)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

            基于虚拟帐号的邮件系统extmail

       如果你经常使用邮箱的话, 你发现像网易、163等邮箱都是通过使用网页直接申请并且使用的,它提供给用户一种更快捷方便的操作,但我们前面所讲的sendmailpostfix似乎还没有这个功能,并且sendmailpostfix在创建一个用户的时候都是通过在系统上手工创建的,试想一下,如果在一个访问量比较大的邮件服务器,在网络上供人随意的注册用户的话,那么单是管理员创建帐号就会被累死的啊,这还没有考虑效率方面。

        ExtMail是一个以perl语言编写的,面向大容量/isp级应用,并且免费的高性能webmail软件,主要包括ExtMail,Extman两个部分的程序套件。ExtMail套件主要提供从浏览器中登录,使用邮件系统web操作界面。

       ExtMail配置示例

下面我在网上找了一个虚拟的ExtMail的构想图,我们可以借鉴一下

 

从上面的图示中,看到在安装的过程中需要的步骤,我们分解来做这个邮件系统

一.POSTFIX的安装

1>  配置DNS服务器

    在配置时我们使用域名test.com,配置内容自己搞定,自己做测试,区域文件内容如下即可

   

     

2>  在上图中我们可以看出,在Extmail使用中需要httpd php,mysql,openssl dovecot的软件,我们可以先安装。

     [root@localhost named]# yum install httpd  php  php-mysql  mysql  mysql-server  mysql-devel  openssl-devel  dovecot  perl-DBD-MySQL  tcl  tcl-devel  libart_lgpl  libart_lgpl-devel libtool-ltdl  libtool-ltdl-devel  expect      

 3>  在安装postfix之前,我们要先把系统开机启动的sendmail停止,并且设为开机不启动,以免与postfix起冲突

      [root@localhost named]# service sendmail stop

      [root@localhost named]# chkconfig sendmail off

 4> 因为我们这次配置postfix是使用源码安装,我们我们要先安装源码解析工具

     [root@localhost named]# yum groupinstall "Development Libraries" "Development Tools" "X Software Development" "Legacy Software Development"

     可以使用yum grouplist 查看一下,没有安装的在按照此方法安装

5> 安装开发环境之后就可以安装Postfix源码包了

   先为postfix建立一个postfix组与用户,并且安装过程中会让做一些选项,我们按照默认就行了

   [root@localhost postfix-2.9.5]# groupadd -g 2525 postfix

   [root@localhost postfix-2.9.5]# useradd -g postfix -u 2525 -s /sbin/nologin -M postfix

   [root@localhost postfix-2.9.5]# groupadd -g 2526 postdrop

   [root@localhost postfix-2.9.5]# useradd -g postdrop -u 2526 -s /bin/false -M postdrop

   [root@localhost postfix-2.9.5]# 

   [root@localhost ~]# tar -zxvf postfix-2.9.5.tar.gz  -C /usr/local/src/

   [root@localhost postfix-2.9.5]# cd /usr/local/src/postfix-2.9.5/

   在进入目录之后,我们会发现并没有configure文件,我们可以使用另一种方法实现

   [root@localhost postfix-2.9.5]# make makefiles 'CCARGS=-DHAS_MYSQL -I/usr/include/mysql -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/include/sasl  -DUSE_TLS ' 'AUXLIBS=-L/usr/lib/mysql -lmysqlclient -lz -lm -L/usr/lib/sasl2 -lsasl2   -lssl -lcrypto'

   [root@localhost postfix-2.9.5]# make && make install

   生成别名二进制文件,如果没有这一步,postfix的效率会很低

  [root@localhost postfix-2.9.5]# newaliases

 配置文件,测试发信成功

[root@localhost postfix-2.9.5]# vim /etc/postfix/main.cf   修改如下内容

myhostname = mail.test.com

myorigin = $myhostname

mydomain = test.com

mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

mynetworks = 192.168.2.0/24, 127.0.0.0/8

 开启postfix服务

 在开启服务的时候,你会发现我们现在还不能使用service的方式启动文件,这是因为在目录/etc/init.d/下还没有postfix的启动文件,我们可以通过两种方法来实现使用service的方法直接实现

   1.直接copy解压目录中的postfix启动文件到/etc/init.d/目录下

     [root@localhost bin]# cd /usr/local/src/postfix-2.9.5/bin

     [root@localhost bin]# cp postfix /etc/init.d/

    但是这两种方法下的postfix服务不能使用restart命令,仅仅可以使用stopstart,还不可以加入开机启动项,所以基本上不用这种方法

  2.这个方法比较麻烦一点,就是把rpm包中的postfix启动脚本文件分离出来copy/etc/init.d目录中

   [root@localhost bin]# cd /mnt/cdrom/Server/ 

[root@localhost Server]# cp postfix-2.3.3-2.1.el5_2.i386.rpm  ~/

[root@localhost Server]# cd

[root@localhost ~]# mkdir postfix

[root@localhost ~]# cd postfix

[root@localhost postfix]# rpm2cpio ../postfix-2.3.3-2.1.el5_2.i386.rpm | cpio -id

16333 blocks

[root@localhost postfix]# cp etc/rc.d/init.d/postfix /etc/init.d/

Postfix加入开机启动行列

 [root@localhost postfix]# chkconfig --add postfix

[root@localhost postfix]# chkconfig postfix on

开启服务

 [root@localhost postfix]# service postfix restart

  Shutting down postfix:                                     [  OK  ]

  Starting postfix:                                          [  OK  ]

6> 配置postfix开启cyrus-sasl的认证功能

   开启saslauthd服务,并且加入开机启动序列。

   [root@localhost named]# service saslauthd start

   Starting saslauthd:                                        [  OK  ]

   [root@localhost named]# chkconfig saslauthd on

查看postfix是否支持sasl认证功能

[root@localhost ~]# /usr/local/src/postfix-2.9.5/bin/postconf -a

   cyrus     //出现这个说明支持sasl认证

   dovecot 

配置postfix主配置文件,开启cyruus-sasl认证功能

[root@localhost ~]# vim /etc/postfix/main.cf      添加如下内容

  ############################CYRUS-SASL############################

  broken_sasl_auth_clients = yes

  smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_inva

lid_hostname,reject_non_fqdn_hostname,reject_unknown_sender_domain,reject_non_fqdn_s

ender,reject_non_fqdn_recipient,reject_unknown_recipient_domain,reject_unauth_pipeli

ning,reject_unauth_destination

  smtpd_sasl_auth_enable = yes

  smtpd_sasl_local_domain = $myhostname

  smtpd_sasl_security_options = noanonymous

  [root@localhost ~]# vim /usr/lib/sasl2/smtpd.conf    添加如下内容

       pwcheck_method: saslauthd

       mech_list: PLAIN LOGIN

  重启postfix服务

  [root@localhost ~]# service postfix restart

   Shutting down postfix:                                     [  OK  ]

   Starting postfix:                                          [  OK  ]

查看sasl有没有被加载

[root@localhost ~]# telnet 127.0.0.1 25  

    进去之后使用命令  ehlo mail.test.com  

    查看是否有这两行,如果有的话,则配置正确

    250-AUTH PLAIN LOGIN

    250-AUTH=PLAIN LOGIN 

7> mysql配置密码123,并加入开机启动

   [root@localhost ~]# service mysqld start

   [root@localhost ~]# mysqladmin -u root  password "123"

[root@localhost ~]# chkconfig mysqld on

 8> 我们要与mysql进行结合,使用让postfixcourier auth进行结合,安装Courier authentication library

[root@localhost ~]# tar -jxvf courier-authlib-0.63.0.tar.bz2 -C /usr/local/src/

[root@localhost ~]# cd /usr/local/src/courier-authlib-0.63.0/

[root@localhost courier-authlib-0.63.0]# ./configure --prefix=/usr/local/courier-authlib --sysconfdir=/etc --with-authmysql --with-mysql-libs=/usr/lib/mysql --with-mysql-includes=/usr/include/mysql --with-redhat --with-authmysqlrc=/etc/authmysqlrc --with-authdaemonrc=/etc/authdaemonrc --with-ltdl-lib=/usr/lib --with-ltdl-include=/usr/include

[root@localhost courier-authlib-0.63.0]# make && make install

[root@localhost courier-authlib-0.63.0]# chmod 755 /usr/local/courier-authlib/var/spool/authdaemon

[root@localhost courier-authlib-0.63.0]# cp /etc/authdaemonrc.dist /etc/authdaemonrc[root@localhost courier-authlib-0.63.0]# cp /etc/authmysqlrc.dist /etc/authmysqlrc

修改/etc/authdaemonrc文件

[root@localhost ~]# vim /etc/authdaemonrc 修改如下

    authmodulelist="authmysql"

    authmodulelistorig="authmysql"

    daemons=10

修改/etc/authmysqlrc文件

    [root@localhost ~]# vim /etc/authmysqlrc

      修改如下

     MYSQL_SERVER localhost

    MYSQL_PORT 3306                   (指定你的mysql监听的端口,这里使用默认的3306)

     MYSQL_USERNAME  extmail      (这时为后文要用的数据库的所有者的用户名)

     MYSQL_PASSWORD extmail        (密码)

     MYSQL_SOCKET  /var/lib/mysql/mysql.sock

     MYSQL_DATABASE  extmail

     MYSQL_USER_TABLE  mailbox

     MYSQL_CRYPT_PWFIELD  password

     MYSQL_UID_FIELD  '2525'

     MYSQL_GID_FIELD  '2525'

     MYSQL_LOGIN_FIELD  username

     MYSQL_HOME_FIELD  concat('/var/mailbox/',homedir)

     MYSQL_NAME_FIELD  name

     MYSQL_MAILDIR_FIELD  concat('/var/mailbox/',maildir)

   创建启动文件,并加入开机启动行列

     [root@localhost ~]# cp /usr/local/src/courier-authlib-0.63.0/courier-authlib.sysvinit /etc/init.d/courier-authlib

     [root@localhost ~]# chmod 755 /etc/init.d/courier-authlib 

     [root@localhost ~]# chkconfig --add courier-authlib

     [root@localhost ~]# chkconfig courier-authlib on

  把头文件存放在标准路径

       [root@localhost ~]# echo "/usr/local/courier-authlib/lib/courier-authlib" >> /etc/ld.so.conf.d/courier-authlib.conf

       查看一下是否有头文件

       [root@localhost ~]# ldconfig -v   

   开启服务

     [root@localhost ~]# service courier-authlib start

     Starting Courier authentication services: authdaemond

9> 新建虚拟用户邮箱的所在目录,并赋予其权限

   [root@localhost ~]# mkdir -pv /var/mailbox

   [root@localhost ~]# chown -R postfix /var/mailbox

10> 配置SMTP认证

     [root@localhost ~]# vim /usr/lib/sasl2/smtpd.conf    修改如下

      pwcheck_method: authdaemond

      log_level: 3

      mech_list:PLAIN LOGIN

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

 11> 现在让postfix支持虚拟域和虚拟用户

     编辑postfix主文件/etc/postfix/main.cf添加支持虚拟域的代码

     [root@localhost ~]# vim /etc/postfix/main.cf

      ########################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 user's maildir has overdrawn his diskspace quota, please Tidy your mailbox and try again later.

       virtual_overquota_bounce = yes

12>  建立数据库

     [root@localhost ~]# tar -zxvf extman-1.1.tar.gz 

     [root@localhost ~]# cd extman-1.1/docs/

     直接使用本目录下的数据库

     [root@localhost docs]# mysql -u root -p < extmail.sql 

     Enter password: 

     [root@localhost docs]# mysql -u root -p < init.sql 

     Enter password: 

     [root@localhost docs]# cp mysql* /etc/postfix/

13> 对用户extmail进行授权

    [root@localhost docs]# mysql -u root -p

    Enter password: 

     Welcome to the MySQL monitor.  Commands end with ; or \g.

     Y our MySQL connection id is 9

     mysql> GRANT all privileges on extmail.* TO extmail@localhost IDENTIFIED BY 'extmail';

     Query OK, 0 rows affected (0.00 sec)

     mysql> GRANT all privileges on extmail.* TO extmail@127.0.0.1 IDENTIFIED BY 'extmail';

    Query OK, 0 rows affected (0.00 sec)

    mysql> FLUSH PRIVILEGES;     //刷新数据库,使配置生效

    Query OK, 0 rows affected (0.00 sec)

   14> 虚拟域现在已经配置好了,但是要想postfix正常工作,我们需要取消中心域

        [root@localhost docs]# vim /etc/postfix/main.cf      //注释掉以下一行

        161  #mydestination = $myhostname, localhost.$mydomain, localhost, 

$mydomain

    重启一下postfix

    [root@localhost docs]# service postfix restart










本文转自 guodong810 51CTO博客,原文链接:http://blog.51cto.com/guodong810/1105352,如需转载请自行联系原作者
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
2天前
|
弹性计算 运维 搜索推荐
三翼鸟携手阿里云ECS g9i:智慧家庭场景的效能革命与未来生活新范式
三翼鸟是海尔智家旗下全球首个智慧家庭场景品牌,致力于提供覆盖衣、食、住、娱的一站式全场景解决方案。截至2025年,服务近1亿家庭,连接设备超5000万台。面对高并发、低延迟与稳定性挑战,全面升级为阿里云ECS g9i实例,实现连接能力提升40%、故障率下降90%、响应速度提升至120ms以内,成本降低20%,推动智慧家庭体验全面跃迁。
|
2天前
|
数据采集 人工智能 自然语言处理
3分钟采集134篇AI文章!深度解析如何通过云无影AgentBay实现25倍并发 + LlamaIndex智能推荐
结合阿里云无影 AgentBay 云端并发采集与 LlamaIndex 智能分析,3分钟高效抓取134篇 AI Agent 文章,实现 AI 推荐、智能问答与知识沉淀,打造从数据获取到价值提炼的完整闭环。
346 91
|
10天前
|
人工智能 自然语言处理 前端开发
Qoder全栈开发实战指南:开启AI驱动的下一代编程范式
Qoder是阿里巴巴于2025年发布的AI编程平台,首创“智能代理式编程”,支持自然语言驱动的全栈开发。通过仓库级理解、多智能体协同与云端沙箱执行,实现从需求到上线的端到端自动化,大幅提升研发效率,重塑程序员角色,引领AI原生开发新范式。
829 156
|
3天前
|
数据采集 缓存 数据可视化
Android 无侵入式数据采集:从手动埋点到字节码插桩的演进之路
本文深入探讨Android无侵入式埋点技术,通过AOP与字节码插桩(如ASM)实现数据采集自动化,彻底解耦业务代码与埋点逻辑。涵盖页面浏览、点击事件自动追踪及注解驱动的半自动化方案,提升数据质量与研发效率,助力团队迈向高效、稳定的智能化埋点体系。(238字)
250 156
|
3天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
11天前
|
机器人 API 调度
基于 DMS Dify+Notebook+Airflow 实现 Agent 的一站式开发
本文提出“DMS Dify + Notebook + Airflow”三位一体架构,解决 Dify 在代码执行与定时调度上的局限。通过 Notebook 扩展 Python 环境,Airflow实现任务调度,构建可扩展、可运维的企业级智能 Agent 系统,提升大模型应用的工程化能力。
|
人工智能 前端开发 API
前端接入通义千问(Qwen)API:5 分钟实现你的 AI 问答助手
本文介绍如何在5分钟内通过前端接入通义千问(Qwen)API,快速打造一个AI问答助手。涵盖API配置、界面设计、流式响应、历史管理、错误重试等核心功能,并提供安全与性能优化建议,助你轻松集成智能对话能力到前端应用中。
805 154