## E2kAction E2kAction — Server-side rule actions |

## Synopsis

    struct              E2kAction;
    enum                E2kActionType;
    E2kAction *         e2k_action_move                     (GByteArray *store_entryid,
                                                             GByteArray *folder_source_key);
    E2kAction *         e2k_action_copy                     (GByteArray *store_entryid,
                                                             GByteArray *folder_source_key);
    enum                E2kActionReplyFlavor;
    E2kAction *         e2k_action_reply                    (GByteArray *template_entryid,
                                                             guint8 template_guid[16]);
    E2kAction *         e2k_action_oof_reply                (GByteArray *template_entryid,
                                                             guint8 template_guid[16]);
    E2kAction *         e2k_action_defer                    (GByteArray *data);
    enum                E2kActionBounceCode;
    E2kAction *         e2k_action_bounce                   (E2kActionBounceCode bounce_code);
    struct              E2kAddrList;
    enum                E2kActionForwardFlavor;
    E2kAction *         e2k_action_forward                  (E2kAddrList *list);
    E2kAction *         e2k_action_delegate                 (E2kAddrList *list);
    E2kAction *         e2k_action_tag                      (const gchar *propname,
                                                             E2kPropType type,
                                                             gpointer value);
    E2kAction *         e2k_action_delete                   (void);

    gboolean            e2k_actions_extract                 (guint8 **data,
                                                             gint *len,
                                                             GPtrArray **actions);
    void                e2k_actions_append                  (GByteArray *ba,
                                                             GPtrArray *actions);
    void                e2k_actions_free                    (GPtrArray *actions);
    void                e2k_action_free                     (E2kAction *act);

    E2kAddrList *       e2k_addr_list_new                   (gint nentries);
    void                e2k_addr_list_set_local             (E2kAddrList *list,
                                                             gint entry_num,
                                                             const gchar *display_name,
                                                             const gchar *exchange_dn,
                                                             const gchar *email);
    void                e2k_addr_list_set_oneoff            (E2kAddrList *list,
                                                             gint entry_num,
                                                             const gchar *display_name,
                                                             const gchar *email);
    void                e2k_addr_list_free                  (E2kAddrList *list);

## Description

E2kAction represents a single action taken by a server-side rule.

### Note

This code is not heavily tested. It is possible that some of the information in this file about how server-side rules work is wrong.

## Details

### struct E2kAction

    struct E2kAction {
    };

### enum E2kActionType

    typedef enum {
    	E2K_ACTION_MOVE         = 1,
    	E2K_ACTION_COPY         = 2,
    	E2K_ACTION_REPLY        = 3,
    	E2K_ACTION_OOF_REPLY    = 4,
    	E2K_ACTION_DEFER        = 5,
    	E2K_ACTION_BOUNCE       = 6,
    	E2K_ACTION_FORWARD      = 7,
    	E2K_ACTION_DELEGATE     = 8,
    	E2K_ACTION_TAG          = 9,
    	E2K_ACTION_DELETE       = 10,
    	E2K_ACTION_MARK_AS_READ = 11
    } E2kActionType;

### e2k_action_move ()

    E2kAction *         e2k_action_move                     (GByteArray *store_entryid,
                                                             GByteArray *folder_source_key);

Creates a rule action to move a message into the indicated folder

`store_entryid` : | The PR_STORE_ENTRYID of the message store
`folder_source_key` : | The PR_SOURCE_KEY of a folder in that store
Returns : | the new rule action

### e2k_action_copy ()

    E2kAction *         e2k_action_copy                     (GByteArray *store_entryid,
                                                             GByteArray *folder_source_key);

Creates a rule action to copy a message into the indicated folder

`store_entryid` : | The PR_STORE_ENTRYID of the message store
`folder_source_key` : | The PR_SOURCE_KEY of a folder in that store
Returns : | the new rule action

### enum E2kActionReplyFlavor

    typedef enum {
    	E2K_ACTION_REPLY_FLAVOR_NOT_ORIGINATOR = 1,
    	E2K_ACTION_REPLY_FLAVOR_STOCK_TEMPLATE = 2
    } E2kActionReplyFlavor;

### e2k_action_reply ()

    E2kAction *         e2k_action_reply                    (GByteArray *template_entryid,
                                                             guint8 template_guid[16]);

Creates a rule action to reply to a message using the indicated template

`template_entryid` : | The entryid of the reply template
`template_guid` : | The GUID of the reply template
Returns : | the new rule action

### e2k_action_oof_reply ()

    E2kAction *         e2k_action_oof_reply                (GByteArray *template_entryid,
                                                             guint8 template_guid[16]);

Creates a rule action to send an Out-of-Office reply to a message using the indicated template

`template_entryid` : | The entryid of the reply template
`template_guid` : | The GUID of the reply template
Returns : | the new rule action

### e2k_action_defer ()

    E2kAction *         e2k_action_defer                    (GByteArray *data);

