Email

Type {{#dataTypeArticle objectTypeId}}{{objectTypeId}}{{/dataTypeArticle}}
Datastore Type {{#dataTypeArticle datastoreTypeId}}{{datastoreTypeId}}{{/dataTypeArticle}}
Supports {{#article "security/authorities"}}authorities{{/article}}, {{#article "security/permissions"}}permissions{{/article}}, {{#article "transfer"}}transfer{{/article}}

Configuration

The following table presents you the configuration properties.

Property Type Default Read-Only Description
to text The email addresses of the recipients (comma-delimited)
body text The body of the email.
from text The email address of the sender.
subject text The subject of the email.
cc text The email addresses to be carbon-copied (CC) (comma-delimited)
bcc text The email addresses to be blind carbon-copied (BCC) (comma-delimited)
replyTo text The reply-to email address.
sent boolean Whether the email was sent.
sentBy text Who sent the email.
sentOn timestamp When the email was sent.

In addition, the email service optionally allows you to dispatch emails to Domain Users or Domain Groups. Domain Users have their own email fields which will determine the address to which the email is sent.

If you send to a Domain Group, all direct members of the group will receive the email.

Property Type Default Read-Only Description
toDomainId text If you wish to send this email to a specific domain principal, this points to the principal's domain.
toPrincipalId text If you wish to send this email to a specific domain principal, this points to the principal.

Emails can also utilize the contents of a Repository Node to load its body. This allows you to store and collaborate upon email templates within a Branch.

Property Type Default Read-Only Description
bodyRepositoryId text The _doc ID of the repository.
bodyBranchId text The _doc ID of the branch.
bodyNodeId text The _doc ID of the node.
bodyAttachmentId text The name of the attachment (example: default)

Create an Email

fit. You can then send it at some point in the future.

Here is a simple example where we create a basic email:

// assume we have an application
var application = ...;

// create an email
application.createEmail({
    "to": "axl@gnr.com",
    "body": "Welcome to the Jungle!",
    "from": "slash@gnr.com"
});

Update an Email

// assume we have an application
var application = ...;

// create an email
application.createEmail({
    "to": "axl@gnr.com",
    "body": "Welcome to the Jungle!",
    "from": "slash@gnr.com"
}).then(function() {

    this.set("title", "My First Email");
    this.update();

});

Delete an Email

it will not cause the email to be unsent (that much should be obvious).

email.del();

Read an Email

// assume we have an application
var application = ...;

// email id
var emailId = "4b5b685c980c10f98beb";

application.readEmail(emailId).then(function() {
    console.log("Found an email with id: " + this.getId());
});

List Emails

The following code hands back the full list.

// assume we have an application
var application = ...;

application.listEmails();

You can then iterate over the list to pick at what you'd like.

// assume we have an application
var application = ...;

application.listEmails().each(function() {
    console.log("Email: " + this.getId());
});

Retrieving the full list is potentially an expensive operation, depending how many items you have. The more your retrieve, the more data goes over the wire and so forth. Thus, you might wish to paginate your call and retrieve a subset of the total list at a time.

Here is an example that retrieves in pages of size 10. It starts on the second page (by skipping to starting index 20). It also sorts by the title field in a descending sequence.

// assume we have an application
var application = ...;

application.listEmails({
    "limit": 10,
    "skip": 20,
    "sort": { "title": -1 }
}).each(function() {
    console.log("Found an email with ID: " + this.getId());
});

You don't have to have all of the pagination parameters (limit, skip and sort). You might only want to include one or two. It's up to you.

Query Emails

Here is a query that looks for Emails which are disabled.

// assume we have an application
var application = ...;

application.queryEmails({
    "from": "dizzy@gnr.com"
});

Here is that same query followed by an iteration over the result map.

// assume we have an application
var application = ...;

application.queryEmails({
    "from": "dizzy@gnr.com"
}).each(function(id) {
    console.log("Found an Email: " + id + " with body: " + this.get("body"));
});

Finally, you can mix queries with pagination to reduce data over the wire and speed up performance. Here is that same query with some pagination thrown in. We limit to pages of size 10 and sort by title.

// assume we have an application
var application = ...;

application.queryEmails({
    "from": "dizzy@gnr.com"
},{
    "limit": 10,
    "skip": 20,
    "sort": {
        "title": -1
    }
}).each(function(id) {
    console.log("Found an Email: " + id + " with body: " + this.get("body"));
});

Send an Email

// assume we have an application
var application = ...;

// assume we have an email provider
var emailProvider = ...;

// create an email
application.createEmail({
    "to": "axl@gnr.com",
    "body": "Welcome to the Jungle!",
    "from": "slash@gnr.com"
}).then(function() {

    // send the email using the email provider
    this.send(emailProvider);

});