====== Enable sieve plugin (CentOS 7) ====== #Install Dovecot Manage Sieve yum install dovecot-pigeonhole #edit 20-managesieve.conf vim /etc/dovecot/conf.d/20-managesieve.conf #Uncomment protocols protocols = $protocols sieve #Edit 10-master.conf vim /etc/dovecot/conf.d/10-master.conf #add auth-master unix-listener to service auth service auth { unix_listener auth-client { group = mail mode = 0660 user = dovecot } unix_listener auth-master { group = mail mode = 0660 user = dovecot } user = dovecot } #Append this to the end of 10-master.conf service managesieve-login { inet_listener sieve { port = 4190 } } service managesieve { } protocol sieve { managesieve_max_line_length = 65536 managesieve_implementation_string = dovecot log_path = /var/log/dovecot-sieve-errors.log info_log_path = /var/log/dovecot-sieve.log } plugin { sieve = ~/mail/%d/%n/dovecot.sieve sieve_global_path = /etc/dovecot/sieve/default.sieve sieve_dir = ~/mail/%d/%n/sieve sieve_global_dir = /etc/dovecot/sieve/global/ } lda_mailbox_autocreate = yes lda_mailbox_autosubscribe = yes protocol lda { mail_plugins = $mail_plugins autocreate sieve quota postmaster_address = postmaster@testdomain.com hostname = srv.testdomain.com auth_socket_path = /var/run/dovecot/auth-master log_path = /var/log/dovecot-lda-errors.log info_log_path = /var/log/dovecot-lda.log } protocol lmtp { mail_plugins = $mail_plugins autocreate sieve quota log_path = /var/log/dovecot-lmtp-errors.log info_log_path = /var/log/dovecot-lmtp.log } #edit 90-sieve.conf vim /etc/dovecot/conf.d/90-sieve.conf plugin { # The path to the user's main active script. If ManageSieve is used, this the # location of the symbolic link controlled by ManageSieve. #sieve = ~/.dovecot.sieve sieve = ~/mail/%d/%n/dovecot.sieve # The default Sieve script when the user has none. This is a path to a global # sieve script file, which gets executed ONLY if user's private Sieve script # doesn't exist. Be sure to pre-compile this script manually using the sievec # command line tool. # --> See sieve_before fore executing scripts before the user's personal # script. #sieve_default = /var/lib/dovecot/sieve/default.sieve # Directory for :personal include scripts for the include extension. This # is also where the ManageSieve service stores the user's scripts. #sieve_dir = ~/sieve sieve_dir = ~/mail/%d/%n/sieve #touch and set the permissions on the log files, else you will get permission errors touch /var/log/dovecot-lda-errors.log chmod 660 /var/log/dovecot-lda-errors.log chown dovecot.mail /var/log/dovecot-lda-errors.log touch /var/log/dovecot-lda.log chmod 660 /var/log/dovecot-lda.log chown dovecot.mail /var/log/dovecot-lda.log touch /var/log/dovecot-lmtp-errors.log chmod 660 /var/log/dovecot-lmtp-errors.log chown dovecot.mail /var/log/dovecot-lmtp-errors.log touch /var/log/dovecot-lmtp.log chmod 660 /var/log/dovecot-lmtp.log chown dovecot.mail /var/log/dovecot-lmtp.log #Create default sieve rule mkdir /etc/dovecot/sieve nano /etc/dovecot/sieve/default.sieve require ["fileinto"]; # rule:[SPAM] if header :contains "X-Spam-Flag" "YES" { fileinto "Spam"; } # rule:[SPAM2] elsif header :matches "Subject" ["*money*","*Viagra*","Cialis"] { fileinto "Spam"; } touch /etc/dovecot/sieve/default.sieve chmod +w /etc/dovecot/sieve/default.sieve chown dovecot.mail /etc/dovecot/sieve/default.sieve #Restart dovecot, if service starts, means configuration is successful service dovecot restart #Configure roundcube vim /etc/roundcubemail/config.inc.php $config['plugins'] = array( 'archive', 'zipdownload', 'password', 'managesieve', ); // default contents of filters script (eg. default spam filter) $config['managesieve_default'] = '/etc/dovecot/sieve/default.sieve'; #Configure Exim vim /etc/exim/exim.conf localuser: driver = accept #transport = local_delivery transport = dovecot condition = ${lookup{$local_part}lsearch{/etc/exim/domains/$domain/passwd}{true}{false}} ###################################################################### # TRANSPORTS CONFIGURATION # ###################################################################### begin transports dovecot: driver = pipe command = /usr/libexec/dovecot/dovecot-lda -e -d $local_part@$domain -f $sender_address -a $original_local_part@$original_domain return_path_add log_output = true delivery_date_add envelope_to_add user = ${extract{2}{:}{${lookup{$local_part}lsearch{/etc/exim/domains/$domain/passwd}}}} group = mail return_output #Restart exim, if service starts, means configuration is successful service exim restart