# Protocol for Sieve script exchange

Please note that this document is not authoritative and may well be out of date; you should look at specs.html for the current authoritative document for the MANAGESIEVE protocol. Note: This is not a standards track protocol. If you decide to base a program upon it you have been warned. This is a simple text-based protocol for getting user sieve scripts onto the (presumably sealed) IMAP server. The requirements for this process are:

- the user must authenticate to gain access, preferably via a secure SASL mechanism.
- only valid sieve scripts may be accepted

Additional features provided:

- the ability to manage multiple scripts on the server with zero or one of them being the "active" sieve script

### Types

This is a line-oriented protocol much like [IMAP] or [ACAP]. There are two types: ATOMS and strings, all space ('SP') separated. Strings may be quoted or literal. See [ACAP] for detailed descriptions.
sievename is a string where only certain characters are allowed and it must be at least 1 character long.

### Commands

`AUTHENTICATE SP string [SP string] EOL`
  SASL authentication; the parameters are the mechanism and optionally the initial data. Initial data is base64 encoded. The server replies with an OK or NO response, or a base64 string followed by an EOL. Client then replies with a base64 string followed by an EOL, and the procedure is repeated.
`NOOP EOL`
  No side effects. Valid replies: OK or NO.
`LOGOUT EOL`
  Logout: terminates connection. Valid replies: OK or NO.
`GETSCRIPT SP sievename EOL`
  The parameter is the name of the requested script. Returns: `string EOL` containing the script data. Get the script with name sievename from the server. Valid replies: OK or NO.
`PUTSCRIPT SP sievename SP string` EOL
  Puts sievename with data data onto the server if possible. Valid replies: OK or NO.
`SETACTIVE SP sievename` EOL
  Set the script with the name sievename as the active script. Any other script that was active is no longer. Valid replies: OK or NO.
`DELETESCRIPT SP sievename` EOL
  Delete the script with sievename. Valid replies: OK or NO.
`LISTSCRIPTS EOL`
  Returns zero or more: sievename EOL. Where the active script has a '*' at the end of its name. Valid replies: OK or NO.