Sieve Extprograms pipe to PHP script

Discussion in 'Server Operation' started by Blaasbalg, Oct 17, 2016.

  1. Blaasbalg

    Blaasbalg Member

    Hi all,
    I am trying to pipe incoming email to a PHP script using the Sieve Extprograms plugin. My script currently looks like this (I am completely new to this plugin and I haven't been able to find any good documentation or examples for it, so please forgive me if this is really stupid :p):
    Code:
    require ["fileinto", "regex", "date", "relational", "vacation"];
    
    
    
    service sieve-pipe-script {
      # This script is executed for each service connection
      executable = /usr/bin/php /var/www/[removed]/pipe.php support@[removed].com
    
      # use some unprivileged user for execution
      user = dovenull
    
      # socket name is program-name in Sieve (without sieve-pipe/ prefix)
      unix_listener sieve-pipe/sieve-pipe-script {
      }
    }
    
    keep;
    
    My main Sieve configuration file:
    Code:
    ##
    ## Settings for the Sieve interpreter
    ##
    
    # Do not forget to enable the Sieve plugin in 15-lda.conf and 20-lmtp.conf
    # by adding it to the respective mail_plugins= settings.
    
    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
    
      # 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
    
      # Directory for :global include scripts for the include extension.
      #sieve_global_dir =
    
      # Path to a script file or a directory containing script files that need to be
      # executed before the user's script. If the path points to a directory, all
      # the Sieve scripts contained therein (with the proper .sieve extension) are
      # executed. The order of execution within a directory is determined by the
      # file names, using a normal 8bit per-character comparison. Multiple script
      # file or directory paths can be specified by appending an increasing number.
      #sieve_before =
      #sieve_before2 =
      #sieve_before3 = (etc...)
    
      # Identical to sieve_before, only the specified scripts are executed after the
      # user's script (only when keep is still in effect!). Multiple script file or
      # directory paths can be specified by appending an increasing number.
      #sieve_after =
      #sieve_after2 =
      #sieve_after2 = (etc...)
    
      # Which Sieve language extensions are available to users. By default, all
      # supported extensions are available, except for deprecated extensions or
      # those that are still under development. Some system administrators may want
      # to disable certain Sieve extensions or enable those that are not available
      # by default. This setting can use '+' and '-' to specify differences relative
      # to the default. For example `sieve_extensions = +imapflags' will enable the
            # deprecated imapflags extension in addition to all extensions were already
      # enabled by default.
      #sieve_extensions = +notify +imapflags
    
      # Which Sieve language extensions are ONLY available in global scripts. This
      # can be used to restrict the use of certain Sieve extensions to administrator
      # control, for instance when these extensions can cause security concerns.
      # This setting has higher precedence than the `sieve_extensions' setting
      # (above), meaning that the extensions enabled with this setting are never
      # available to the user's personal script no matter what is specified for the
      # `sieve_extensions' setting. The syntax of this setting is similar to the
      # `sieve_extensions' setting, with the difference that extensions are
    # enabled or disabled for exclusive use in global scripts. Currently, no
      # extensions are marked as such by default.
      sieve_global_extensions = +vnd.dovecot.pipe +vnd.dovecot.execute
    
      # The Pigeonhole Sieve interpreter can have plugins of its own. Using this
      # setting, the used plugins can be specified. Check the Dovecot wiki
      # (wiki2.dovecot.org) or the pigeonhole website
      # (http://pigeonhole.dovecot.org) for available plugins.
            # The sieve_extprograms plugin is included in this release.
      sieve_plugins = sieve_extprograms
    
      # The separator that is expected between the :user and :detail
      # address parts introduced by the subaddress extension. This may
      # also be a sequence of characters (e.g. '--'). The current
      # implementation looks for the separator from the left of the
      # localpart and uses the first one encountered. The :user part is
      # left of the separator and the :detail part is right. This setting
      # is also used by Dovecot's LMTP service.
      #recipient_delimiter = +
    
      # The maximum size of a Sieve script. The compiler will refuse to compile any
      # script larger than this limit. If set to 0, no limit on the script size is
      # enforced.
      #sieve_max_script_size = 1M
    
      # The maximum number of actions that can be performed during a single script
      # execution. If set to 0, no limit on the total number of actions is enforced.
      #sieve_max_actions = 32
    
      # The maximum number of redirect actions that can be performed during a single
      # script execution. If set to 0, no redirect actions are allowed.
      #sieve_max_redirects = 4
    
      # The maximum number of personal Sieve scripts a single user can have. If set
      # to 0, no limit on the number of scripts is enforced.
      # (Currently only relevant for ManageSieve)
      #sieve_quota_max_scripts = 0
    
      # The maximum amount of disk storage a single user's scripts may occupy. If
      # set to 0, no limit on the used amount of disk storage is enforced.
      # (Currently only relevant for ManageSieve)
      #sieve_quota_max_storage = 0
    }
    This results in the following errors in the sieve log file:
    Code:
    sieve: info: started log at Oct 17 14:35:55.
    main script: line 5: error: unexpected character(s) starting with '-'.
    main script: line 5: error: expected end of command ';' or the beginning of a compound block '{', but found unknown characters.
    main script: line 5: error: unexpected character(s) starting with '-'.
    main script: line 7: error: unexpected character(s) starting with '='.
    main script: line 7: error: expected end of command ';' or the beginning of a compound block '{', but found unknown characters.
    main script: line 7: error: unexpected character(s) starting with '.'.
    main script: line 7: error: unexpected character(s) starting with '@'.
    main script: line 7: error: unexpected character(s) starting with '.'.
    main script: line 10: error: unexpected character(s) starting with '='.
    main script: line 13: error: unexpected character(s) starting with '-'.
    main script: line 13: error: unexpected character(s) starting with '-'.
    main script: line 13: error: unexpected character(s) starting with '-'.
    main script: error: parse failed.
    
    I am pretty sure I am doing it completely wrong, but due to the lack of information I can find I have no idea how to do it the right way. Any input is greatly appreciated. :)
     
  2. Blaasbalg

    Blaasbalg Member

    Any ideas? :)
     
  3. Blaasbalg

    Blaasbalg Member

    Nobody? :(
     

Share This Page