Вызов сценария Bash из сценария Sieve

Если у вас есть rename, написанный Ларри Уоллом, вы можете его использовать. Это sedдля имен файлов. Будьте осторожны, в некоторых системах есть другой инструмент с именем rename.

rename -n -e 's/([^,]+), ([^,]+)/$2 $1/' «list_of_files»

Замените «list_of_files», например,. с *. После проверки удалите -n.

2
03.06.2020, 10:53
3 ответа

кажется, я обнаружил, что не работает :по какой-то причине у 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
3
28.04.2021, 23:14

Проверьте, не переопределен ли ваш 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

1
28.04.2021, 23:14

Для справки, вот шаги, которые я выполнил, чтобы заставить это работать:

  1. создайте свой скрипт (т.е.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
      
  2. включить плагин 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
      
  3. создать сетчатый фильтр (т.е. в 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 для справки

0
11.05.2021, 05:52

Теги

Похожие вопросы