linux 下 搭建邮件邮件服务器(Postfix+Dovecot)(三) 使用 maildrop 投递邮件

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

 linux 下 搭建邮件邮件服务器(Postfix+Dovecot)(三) 使用 maildrop 投递邮件

十六、配置postfix使用maildrop投递邮件
 maildrop是一个使用C++编写的用来代替本地MDA的带有过滤功能邮件投递代理,是courier邮件系统组件之一。它从标准输入接受信息并投递到用户邮箱;maildrop既可以将邮件投递到mailboxes格式邮箱,亦可以将其投递到maildirs格式邮箱。同时,maildrop可以从文件中读取入站邮件过滤指示,并由此决定是将邮件送入用户邮箱或者转发到其它地址等。和procmail不同的是,maildrop使用结构化的过滤语言,因此,邮件系统管理员可以开发自己的过滤规则并应用其中。

我们在此将使用maildrop来代替postfix自带的MDA,并以此为基础扩展后文的邮件杀毒和反垃圾邮件功能的调用;在此可能会修改前文中的许多设置,请确保您的设置也做了相应的修改。

1、安装maildrop前准备

 将courier-authlib的头文件及库文件(参考第八部分的第四小节)链接至/usr目录(编译maildrop时会到此目录下找此些相关的文件):

1
2
  # ln -sv /usr/local/courier-authlib/bin/courierauthconfig   /usr/bin
  # ln -sv /usr/local/courier-authlib/include/*   /usr/include
1
2
# vim /etc/ld.so.conf.d/courier-authlib.conf 
/usr/local/courier-authlib/lib/courier-authlib

# yum install pcre-devel -y


2、安装Courier-Unicode
    字符集库文件,相当于RPM方式安装的courier-authlib-devel包,不安装这个会导致编译maildrop时报错:

1
2
3
4
5
6
# wget http://jaist.dl.sourceforge.net/project/courier/courier-unicode/1.1/courier-unicode-1.1.tar.bz2
# tar jxvf courier-unicode-1.1.tar.bz2 
# cd courier-unicode-1.1
# ./configure
# make
# make install
1
2
3
# ls /usr/local/lib
libcourier-unicode.a   libcourier-unicode.so    libcourier-unicode.so.1.0.0  libunicode.la  libunicode.so.1
libcourier-unicode.la  libcourier-unicode.so.1  libunicode.a                 libunicode.so  libunicode.so.1.0.0
1
2
# vim /etc/ld.so.conf.d/courier-unicode.conf 
/usr/local/lib
1
# ldconfig -v



3、安装maildrop-2.7.2

1
2
# groupadd -g 1001 vmail
# useradd -g vmail -u 1001 -M -s /sbin/nologin vmail
1
2
3
4
5
6
7
8
9
10
11
# tar jxvf maildrop-2.7.2.tar.bz2
# cd maildrop-2.7.2
. /configure  \
      -- enable -sendmail= /usr/sbin/sendmail  \
      -- enable -trusted- users = 'root vmail'  \
      -- enable -syslog=1 -- enable -maildirquota \
      -- enable -maildrop-uid=1001 \
      -- enable -maildrop-gid=1001 \
      --with-trashquota --with-dirsync
# make 
# make install


4、新建其配置文件/etc/maildroprc文件,首先指定maildrop的日志记录位置:

1
  # vim /etc/maildroprc


 添加:

1
2
3
VERBOSE=5
logfile  "/var/log/maildrop.log"
to  "$HOME/Maildir"


1
2
  # touch /var/log/maildrop.log
  # chown vmail.vmail /var/log/maildrop.log



5、配置Postfix
 编辑master.cf

1
  # vim /etc/postfix/master.cf


 启用如下两行

1
2
  maildrop  unix  -       n       n       -       -       pipe
     flags=DRhu user=vmail argv= /usr/local/bin/maildrop  -d ${recipient}



 注意:定义transport的时候,即如上两行中的第二行,其参数行必须以空格开头,否则会出错。


 编辑main.cf

1
2
3
4
  # vim /etc/postfix/main.cf
  virtual_transport = virtual
  修改为:
  virtual_transport = maildrop



 将下面两项指定的UID和GID作相应的修改:

