- 论坛徽章:
- 0
|
根据相关文档,安装了Postfix做MTA,使用Maildrop做为MDA,OpenLDAP存放数据,Courier-IMAP和Courier-Authlib。但是在实施的时候发现Postfix和Maildrop之间的配合还是需要注意一下问题的。
1、Postfix收到信,会检查to=<test@test.com>,这个Email地址就是参数recipient,然后根据这个是localuser还是Virtual User,还有main.cf中的mailbox_command,virtual_transport等设置,选择使用自带的local MDA还是maildrop来实现Mail Delievery。
2、如果是自带的virtual来投递localuser的email,也就是在maillog中可以看到的relay=local,那么会自动识别这个Email地址中的前面部分为localuser,进行投递。
3、如果是Virtual_mailbox,而且设置了Virtual_transport,会调用在master.cf中定义的transport具体的命令参数进行投递。我就是在这里出的问题,默认是${recipient},就是email地址。但是我的后台authlib是用uid进行认证,就是用户输入的是@前面的部分。这样Maildrop投递前会使用Email地址查询OpenLDAP,而authlib中把Email地址认为是UID进行查询,结果是出现最常见的“Invalid User Name:user unknown”。
这个问题有两种解决方法:
一是修改authlib的定义,使用email地址进行认证,这样,用户如果通过pop3或imap收取邮件,或是使用smtp认证,需要输入的是email地址,而不是uid用户名。
二是修改master.cf中的maildrop设置,命令行参数最后使用 ${user},而不是${recipient},这样maildrop会使用@前面的用户名进行用户的查询。
通常,如果只有一个虚拟域在使用,可以使用第二种方法,使用用户名认证。而如果一台Postfix提供多个虚拟域的Mail服务,因为存在不同域同样用户名的情况,就需要使用第一种方法了,这样,用户需要使用Email地址来进行登录认证了。
还有一些关于Postfix调用maildrop的方法。根据Postfix的文档,Maildrop 的调用分为“直接调用”和“间接调用”,
上面我们指定Virtual_transport的方法,就是直接调用,Postfix本身不参与邮件投递的工作,只负责Virtual_mailbox的查询工作,而完全由Maildrop来查询用户的Maildir信息,然后进行投递。这种方式无法使用系统的Aliases别名文件,使用于虚拟域。
还有一种“间接调用”,也就是通过指定main.cf中的mailbox_command = /yourpath/maildrop -d ${USER}来实现邮件的投递。这种方式的效率稍低,因为要进过本地的local transport再使用maildrop,但是好处是可以识别本地的Unix系统帐户等信息,也可以针对$mydestination中的域进行工作。
下面要研究一下Maildrop创建maildirsize的问题了  |
|