Creates a rule action to defer processing on a message

`data` : | data identifying the deferred action
Returns : | the new rule action

### enum E2kActionBounceCode

    typedef enum {
    	E2K_ACTION_BOUNCE_CODE_TOO_LARGE     = 13,
    	E2K_ACTION_BOUNCE_CODE_FORM_MISMATCH = 31,
    	E2K_ACTION_BOUNCE_CODE_ACCESS_DENIED = 38
    } E2kActionBounceCode;

### e2k_action_bounce ()

    E2kAction *         e2k_action_bounce                   (E2kActionBounceCode bounce_code);

Creates a rule action to bounce a message

`bounce_code` : | a bounce code
Returns : | the new rule action

### struct E2kAddrList

    struct E2kAddrList {
    };

### enum E2kActionForwardFlavor

    typedef enum {
    	E2K_ACTION_FORWARD_FLAVOR_PRESERVE_SENDER = 1,
    	E2K_ACTION_FORWARD_FLAVOR_DO_NOT_MUNGE    = 2,
    	E2K_ACTION_FORWARD_FLAVOR_REDIRECT        = 3,
    	E2K_ACTION_FORWARD_FLAVOR_AS_ATTACHMENT   = 4
    } E2kActionForwardFlavor;

### e2k_action_forward ()

    E2kAction *         e2k_action_forward                  (E2kAddrList *list);

Creates a rule action to forward a message to the indicated list of recipients

`list` : | a list of recipients
Returns : | the new rule action

### e2k_action_delegate ()

    E2kAction *         e2k_action_delegate                 (E2kAddrList *list);

Creates a rule action to delegate a meeting request to the indicated list of recipients

`list` : | a list of recipients
Returns : | the new rule action

### e2k_action_tag ()

    E2kAction *         e2k_action_tag                      (const gchar *propname,
                                                             E2kPropType type,
                                                             gpointer value);

Creates a rule action to set the given property to the given value on a message.

`propname` : | a MAPI property name
`type` : | the type of `propname`
`value` : | the value for `propname`
Returns : | the new rule action

### e2k_action_delete ()

    E2kAction *         e2k_action_delete                   (void);

Creates a rule action to permanently delete a message (ie, not just move it to the trash).

Returns : | the new rule action

### e2k_actions_extract ()

    gboolean            e2k_actions_extract                 (guint8 **data,
                                                             gint *len,
                                                             GPtrArray **actions);

Attempts to extract a list of actions from *`data`, which contains a binary-encoded list of actions from a server-side rule.

On success, *`actions` will contain the extracted list, *`data` will be advanced past the end of the restriction data, and *`len` will be decremented accordingly.

`data` : | pointer to data pointer
`len` : | pointer to data length
`actions` : | pointer to array to store actions in
Returns : | success or failure

### e2k_actions_append ()

    void                e2k_actions_append                  (GByteArray *ba,
                                                             GPtrArray *actions);

Appends `actions` to `ba` as part of a server-side rule.

`ba` : | a buffer into which a server-side rule is being constructed
`actions` : | the actions to append to `ba`

### e2k_actions_free ()

    void                e2k_actions_free                    (GPtrArray *actions);

Frees `actions` and all of its elements

`actions` : | an array of E2kAction

### e2k_action_free ()

    void                e2k_action_free                     (E2kAction *act);

Frees `act`

`act` : | the action

### e2k_addr_list_new ()

    E2kAddrList *       e2k_addr_list_new                   (gint nentries);

Creates an address list for a forward or delegate rule, with `nentries` slots

`nentries` : | the number of entries
Returns : | the new address list

### e2k_addr_list_set_local ()

    void                e2k_addr_list_set_local             (E2kAddrList *list,
                                                             gint entry_num,
                                                             const gchar *display_name,
                                                             const gchar *exchange_dn,
                                                             const gchar *email);

Sets entry number `entry_num` of `list` to refer to the indicated local Exchange user.

`list` : | the address list
`entry_num` : | the list entry to set
`display_name` : | the UTF-8 display name of the recipient
`exchange_dn` : | the Exchange 5.5-style DN of the recipient
`email` : | the SMTP email address of the recipient

### e2k_addr_list_set_oneoff ()

    void                e2k_addr_list_set_oneoff            (E2kAddrList *list,
                                                             gint entry_num,
                                                             const gchar *display_name,
                                                             const gchar *email);

Sets entry number `entry_num` of `list` to refer to the indicated "one-off" SMTP user.

`list` : | the address list
`entry_num` : | the list entry to set
`display_name` : | the UTF-8 display name of the recipient
`email` : | the SMTP email address of the recipient

### e2k_addr_list_free ()

    void                e2k_addr_list_free                  (E2kAddrList *list);

Frees `list` and all its entries.

`list` : | the address list

## See Also

E2kRule, E2kRestriction