Мне нужно сделать учетную запись электронной почты Dovecot IMAP только для приема, чтобы пользователи могли просматривать, перемещать и т. д. удалить существующие электронные письма б но без возможности отправлять электронную почту с этой учетной записи.
Отправка осуществляется через exim, принимающий SMTP-соединения от MUA. В качестве аутентификатора он использует Dovecot, например:
dovecot_plain:
driver = dovecot
public_name = PLAIN
server_socket = /var/run/dovecot/auth-client
server_set_id = $auth1
Как я могу сделать что-то вроде:
unless_login_name_is = notallowed1@mydomain.com : notallowed2@mydomain.com
acl_smtp_mailauth = acl_check_mailauth
...
acl_check_mailauth:
deny condition = ${if eq{$authenticated_sender}{banned.user@example.com} {yes}{no}}
Я подумал, что это может быть неправильное условие, но делаю следующее:
acl_check_mailauth:
deny
тоже не действует. Я прочитал руководство , но не нашел, что оно помогло мне понять, что происходит.
acl_smtp_auth
Как было предложено @wurtel, я попытался использовать этот ACL вместо. Однако теперь я столкнулся с другой проблемой: AUTH приходит в ОБЫЧНОЙ форме, которая выглядит как
PLAIN <base64encodedvalue>
Чтобы получить имя пользователя, мне нужно его декодировать, однако $ {base64d: $ {sg {$ smtp_command_argument} {^ PLAIN} {}}}
возвращает пустую строку.
Я думаю, это потому, что
при декодировании начинается с байта NUL!
(Благодаря комментариям от @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
со строками как
disabled.account@example.com
also.disabled@example.com
Примечание, которое ${lookup}
достаточно полезно для не соответствия пустому $authenticated_id
строке в файле.