---
product: Chilkat
product_version: 11.7.0
language: js
language_label: JavaScript
class: MessageSet
license: bundle
deprecated: false
reference_html: https://www.chilkatsoft.com/refdoc/jsMessageSetRef.html
---
# Chilkat MessageSet — JavaScript — v11.7.0

> Chilkat 11.7.0 · language=js · class=MessageSet
> Other versions: replace `11.7.0` in this URL. Other languages: `https://www.chilkatsoft.com/ai-docs/v/11.7.0/<lang>/classes/MessageSet.md`.
> Language-wide rules (install, unlock, error model, strings/bytes): `https://www.chilkatsoft.com/ai-docs/v/11.7.0/js/guide.md`.

## Purpose

**Represent and pass sets of IMAP message identifiers.**

`Chilkat.MessageSet` represents a set of IMAP message identifiers used by `Chilkat.Imap`. It is a helper object for passing groups of messages to IMAP methods and for receiving groups of message IDs returned by IMAP search, fetch, copy, delete, or flag-related operations. A `MessageSet` may contain either UIDs or sequence numbers, and the `HasUids` setting identifies which form is being used.

**IMAP message IDs**

Store the identifiers used by IMAP operations, either as message UIDs or as sequence numbers.

**Used by Chilkat.Imap**

Pass message sets to IMAP methods that operate on multiple messages, or receive them from IMAP methods that return matching messages.

**UID awareness**

Use `HasUids` to indicate whether the contained identifiers are stable IMAP UIDs or mailbox-relative sequence numbers.

**Add and remove IDs**

Insert message identifiers, remove identifiers, check whether an ID is present, and build the exact message group needed for an IMAP operation.

**Compact string formats**

Load or emit compact IMAP-style message ranges such as comma-separated lists and range expressions.

**Set operations**

Subtract one message set from another when application logic needs to exclude already-processed or unwanted messages.

**Common pattern:** Use `MessageSet` only for IMAP message identifiers, not as a general-purpose collection. Obtain a message set from an IMAP search or build one manually, confirm whether it contains UIDs or sequence numbers, then pass it to the appropriate `Chilkat.Imap` method for fetching, copying, deleting, flagging, or otherwise processing the selected messages.

