GithubHelp home page GithubHelp logo

imapsieve_copy's Introduction

imapsieve_copy for Mailcow

Asynchronous ham/spam learning for mailcow-dovecot

In a normal mailcow installation, spam/ham learning as a result of user actions is done in-line. This slows down moving mails to and from the Junk folders. This causes issues with timeouts on clients, which can then cause mails to be re-copied which results in possible infinite mail duplications, and a poor user experience.

The imapsieve_copy tool copies these emails to a separate directory in your vmail spool for later processing by the scan_reported_mail.sh script

The imapsieve_copy is inserted into the sieve processing by modififying the normal report-spam and report-ham sieves.

The scan_reported_mails.sh then calls the normal rspamd-pipe-ham and rspamd-pipe-spam tools, respectively, when run. The script is a bash-singleton, ie if a second invocation is made when the first is still in process, then it will immediately exit so as to not conflict with the first.

When scan_reported_mails.sh is run it will move all currently reported mails into its processing directory, process them, and then cleanup. The next time it is run, by default every minute, then it will process all new messages which have been reported in the meantime.

This version of imapsieve_copy was developed by Stuart Espey, based on the original version by Zhang Huangbin,

Original version: IRedMail Imapsieve

Installation

Clone the imapsieve_copy repository into your mailcow's data/conf/dovecot directory,

cd data/conf/dovecot 
git clone https://github.com/mrstux/imapsieve_copy.git

then ensure that the permissions are correct:

:/opt/mailcow-dockerized# ls -al data/conf/dovecot/imapsieve_copy/
total 28
drwxr-xr-x 2 root root 4096 Aug 12 13:05 .
drwxr-xr-x 6 root root 4096 Aug 12 12:31 ..
-rwxr-xr-x 1 root root  895 Aug 12 12:44 imapsieve_copy
-rw-r--r-- 1 root root 1024 Aug 12 12:58 README.md
-rw-r--r-- 1 root root  573 Aug 12 12:15 report-ham.sieve
-rw-r--r-- 1 root root  471 Aug 12 12:16 report-spam.sieve
-rwxr-xr-x 1 root root 3137 Aug 12 12:06 scan_reported_mails.sh

Then add the following to your docker-compose.override.yml:

  dovecot-mailcow:
    volumes:
      # install imapsieve_copy
      - ./data/conf/dovecot/imapsieve_copy/report-ham.sieve:/usr/lib/dovecot/sieve/report-ham.sieve
      - ./data/conf/dovecot/imapsieve_copy/report-spam.sieve:/usr/lib/dovecot/sieve/report-spam.sieve
      - ./data/conf/dovecot/imapsieve_copy/imapsieve_copy:/usr/lib/dovecot/sieve/imapsieve_copy
      - ./data/conf/dovecot/imapsieve_copy/scan_reported_mails.sh:/usr/lib/dovecot/scan_reported_mails.sh

    labels:
      # and schedule it
      - "ofelia.job-exec.dovecot_scan_reported_emails.schedule=@every 1m"
      - "ofelia.job-exec.dovecot_scan_reported_emails.command=/usr/lib/dovecot/scan_reported_mails.sh"
      - "ofelia.job-exec.dovecot_scan_reported_emails.tty=false"
      - "ofelia.job-exec.dovecot_scan_reported_emails.no-overlap=true"

This will mount the imapsieve_copy components over the top of the original imap sieve components in mailcow.

You will need to restart dovecot and ofelia. Dovecot needs a full restart to re-compile the sieves. Ofelia needs a restart to install the job scheduler which will scan the mails.

docker-compose up -d && docker-compose restart ofelia-mailcow

Dovecot.conf changes

No changes are actually needed, but the original author suggests adding APPEND to the imapsieve_mailbox1_causes property, as this should catch Outlook moves. Auto learn spam/ham with Dovecot and Outlook

 # From elsewhere to Spam folder
  imapsieve_mailbox1_name = Junk
  imapsieve_mailbox1_causes = COPY APPEND
  imapsieve_mailbox1_before = file:/usr/lib/dovecot/sieve/report-spam.sieve
 # END

Testing

If you want, you can execute the scan_reported_mails.sh anyway you want, including manually while testing.

I found it useful to modify scan_reported_mails.sh to utilize different spam/ham incoming directories, and to use cp -at instead of mv -t while testing, as this prevented removal of incoming spam/ham.

Logs

scan_reported_mails.sh outputs basic information to the ofelia log, and more detailed information including rspamd status to the dovecot log.

imapsieve_copy logs to the dovecot log when an email is copied.

Directories

By default imapsieve_copy creates an imapsieve_copy directory in the root of your vmail spool with ham and spam subdirectories.

scan_reported_mails.sh creates a temporary processing directory in this imapsieve_copy directory, with spam and ham subdirectories.

These directories are not on the /tmp fs to prevent losing messages in the event of a restart.

Revision History

2021-08-12 Initial Version

imapsieve_copy's People

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.