我们目前正在运行 courier,它使我们能够为 IMAP 和 POP3 设置不同的 SQL userdb 查询。我们需要这样做,因为我们不想让所有用户都拥有 IMAP 访问权限,如果设置了 userdb 中的布尔列,它将允许 IMAP 访问。
出于性能和稳定性的原因,我们目前正在迁移到 dovecot。我发现还没有办法根据 POP3 或 IMAP 访问设置不同的 SQL 查询 - 或者将访问方法作为变量传递给 SQL 查询。这两种方法都可以。
以下是来自 courier 的相关 mysql 配置:
MYSQL_SELECT_CLAUSE SELECT \
username,password_enc,password,uid,gid,homedir,maildir,'',CONCAT(\
IF(isimap=1 OR '$(service)'='webmail','disableimap=0,','disableimap=1,'),\
'disablepop3=0,disablewebmail=0'\
)\
FROM mail_users WHERE username = '$(local_part)@$(domain)'
服务变量来自守护进程配置文件。dovecot 中是否有类似的东西?
答案1
您可以使用%s
变量来检查正在请求的服务。请参阅http://wiki2.dovecot.org/Variables。
类似这样的 SQL 查询可以为你工作:
SELECT
'%u' AS username, '%d' AS domain,
password, uid, gid, homedir AS home
FROM mail_users
WHERE
CONCAT('%u', '@', '%d') = username'' AND
(isimap=1 OR '%s' <> 'imap')
-菲尔