Вот мой текущий фильтр:
require ["vacation"];
# rule:[Filter Test]
if allof (exists "from")
{
vacation :days 365 :addresses "newmail@vietfeir.com" :subject "Mailbox disabled" :from "newmail@vietfeir.com" text:
The mailbox dennis@vietfeir.com is no longer active. Please reply to this message and request the new address.
Thank you.
Я заметил, что это сработает один раз, и ответ будет возвращен отправителю. На любое последующее электронное письмо не приходит ответ. Если я отправлю сообщение из другого почтового ящика, он получит ответ. Что может вызвать такое поведение?
Итак, что мне действительно нужно, так это автоответчик, который отправляется каждый раз при получении сообщения. Roundcube имеет параметр конфигурации под названием «Responses», который, как я предполагал, будет делать это, но не имеет никакого эффекта. Я написал об этом сообществу Roundcube.
Это сбивает с толку. Через несколько часов я решил изменить сценарий. Теперь я снова получаю сообщение «сито: у пользователя нет активного скрипта в хранилище», что и вызвало этот пост изначально.
Я закомментировал расположение пользовательского скрипта в /etc/dovecot/conf.d/90-sieve.conf. После этого все фильтры, которые я создаю в Roundcube, работают правильно.
Итак, какова цель этой спецификации и что по умолчанию
Я новичок в ManagedSced. В журнале отладки указано, что у пользователя нет личных скриптов. Я указал расположение пользовательского скрипта как:
sieve = /var/mail/vhosts/%d/%u/sieve/*.sieve
Это не работает. Когда я создаю фильтр с помощью Roundcube, он находится здесь:
/var/mail/vhosts/vietfeir.com/dennis_gray/sieve
Имя файла - roundcube.sieve.
Как теперь указать местоположение пользовательского сценария? Мне не удалось определить правильный синтаксис.
У меня есть следующий тестовый сценарий, созданный Roundcube. Его имя - roundcube.sieve:
# rule:[Redirect Test]
if allof (header :contains "subject" "redirect")
{
redirect "dev@vietfeir.com";
}
Я включил отладку и видел в журнале такие сообщения:
Apr 17 10:11:10 lmtp(d0325mgray@vietfeir.com): Debug: 0B58A06ZtlzrbAAAywx1xA: sieve: file storage: Storage path
`/var/mail/vhosts/vietfeir.com/d0325mgray/.dovecot.sieve' not found
Apr 17 10:11:10 lmtp(d0325mgray@vietfeir.com): Debug: 0B58A06ZtlzrbAAAywx1xA: sieve: User has no active script i
n storage `/var/mail/vhosts/vietfeir.com/d0325mgray/sieve'
Apr 17 10:11:10 lmtp(d0325mgray@vietfeir.com): Debug: 0B58A06ZtlzrbAAAywx1xA: sieve: User has no personal script
Созданный мной сценарий Roundcube определенно хранится в пути для пользователя, поэтому я не знаю, почему он сообщает, что это не так.
Скрипт before.sieve выполняется без проблем.
Вывод dovecot -n:
# 2.2.33.2 (d6601f4ec): /etc/dovecot/dovecot.conf
# Pigeonhole version 0.4.21 (92477967)
# OS: Linux 4.15.0-47-generic x86_64 Ubuntu 18.04.2 LTS ext4
auth_mechanisms = plain login
log_path = /var/log/dovecot.log
mail_location = maildir:/var/mail/vhosts/%d/%n/
mail_privileged_group = mail
managesieve_notify_capability = mailto
managesieve_sieve_capability = fileinto reject envelope encoded-character vacation subaddress comparator-i;ascii-numeric relational regex imap4flags copy include variables body enotify environment mailbox date index ihave duplicate mime foreverypart extracttext imapflags notify
namespace inbox {
inbox = yes
location =
mailbox Drafts {
special_use = \Drafts
}
mailbox Junk {
special_use = \Junk
}
mailbox Sent {
special_use = \Sent
}
mailbox "Sent Messages" {
special_use = \Sent
}
mailbox Spam {
auto = subscribe
special_use = \Junk
}
mailbox Trash {
special_use = \Trash
}
prefix =
}
passdb {
args = /etc/dovecot/deny-users
deny = yes
driver = passwd-file
}
passdb {
args = /etc/dovecot/dovecot-sql.conf.ext
driver = sql
}
plugin {
sieve_before = /var/mail/before.sieve
sieve_extensions = +notify +imapflags
sieve_trace_dir = /var/mail
sieve_trace_level = matching
}
postmaster_address = dev@vietfeir.com
protocols = imap lmtp sieve
service auth-worker {
user = vmail
}
service auth {
unix_listener /var/spool/postfix/private/auth {
group = postfix
mode = 0666
user = postfix
}
unix_listener auth-userdb {
mode = 0600
user = vmail
}
user = dovecot
}
service imap-login {
inet_listener imap {
port = 0
}
inet_listener imaps {
port = 993
ssl = yes
}
}
service lmtp {
unix_listener /var/spool/postfix/private/dovecot-lmtp {
group = postfix
mode = 0600
user = postfix
}
}
service pop3-login {
inet_listener pop3 {
port = 0
}
inet_listener pop3s {
port = 995
ssl = yes
}
}
ssl = required
ssl_cert = </etc/letsencrypt/live/civicrm.vietfeir.com/fullchain.pem
ssl_client_ca_dir = /etc/ssl/certs
ssl_key = # hidden, use -P to show it
userdb {
driver = passwd
}
userdb {
args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n
driver = static
}
protocol lmtp {
mail_plugins = " sieve sieve"
}
protocol lda {
mail_plugins = " sieve"
}
Я доволен, что теперь понимаю, как работают эти фильтры. Когда я создаю фильтр с помощью Roundcube, он помещает его в
/var/mail/vhosts/[domain]/[user]/sieve/roundtree.sieve
Затем он создает символическую ссылку на этот файл в
/var/mail/vhosts/[domain]/[user]/.dovecot.sieve
затем при первом вызове фильтра он компилируется в .dovecot.svbin в том же каталоге.
Я могу считать это закрытым.