Если у вас есть rename
, написанный Ларри Уоллом, вы можете его использовать. Это sed
для имен файлов. Будьте осторожны, в некоторых системах есть другой инструмент с именем rename
.
rename -n -e 's/([^,]+), ([^,]+)/$2 $1/' «list_of_files»
Замените «list_of_files»
, например,. с *
. После проверки удалите -n
.
кажется, я обнаружил, что не работает :по какой-то причине у dovecot не было разрешения на выполнение сценариев оболочки. Так что решение на самом деле былоsudo -u dovecot chmod +x *.sh
Итак, правильные права доступа к файлам в моем случае выглядят так:
/etc/dovecot/sieve/global # ls -la
insgesamt 44K
drwxr-xr-x 2 dovecot root 4,0K Jul 8 07:33.
drwxr-xr-x 3 root root 4,0K Jul 29 2019..
-rw-r--r-- 1 dovecot root 144 Jun 5 10:06 learn-ham.sieve
-rw-r--r-- 1 root root 306 Jun 5 10:07 learn-ham.svbin
-rw-r--r-- 1 dovecot root 86 Jun 17 15:45 learn-spam.sieve
-rw-r--r-- 1 root root 250 Jun 17 15:45 learn-spam.svbin
-rw-r--r-- 1 dovecot root 509 Mär 16 13:57 mailfilter.sieve
-rw-r--r-- 1 dovecot root 462 Jul 29 2019 mailfilter.sieve~
-rw-r--r-- 1 root root 398 Mai 6 18:02 mailfilter.svbin
-rwxrwxr-x 1 dovecot root 41 Jun 5 10:25 rspamd-learn-ham.sh
-rwxrwxr-x 1 dovecot root 42 Jul 8 07:33 rspamd-learn-spam.sh
Проверьте, не переопределен ли ваш sieve_pipe_bin_dir
, установленный в 90-plugin.conf
, в 90-sieve-extprograms.conf
. Если это так, вы можете раскомментировать его из 90-sieve-extprograms.conf
или удалить из 90-plugin.conf
и использовать каталог по умолчанию из 90-plugin.conf
(, например./usr/lib/dovecot/sieve-pipe/
)
sieve_pipe_bin_dir
должно быть установлено на имя каталога, как у вас изначально, а не на имя файла исполняемого файла.
Permission denied
при выполнении программы, вероятно, означает, что dovecot не разрешает читать или выполнять программу -ни исполняемый файл, ни родительский каталог. Вы можете проверить права доступа к исполняемому файлу с помощью stat $file
или ls -l $file
. chmod +x $file
сделает его исполняемым (всеми пользователями ). Вы можете попробовать проверить, может ли dovecot выполнить программу, запустив sudo -u dovecot $file
(, предполагая, что скрипт не сделает ничего плохого, если запустить его таким образом ). $file
./etc/dovecot/sieve/global/rspamd-learn-spam.sh
Для справки, вот шаги, которые я выполнил, чтобы заставить это работать:
создайте свой скрипт (т.е.mail_processor.py
)в каталоге /usr/lib/dovecot/sieve-execute/
:
#!/usr/bin/python3
from sys import stdin
with open('/var/log/mail_processor.log', 'a') as logfile:
for line in stdin:
print(line.rstrip(), file=logfile)
убедитесь, что ваш сценарий и целевые файлы имеют правильные разрешения:
$ chmod +rx /usr/lib/dovecot/sieve-execute/mail_processor.py
$ chmod 0777 /var/log/mail_processor.log
включить плагин sieve_extprograms
:
измените раздел плагина \etc\dovecot\conf.d\90-sieve.conf
следующим образом:
sieve_extensions = +vnd.dovecot.execute
sieve_plugins = sieve_extprograms
sieve_execute_bin_dir = /usr/lib/dovecot/sieve-execute
перезагрузить голубятню:
$ service dovecot restart
создать сетчатый фильтр (т.е. в Roundcube перейдите кsettings
->filters
->actions
->edit filter set
):
require ["vnd.dovecot.execute"];
# rule:[mail processing]
if true
{
execute :pipe "mail_processor.py";
}
Теперь вся почта, доставленная в любой почтовый ящик с этим сетчатым фильтром, будет проходить через mail_processor.py
для принятия мер.
Сито Pigeonhole :Плагин Extprograms для справки