1
2
3
4
5
  virtual_uid_maps = static:2525
  virtual_gid_maps = static:2525
  修改为:
  virtual_uid_maps = static:1001
  virtual_gid_maps = static:1001


6、编辑/etc/authmysqlrc

1
2
3
4
5
6
  # vim /etc/authmysqrc
  MYSQL_UID_FIELD  2525
  MYSQL_GID_FIELD   '2525'
  更改为:
  MYSQL_UID_FIELD  1001
  MYSQL_GID_FIELD  1001

注意:没有此处的修改,maildrop可能会报告 “signal 0x06”的错误报告。

7、编辑# /etc/httpd/conf/httpd.conf,修改运行用户:

1
2
3
4
5
# vim /etc/httpd/conf/httpd.conf
如果启用了suexec的功能,则将虚拟主机中指定的
SuexecUserGroup postfix postfix
修改为:
SuexecUserGroup vmail vmail

如果没有使用上面的功能,则修改User和Group指令后的用户为vmail

将前文中的如下项

1
2
3
4
5
User postfix
Group postfix 
修改为:
User vmail
Group vmail

8、将用户邮件所在的目录/var/mailbox和extman的临时目录/tmp/extman的属主和属组指定为vmail

1
2
#chown -R vmail.vmail /var/mailbox
#chown -R vmail.vmail /tmp/extman

将CGI文件的属主和属组指定为vmail

1
2
# chown -R vmail.vmail /var/www/extsuite/extmail/cgi/
# chown -R vmail.vmail /var/www/extsuite/extman/cgi/

9、修改extman的主配置文件中的默认用户ID和组ID,确保其为类似如下内容

1
2
3
# vim /var/www/extsuite/extman/webman.cf
SYS_DEFAULT_UID = 1001
SYS_DEFAULT_GID = 1001


10、验正邮件投递

1
2
3
# /etc/init.d/courier-authlib restart 
# /etc/init.d/httpd restart 
# /etc/init.d/postfix restart

接下来重新启动postfix和apache,进行发信测试后,如果日志中的记录类同以下项,则安装成功

1
2
3
4
5
Jul  6 16:36:26 localhost postfix /qmgr [20145]: 02FD42600D2: from=<zyz20140618@126.com>, size=2292, nrcpt=1 (queue active)
Jul  6 16:36:26 localhost postfix /smtpd [20549]: disconnect from m15-112.126.com[220.181.15.112]
Jul  6 16:36:26 localhost postfix /pipe [20634]: 02FD42600D2: to=<zyz2@10fei3. top >, relay=
maildrop
, delay=0.31, delays=0.2 /0/0/0 .11, dsn=2.0.0, status=sent (delivered via maildrop service)


测试能否发送电邮:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# echo "test"|maildrop -V 9 -d zyz2@10fei3.top
maildrop: authlib: groupid=1001
maildrop: authlib: userid=1001
maildrop: authlib:  logname =zyz2@10fei3. top , home= /var/mailbox/10fei3 . top /zyz2 , mail=(default)
maildrop: Changing to  /var/mailbox/10fei3 . top /zyz2
Message envelope sender=MAILER-DAEMON
Tokenized ;
Tokenized string:  "VERBOSE"
Tokenized =
Tokenized string:  "5"
Tokenized ;
Tokenized logfile
Tokenized string:  "/var/log/maildrop.log"
Tokenized ;
Tokenized to
Tokenized string:  "$HOME/Maildir"
Tokenized ;
Tokenized eof
/etc/maildroprc (2): VERBOSE= "5"


十七、maidrop问题解决

报错1:

1
configure: error: pcre.h not found -  install  PCRE from www.pcre.org


解决:

1
# yum install pcre-devel -y



报错2:

1
configure: error: The Courier Unicode Library 1.2 appears not to be installed. You may need to  install  a separate development subpackage,  in  addition to the main package


解决:
安装Courier-Unicode
    字符集库文件,相当于RPM方式安装的courier-authlib-devel包,不安装这个会导致编译maildrop时

