我需要将 Dovecot IMAP 电子邮件帐户设置为仅接收,以便用户可以浏览、移动、删除现有电子邮件,但不能从该帐户发送电子邮件。
发送是通过 exim 接受来自 MUA 的 SMTP 连接来完成的。它使用 Dovecot 作为身份验证器,如下所示:
dovecot_plain:
driver = dovecot
public_name = PLAIN
server_socket = /var/run/dovecot/auth-client
server_set_id = $auth1
我怎样才能做这样的事情:
unless_login_name_is = [email protected] : [email protected]
编辑:这是不起作用的......
acl_smtp_mailauth = acl_check_mailauth
...
acl_check_mailauth:
deny condition = ${if eq{$authenticated_sender}{[email protected]} {yes}{no}}
我认为可能是条件出了问题,但是这样做:
acl_check_mailauth:
deny
也没有效果。我读过手册但没有发现它能帮助我理解发生了什么。
编辑2:尝试acl_smtp_auth
根据 @wurtel 的建议,我尝试使用此 ACL。但是我现在遇到了另一个问题:AUTH 以 PLAIN 形式出现,如下所示
PLAIN <base64encodedvalue>
为了获得用户名,我需要对其进行解码,但是${base64d:${sg{$smtp_command_argument}{^PLAIN }{}}}
返回的却是一个空字符串。
我认为这是因为<base64encodedvalue>
解码时以 NUL 字节开头!
答案1
(感谢@wurtel 的评论,它帮助我排除了我最初的方法)
acl_smtp_auth
我通过以下 ACL进行修改实现了这一点:
acl_check_mail:
deny
condition = ${lookup{$authenticated_id}lsearch{/etc/exim4/users-not-allowed-to-send-mail}{yes}{no}}
message = "Sending mail is not enabled for this account"
log_message = "Denied sending mail as '$authenticated_id'"
# Uncomment the following to debug:
# warn log_message = "acl_check_mail is accepting mail for '$authenticated_id'"
accept
然后我有一个文件,/etc/exim4/users-not-allowed-to-send-mail
其中包含类似
[email protected]
[email protected]
请注意,${lookup}
不将$authenticated_id
文件中的一行与空白行匹配就足够有帮助了。