For an extended overview, see [MessageSet Class Overview](https://www.chilkatsoft.com/messageset_class_overview.asp).

## Object creation, unlocking and error handling

**Object Creation**

Note: This is intended for running within a [Chilkat.Js embedded JavaScript engine](https://www.chilkatsoft.com/chilkat_javascript_engine.asp).

```
var obj = new CkMessageSet();
```

Call `Global.UnlockBundle` once at the start of the program, before using this or any other Chilkat class. Any string unlocks a fully functional 30-day trial; a purchased unlock code is used in production. See `guide.md` for the exact code in JavaScript.

How failure is reported depends on the method's return type and is stated in the note under each method below. In every case the diagnostic text is in the `LastErrorText` property of the object whose method was called.

## Members common to every Chilkat class

Documented once per language in `common-members.md`; listed here so this page is self-contained.

| Property | Signature | Access | Meaning |
|---|---|---|---|
| `DebugLogFilePath` | `DebugLogFilePath` | read/write | If set to a file path, this property logs the LastErrorText of each Chilkat method or property call to the specified file. |
| `LastErrorHtml` | `LastErrorHtml` | read-only | Provides HTML-formatted information about the last called method or property. |
| `LastErrorText` | `LastErrorText` | read-only | Provides plain text information about the last called method or property. |
| `LastErrorXml` | `LastErrorXml` | read-only | Provides XML-formatted information about the last called method or property. |
| `LastMethodSuccess` | `LastMethodSuccess` | read/write | Indicates the success or failure of the most recent method call: `true` means success, `false` means failure. |
| `VerboseLogging` | `VerboseLogging` | read/write | If set to `true`, then the contents of LastErrorText (or LastErrorXml, or LastErrorHtml) may contain more verbose information. |
| `Version` | `Version` | read-only | Version of the component/library, such as "10.1.0" |

## Member index

| Member | Kind | Signature |
|---|---|---|
| `Count` | property, read-only | `Count` |
| `HasUids` | property, read/write | `HasUids` |
| `ContainsId` | method | `var boolVal = ContainsId(msgId);` |
| `FromCompactString` | method | `var success = FromCompactString(str);` |
| `GetId` | method | `var uintVal = GetId(index);` |
| `InsertId` | method | `InsertId(id);` |
| `RemoveId` | method | `RemoveId(id);` |
| `Subtract` | method | `Subtract(msgSet);` |
| `ToCommaSeparatedStr` | method | `var strVal = ToCommaSeparatedStr();` |
| `ToCompactString` | method | `var strVal = ToCompactString();` |

## Properties

### MessageSet.Count

`Chilkat 11.7.0 · js · MessageSet · Count · property · read-only`

```javascript
Count
```

· `int`, `read-only`

Returns the number of unique message identifiers currently stored in the set. A newly created `MessageSet` has a count of `0`.

The identifiers are maintained in ascending numeric order. They are interpreted as UIDs when `HasUids` is `true`, or as sequence numbers when it is `false`.

### MessageSet.HasUids

`Chilkat 11.7.0 · js · MessageSet · HasUids · property · read/write`

```javascript
HasUids
```

**Full documentation for this property (same in every language):** [IMAP Sequence Numbers Explained](https://www.chilkatsoft.com/ai-docs/v/11.7.0/articles/imap_message_sequence_numbers.md)

· `boolean`

Indicates how the numeric identifiers in this message set are interpreted:

- `true` — the values are IMAP UIDs. This is the default.
- `false` — the values are mailbox-relative sequence numbers.

Changing this property only changes how the existing numeric values are interpreted. It does not convert, validate, reorder, or clear the identifiers.

An IMAP UID is stable only within its mailbox and while that mailbox's `UIDVALIDITY` remains unchanged. Sequence numbers are temporary and can change when messages are added or expunged.

Set this property consistently before passing a manually constructed message set to an `Imap` method. The string formats produced by `ToCommaSeparatedStr` and `ToCompactString` contain only the numeric values and do not include this setting.

## Methods

### MessageSet.ContainsId

`Chilkat 11.7.0 · js · MessageSet · ContainsId · method`

```javascript
var boolVal = ContainsId(msgId);
```

· return: `boolean`  
· msgId: `unsigned int`

Returns `true` if the raw numeric value in `msgId` is present in the message set; otherwise, returns `false`.

The comparison is numeric only. The `HasUids` setting does not participate in the comparison.

### MessageSet.FromCompactString

`Chilkat 11.7.0 · js · MessageSet · FromCompactString · method`

```javascript
var success = FromCompactString(str);
```

· return: `boolean`; `true` for success, `false` for failure  
· str: `string`

Clears the identifiers currently stored in this object and loads the compact message-set representation in `str`. The existing `HasUids` setting is preserved.

**Important:** The existing set is cleared before `str` is parsed. If parsing fails, the message set remains empty.

An empty string succeeds and leaves the set empty. Valid identifiers are unsigned 32-bit decimal values from `1` through `4294967295`. The value `0` is not accepted. Values too large for an unsigned 32-bit integer cause the method to fail.

The syntax uses commas to separate values or ranges, and a colon to specify an inclusive ascending range. A single range may contain at most 500,001 identifiers; equivalently, the ending value minus the starting value cannot exceed `500000`.

**Version note:** The error-handling behavior described here was added in Chilkat version 11.6.0.

| Input | Result |
| :--- | :--- |
| `1,2,3,4,5` | Loads `1,2,3,4,5`. |
| `1:5` | Loads the inclusive range `1` through `5`. |
| `1:5,8:10` | Loads `1,2,3,4,5,8,9,10`. |
| `1,1,2,2,3` | Loads the unique values `1,2,3`. |
| `1:5,3:7` | Loads the unique values `1` through `7`. |
| `1,,3` | Empty comma-separated elements are ignored; loads `1,3`. |
| `1,2,abc,4` | Unrecognized elements are ignored; loads `1,2,4`. |
| `+1` | A leading plus sign is accepted; loads `1`. |

Whitespace is accepted around values, commas, and colons. This includes spaces, tabs, carriage returns, and line feeds. Empty comma-separated elements and unrecognized non-numeric elements are intentionally ignored. If `str` is nonempty and no valid identifier is loaded, the method returns `false`.

Descending ranges, ranges containing `0`, wildcard ranges such as `1:*`, malformed range syntax, oversized ranges, and numeric overflow cause the method to return `false`.

On success, duplicate identifiers are removed and the resulting identifiers are stored in ascending numeric order. The serialized form contains only the numbers and does not indicate whether they are UIDs or sequence numbers.

Use `ToCompactString` to generate the canonical compact representation.

Returns true for success, false for failure.

### MessageSet.GetId

`Chilkat 11.7.0 · js · MessageSet · GetId · method`

```javascript
var uintVal = GetId(index);
```

· return: `unsigned int`  
· index: `int`

Returns the message identifier at the zero-based index specified by `index`. Identifiers are returned in ascending numeric order.

If `index` is negative or is greater than or equal to `Count`, this method returns `0xFFFFFFFF`.

**Important:** The numeric value `0xFFFFFFFF` can also be stored in the set. Check `index` against `Count` before calling this method when that value could be present.

### MessageSet.InsertId

`Chilkat 11.7.0 · js · MessageSet · InsertId · method`

```javascript
InsertId(id);
```

· return: `undefined`  
· id: `unsigned int`

Adds `id` to the message set and maintains the identifiers in ascending numeric order.

- If `id` is already present, no duplicate is added.
- If `id` is `0`, the set is unchanged.
- The value `0xFFFFFFFF` is accepted.

The `HasUids` setting determines whether the stored values are interpreted as UIDs or sequence numbers.

### MessageSet.RemoveId

`Chilkat 11.7.0 · js · MessageSet · RemoveId · method`

```javascript
RemoveId(id);
```

· return: `undefined`  
· id: `unsigned int`

Removes the identifier whose raw numeric value equals `id`. If the value is not present, the set is unchanged.

The comparison is numeric only and does not depend on `HasUids`. The remaining identifiers stay in ascending numeric order.

### MessageSet.Subtract

`Chilkat 11.7.0 · js · MessageSet · Subtract · method · since 11.3.0`

```javascript
Subtract(msgSet);
```

· return: `undefined`  
· msgSet: `CkMessageSet`

Removes from this message set every identifier whose raw numeric value is present in `msgSet`. Values not present in this set are ignored.

The comparison is numeric only; the `HasUids` values of the two objects are not compared. This object's `HasUids` value is preserved, and the remaining identifiers stay in ascending numeric order.

Passing the same object as `msgSet` clears the set. Passing an empty set leaves this set unchanged.

For meaningful IMAP results, both objects should represent identifiers of the same type and from the same mailbox.

### MessageSet.ToCommaSeparatedStr

`Chilkat 11.7.0 · js · MessageSet · ToCommaSeparatedStr · method`

```javascript
var strVal = ToCommaSeparatedStr();
```

· return: `string`

Returns the unique identifiers as a comma-separated string in ascending numeric order. An empty set returns an empty string.

For example, a set containing the identifiers `1` through `5` returns `1,2,3,4,5`.

The returned string contains only the numeric values; it does not include the `HasUids` setting.

Returns `null` on failure

### MessageSet.ToCompactString

`Chilkat 11.7.0 · js · MessageSet · ToCompactString · method`

```javascript
var strVal = ToCompactString();
```

· return: `string`

Returns the unique identifiers in ascending numeric order using compact IMAP message-set syntax. Consecutive identifiers are represented as an inclusive range. An empty set returns an empty string.

| Comma-separated form | Compact form |
| :--- | :--- |
| `1,2,3,4,5` | `1:5` |
| `1,2,3,4,5,8,9,10` | `1:5,8:10` |
| `1,3,4,5,8,9,10` | `1,3:5,8:10` |

The returned string is canonical for the current set: identifiers are unique, sorted, and consecutive runs are compacted. It contains only the numeric values and does not include the `HasUids` setting.

Use `FromCompactString` to load this format.

Returns `null` on failure