1
2
3
4
5
6
# wget http://jaist.dl.sourceforge.net/project/courier/courier-unicode/1.1/courier-unicode-1.1.tar.bz2
# tar jxvf courier-unicode-1.1.tar.bz2
# cd courier-unicode-1.1
# ./configure
# make
# make install

报错3:

1
2
# maildrop -v
maildrop: error  while  loading shared libraries: libunicode.so.1: cannot  open  shared object  file : No such  file  or directory

解决:

1
2
3
# ls /usr/local/lib
libcourier-unicode.a   libcourier-unicode.so    libcourier-unicode.so.1.0.0  libunicode.la  libunicode.so.1
libcourier-unicode.la  libcourier-unicode.so.1  libunicode.a                 libunicode.so  libunicode.so.1.0.0
1
2
# vim /etc/ld.so.conf.d/courier-unicode.conf
/usr/local/lib
1
# ldconfig -v


报错4:

1
2
3
Jul  6 14:27:58 localhost postfix /pipe [19853]: 531AE260200: to=<zyz2@10fei3. top >, relay=maildrop, delay=1057, 
delays=1057 /0 .01 /0/0 .07, dsn=4.3.0, status=deferred (temporary failure. Command output:  /usr/local/bin/maildrop : Unable to 
change to home directory.
1
2
3
4
5
6
# echo "test"|maildrop -V 10 -d zyz2@10fei3.top
maildrop: authlib: groupid=1001
maildrop: authlib: userid=1001
maildrop: authlib:  logname =zyz2@10fei3. top , home= /var/mailbox10fei3 . top /zyz2 , mail=(default)
maildrop: Changing to  /var/mailbox10fei3 . top /zyz2
maildrop: Unable to change to home directory.

解决:

1
2
3
4
5
6
7
检查 /etc/authmysqlrc 
MYSQL_HOME_FIELD        concat( '/var/mailbox/' ,homedir)
MYSQL_MAILDIR_FIELD    concat( '/var/mailbox/' ,maildir)
我因为配置成
MYSQL_MAILDIR_FIELD    concat( '/var/mailbox' ,maildir)
所以导致
maildrop: authlib:  logname =zyz2@10fei3. top , home= /var/mailbox10fei3 . top /zyz2 , mail=(default)

报错5:

1
2
3
Jul  6 14:35:59 localhost postfix /pipe [20149]: AAE7C260202: to=<zyz2@10fei3. top >, relay=maildrop, delay=0.28, 
delays=0.25 /0/0/0 .03, dsn=4.3.0, status=deferred (temporary failure. Command output:  /usr/local/bin/maildrop : Unable to  open 
mailbox. )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# echo "test"|maildrop -V 9 -d zyz2@10fei3.top
maildrop: authlib: groupid=1001
maildrop: authlib: userid=1001
maildrop: authlib:  logname =zyz2@10fei3. top , home= /var/mailbox/10fei3 . top /zyz2 , mail=(default)
maildrop: Changing to  /var/mailbox/10fei3 . top /zyz2
Message envelope sender=MAILER-DAEMON
Tokenized ;
Tokenized string:  "VERBOSE"
Tokenized =
Tokenized string:  "5"
Tokenized ;
Tokenized logfile
Tokenized string:  "/var/log/maildrop.log"
Tokenized ;
Tokenized ;
Tokenized eof
/etc/maildroprc (2): VERBOSE= "5"
maildrop: Unable to  open  mailbox.


解决:

1
2
3
4
5
6
7
8
to  "$HOME$DEFAULT"
改为:
to  "$HOME/Maildir"
# vim /etc/maildroprc 
#SHELL="/bin/sh"
VERBOSE=5
logfile  "/var/log/maildrop.log"
to  "$HOME/Maildir"





      本文转自独弹古调  51CTO博客,原文链接:http://blog.51cto.com/hunkz/1811595,如需转载请自行联系原作者





相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1天前
|
运维 监控 Linux
推荐几个不错的 Linux 服务器管理工具
推荐几个不错的 Linux 服务器管理工具
W9
|
1月前
|
运维 关系型数据库 MySQL
轻松管理Linux服务器的5个优秀管理面板
Websoft9 应用管理平台,github 2k star 开源软件,既有200+的优秀开源软件商店,一键安装。又有可视化的Linux管理面板,文件、数据库、ssl证书方便快捷管理。
W9
102 1
|
1月前
|
缓存 Ubuntu Linux
Linux环境下测试服务器的DDR5内存性能
通过使用 `memtester`和 `sysbench`等工具,可以有效地测试Linux环境下服务器的DDR5内存性能。这些工具不仅可以评估内存的读写速度,还可以检测内存中的潜在问题,帮助确保系统的稳定性和性能。通过合理配置和使用这些工具,系统管理员可以深入了解服务器内存的性能状况,为系统优化提供数据支持。
41 4
|
1月前
|
NoSQL Linux PHP
如何在不同操作系统上安装 Redis 服务器,包括 Linux 和 Windows 的具体步骤
本文介绍了如何在不同操作系统上安装 Redis 服务器,包括 Linux 和 Windows 的具体步骤。接着,对比了两种常用的 PHP Redis 客户端扩展:PhpRedis 和 Predis,详细说明了它们的安装方法及优缺点。最后,提供了使用 PhpRedis 和 Predis 在 PHP 中连接 Redis 服务器及进行字符串、列表、集合和哈希等数据类型的基本操作示例。
68 4
|
1月前
|
运维 监控 安全
盘点Linux服务器运维管理面板
随着云计算和大数据技术的迅猛发展,Linux服务器在运维管理中扮演着越来越重要的角色。传统的Linux服务器管理方式已经无法满足现代企业的需求,因此,高效、安全、易用的运维管理面板应运而生。
|
1月前
|
运维 监控 Linux
服务器管理面板大盘点: 8款开源面板助你轻松管理Linux服务器
在数字化时代,服务器作为数据存储和计算的核心设备,其管理效率与安全性直接关系到业务的稳定性和可持续发展。随着技术的不断进步,开源社区涌现出众多服务器管理面板,这些工具以其强大的功能、灵活的配置和友好的用户界面,极大地简化了Linux服务器的管理工作。本文将详细介绍8款开源的服务器管理面板,包括Websoft9、宝塔、cPanel、1Panel等,旨在帮助运维人员更好地选择和使用这些工具,提升服务器管理效率。
|
1月前
|
安全 算法 Linux
Linux 服务器还有漏洞?建议使用 OpenVAS 日常检查!
在数字化时代,Linux 服务器的安全至关重要。OpenVAS 是一款优秀的开源漏洞扫描工具,可以帮助及时发现并修复服务器中的安全隐患。本文将介绍 OpenVAS 的主要功能、使用方法及应对漏洞的措施,帮助用户加强服务器安全管理,确保企业数字化安全。
59 7
|
24天前
|
存储 Oracle 安全
服务器数据恢复—LINUX系统删除/格式化的数据恢复流程
Linux操作系统是世界上流行的操作系统之一,被广泛用于服务器、个人电脑、移动设备和嵌入式系统。Linux系统下数据被误删除或者误格式化的问题非常普遍。下面北亚企安数据恢复工程师简单聊一下基于linux的文件系统(EXT2/EXT3/EXT4/Reiserfs/Xfs) 下删除或者格式化的数据恢复流程和可行性。
|
1月前
|
监控 Ubuntu Linux
使用VSCode通过SSH远程登录阿里云Linux服务器异常崩溃
通过 VSCode 的 Remote - SSH 插件远程连接阿里云 Ubuntu 22 服务器时,会因高 CPU 使用率导致连接断开。经排查发现,VSCode 连接根目录 ".." 时会频繁调用"rg"(ripgrep)进行文件搜索,导致 CPU 负载过高。解决方法是将连接目录改为"root"(或其他具体的路径),避免不必要的文件检索,从而恢复正常连接。
|
1月前
|
安全 Linux API
Linux服务器安全
人们常误认为服务器因存于数据中心且数据持续使用而无需加密。然而,当驱动器需维修或处理时,加密显得尤为重要,以防止数据泄露。Linux虽有dm-crypt和LUKS等内置加密技术,但在集中管理、根卷加密及合规性等方面仍存不足。企业应选择具备强大验证、简单加密擦除及集中管理等功能的解决方案,以弥补这些缺口。
27 0