aboutsummaryrefslogtreecommitdiffstats
path: root/tools/node_modules/nodemailer/node_modules/mailcomposer/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'tools/node_modules/nodemailer/node_modules/mailcomposer/README.md')
-rw-r--r--tools/node_modules/nodemailer/node_modules/mailcomposer/README.md319
1 files changed, 319 insertions, 0 deletions
diff --git a/tools/node_modules/nodemailer/node_modules/mailcomposer/README.md b/tools/node_modules/nodemailer/node_modules/mailcomposer/README.md
new file mode 100644
index 0000000..d5e53b4
--- /dev/null
+++ b/tools/node_modules/nodemailer/node_modules/mailcomposer/README.md
@@ -0,0 +1,319 @@
+# mailcomposer
+
+**mailcomposer** is a Node.JS module for generating e-mail messages that can be
+streamed to SMTP or file.
+
+This is a standalone module that only generates raw e-mail source, you need to
+write your own or use an existing transport mechanism (SMTP client, Amazon SES,
+SendGrid etc). **mailcomposer** frees you from the tedious task of generating
+[rfc822](http://tools.ietf.org/html/rfc2822) compatible messages.
+
+[![Build Status](https://secure.travis-ci.org/andris9/mailcomposer.png)](http://travis-ci.org/andris9/mailcomposer)
+
+**mailcomposer** supports:
+
+ * **Unicode** to use any characters ✔
+ * **HTML** content as well as **plain text** alternative
+ * **Attachments** and streaming for larger files (use strings, buffers, files or binary streams as attachments)
+ * **Embedded images** in HTML
+ * **DKIM** signing
+ * usage of **your own** transport mechanism
+
+## Support mailcomposer development
+
+[![Donate to author](https://www.paypalobjects.com/en_US/i/btn/btn_donate_SM.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=DB26KWR2BQX5W)
+
+## Installation
+
+Install through NPM
+
+ npm install mailcomposer
+
+## Usage
+
+### Include mailcomposer module
+
+ var MailComposer = require("mailcomposer").MailComposer;
+
+### Create a new `MailComposer` instance
+
+ var mailcomposer = new MailComposer([options]);
+
+Where `options` is an optional options object with the following possible properties:
+
+ * **escapeSMTP** - if set replaces dots in the beginning of a line with double dots
+ * **encoding** - sets transfer encoding for the textual parts (defaults to `"quoted-printable"`)
+ * **keepBcc** - if set to true, includes `Bcc:` field in the message headers. Useful for *sendmail* command.
+
+### Simple example
+
+The following example generates a simple e-mail message with plaintext and html
+body.
+
+ var MailComposer = require("mailcomposer").MailComposer;
+ mailcomposer = new MailComposer(),
+ fs = require("fs");
+
+ // add additional header field
+ mailcomposer.addHeader("x-mailer", "Nodemailer 1.0");
+
+ // setup message data
+ mailcomposer.setMessageOption({
+ from: "andris@tr.ee",
+ to: "andris@node.ee",
+ body: "Hello world!",
+ html: "<b>Hello world!</b>"
+ });
+
+ mailcomposer.streamMessage();
+
+ // pipe the output to a file
+ mailcomposer.pipe(fs.createWriteStream("test.eml"));
+
+The output for such a script (the contents for "test.eml") would look like:
+
+ MIME-Version: 1.0
+ X-Mailer: Nodemailer 1.0
+ From: andris@tr.ee
+ To: andris@node.ee
+ Content-Type: multipart/alternative;
+ boundary="----mailcomposer-?=_1-1328088797399"
+
+ ------mailcomposer-?=_1-1328088797399
+ Content-Type: text/plain; charset=utf-8
+ Content-Transfer-Encoding: quoted-printable
+
+ Hello world!
+ ------mailcomposer-?=_1-1328088797399
+ Content-Type: text/html; charset=utf-8
+ Content-Transfer-Encoding: quoted-printable
+
+ <b>Hello world!</b>
+ ------mailcomposer-?=_1-1328088797399--
+
+## API
+
+### Add custom headers
+
+Headers can be added with `mailcomposer.addHeader(key, value)`
+
+ var mailcomposer = new MailComposer();
+ mailcomposer.addHeader("x-mailer", "Nodemailer 1.0");
+
+If you add an header value with the same key several times, all of the values will be used
+in the generated header. For example:
+
+ mailcomposer.addHeader("x-mailer", "Nodemailer 1.0");
+ mailcomposer.addHeader("x-mailer", "Nodemailer 2.0");
+
+Will be generated into
+
+ ...
+ X-Mailer: Nodemailer 1.0
+ X-Mailer: Nodemailer 2.0
+ ...
+
+The contents of the field value is not edited in any way (except for the folding),
+so if you want to use unicode symbols you need to escape these to mime words
+by yourself. Exception being object values - in this case the object
+is automatically JSONized and mime encoded.
+
+ // using objects as header values is allowed (will be converted to JSON)
+ var apiOptions = {};
+ apiOptions.category = "newuser";
+ apiOptions.tags = ["user", "web"];
+ mailcomposer.addHeader("X-SMTPAPI", apiOptions)
+
+### Add message parts
+
+You can set message sender, receiver, subject line, message body etc. with
+`mailcomposer.setMessageOption(options)` where options is an object with the
+data to be set. This function overwrites any previously set values with the
+same key
+
+The following example creates a simple e-mail with sender being `andris@tr.ee`,
+receiver `andris@node.ee` and plaintext part of the message as `Hello world!`:
+
+ mailcomposer.setMessageOption({
+ from: "andris@tr.ee",
+ to: "andris@node.ee",
+ body: "Hello world!"
+ });
+
+Possible options that can be used are (all fields accept unicode):
+
+ * **from** (alias `sender`) - the sender of the message. If several addresses are given, only the first one will be used
+ * **to** - receivers for the `To:` field
+ * **cc** - receivers for the `Cc:` field
+ * **bcc** - receivers for the `Bcc:` field
+ * **replyTo** (alias `reply_to`) - e-mail address for the `Reply-To:` field
+ * **inReplyTo** - The message-id this message is replying
+ * **references** - Message-id list
+ * **subject** - the subject line of the message
+ * **body** (alias `text`) - the plaintext part of the message
+ * **html** - the HTML part of the message
+ * **envelope** - optional SMTP envelope, if auto generated envelope is not suitable
+
+This method can be called several times
+
+ mailcomposer.setMessageOption({from: "andris@tr.ee"});
+ mailcomposer.setMessageOption({to: "andris@node.ee"});
+ mailcomposer.setMessageOption({body: "Hello world!"});
+
+Trying to set the same key several times will yield in overwrite
+
+ mailcomposer.setMessageOption({body: "Hello world!"});
+ mailcomposer.setMessageOption({body: "Hello world?"});
+ // body contents will be "Hello world?"
+
+### Address format
+
+All e-mail address fields take structured e-mail lists (comma separated)
+as the input. Unicode is allowed for all the parts (receiver name, e-mail username
+and domain) of the address. If the domain part contains unicode symbols, it is
+automatically converted into punycode, user part will be converted into UTF-8
+mime word.
+
+E-mail addresses can be a plain e-mail addresses
+
+ username@example.com
+
+or with a formatted name
+
+ 'Ноде Майлер' <username@example.com>
+
+Or in case of comma separated lists, the formatting can be mixed
+
+ username@example.com, 'Ноде Майлер' <username@example.com>, "Name, User" <username@example.com>
+
+### SMTP envelope
+
+SMTP envelope is usually auto generated from `from`, `to`, `cc` and `bcc` fields but
+if for some reason you want to specify it yourself, you can do it with `envelope` property.
+
+`envelope` is an object with the following params: `from`, `to`, `cc` and `bcc` just like
+with regular mail options. You can also use the regular address format.
+
+ mailOptions = {
+ ...,
+ from: "mailer@node.ee",
+ to: "daemon@node.ee",
+ envelope: {
+ from: "Daemon <deamon@node.ee>",
+ to: "mailer@node.ee, Mailer <mailer2@node.ee>"
+ }
+ }
+
+### Add attachments
+
+Attachments can be added with `mailcomposer.addAttachment(attachment)` where
+`attachment` is an object with attachment (meta)data with the following possible
+properties:
+
+ * **fileName** (alias `filename`) - filename to be reported as the name of the attached file, use of unicode is allowed
+ * **cid** - content id for using inline images in HTML message source
+ * **contents** - String or a Buffer contents for the attachment
+ * **filePath** - path to a file or an URL if you want to stream the file instead of including it (better for larger attachments)
+ * **streamSource** - Stream object for arbitrary binary streams if you want to stream the contents (needs to support *pause*/*resume*)
+ * **contentType** - content type for the attachment, if not set will be derived from the `fileName` property
+ * **contentDisposition** - content disposition type for the attachment, defaults to "attachment"
+ * **userAgent** - User-Agent string to be used if the fileName points to an URL
+
+One of `contents`, `filePath` or `streamSource` must be specified, if none is
+present, the attachment will be discarded. Other fields are optional.
+
+Attachments can be added as many as you want.
+
+**Using embedded images in HTML**
+
+Attachments can be used as embedded images in the HTML body. To use this
+feature, you need to set additional property of the attachment - `cid`
+(unique identifier of the file) which is a reference to the attachment file.
+The same `cid` value must be used as the image URL in HTML (using `cid:` as
+the URL protocol, see example below).
+
+NB! the cid value should be as unique as possible!
+
+ var cid_value = Date.now() + '.image.jpg';
+
+ var html = 'Embedded image: <img src="cid:' + cid_value + '" />';
+
+ var attachment = {
+ fileName: "image.png",
+ filePath: "/static/images/image.png",
+ cid: cid_value
+ };
+
+### DKIM Signing
+
+**mailcomposer** supports DKIM signing with very simple setup. Use this with caution
+though since the generated message needs to be buffered entirely before it can be
+signed - in this case the streaming capability offered by mailcomposer is illusionary,
+there will only be one `'data'` event with the entire message. Not a big deal with
+small messages but might consume a lot of RAM when using larger attachments.
+
+Set up the DKIM signing with `useDKIM` method:
+
+ mailcomposer.useDKIM(dkimOptions)
+
+Where `dkimOptions` includes necessary options for signing
+
+ * **domainName** - the domainname that is being used for signing
+ * **keySelector** - key selector. If you have set up a TXT record with DKIM public key at *zzz._domainkey.example.com* then `zzz` is the selector
+ * **privateKey** - DKIM private key that is used for signing as a string
+ * **headerFieldNames** - optional colon separated list of header fields to sign, by default all fields suggested by RFC4871 #5.5 are used
+
+**NB!** Currently if several header fields with the same name exists, only the last one (the one in the bottom) is signed.
+
+Example:
+
+ mailcomposer.setMessageOption({from: "andris@tr.ee"});
+ mailcomposer.setMessageOption({to: "andris@node.ee"});
+ mailcomposer.setMessageOption({body: "Hello world!"});
+ mailcomposer.useDKIM({
+ domainName: "node.ee",
+ keySelector: "dkim",
+ privateKey: fs.readFileSync("private_key.pem")
+ });
+
+### Start streaming
+
+When the message data is setup, streaming can be started. After this it is not
+possible to add headers, attachments or change body contents.
+
+ mailcomposer.streamMessage();
+
+This generates `'data'` events for the message headers and body and final `'end'` event.
+As `MailComposer` objects are Stream instances, these can be piped
+
+ // save the output to a file
+ mailcomposer.streamMessage();
+ mailcomposer.pipe(fs.createWriteStream("out.txt"));
+
+## Envelope
+
+Envelope can be generated with an `getEnvelope()` which returns an object
+that includes a `from` address (string) and a list of `to` addresses (array of
+strings) suitable for forwarding to a SMTP server as `MAIL FROM:` and `RCPT TO:`.
+
+ console.log(mailcomposer.getEnvelope());
+ // {from:"sender@example.com", to:["receiver@example.com"]}
+
+**NB!** both `from` and `to` properties might be missing from the envelope object
+if corresponding addresses were not detected from the e-mail.
+
+## Running tests
+
+Tests are run with [nodeunit](https://github.com/caolan/nodeunit)
+
+Run
+
+ npm test
+
+or alternatively
+
+ node run_tests.js
+
+## License
+
+**MIT** \ No newline at end of file