OpenSearch/x-pack/docs/en/watcher/actions/email.asciidoc

453 lines
21 KiB
Plaintext

[[actions-email]]
=== Email Action
Use the `email` action to send email notifications. To send email, you must
<<configuring-email, configure at least one email account>> in
`elasticsearch.yml`.
Email notifications can be plain text or styled using HTML. You can include
information from the watch execution payload using <<templates, templates>>
and attach the entire watch payload to the message.
See <<email-action-attributes>> for the supported attributes. Any attributes that
are missing from the email action definition are looked up in the email
account configuration. The required attributes must either be set in the email
action definition or the account's `email_defaults`.
[[configuring-email-actions]]
==== Configuring Email Actions
You configure email actions in the `actions` array. Action-specific attributes
are specified using the `email` keyword.
For example, the following email action uses a template to include data from
the watch payload in the email body:
[source,js]
--------------------------------------------------
"actions" : {
"send_email" : { <1>
"email" : { <2>
"to" : "<username>@<domainname>", <3>
"subject" : "Watcher Notification", <4>
"body" : "{{ctx.payload.hits.total}} error logs found" <5>
}
}
}
--------------------------------------------------
<1> The id of the action.
<2> The action type is set to `email`.
<3> One or more addresses to send the email to. Must be specified in the
action definition or in the email account configuration.
<4> The subject of the email can contain static text and Mustache <<templates,
templates>>.
<5> The body of the email can contain static text and Mustache <<templates,
templates>>. Must be specified in the action definition or in the email
account configuration.
[[configuring-email-attachments]]
==== Configuring Email Attachments
You can attach the execution context payload or data from an any HTTP service to
the email notification. There is no limit on the number of attachments you can
configure.
To configure attachments, specify a name for the attached file and the type of
attachment: `data`, `http` or `reporting`. The `data` attachment type attaches the execution
context payload to the email message. The `http` attachment type enables
you to issue an HTTP request and attach the response to the email message. When
configuring the `http` attachment type, you must specify the request URL. The
`reporting` attachment type is a special type to include PDF rendered dashboards
from kibana. This type is consistently polling the kibana app if the dashboard
rendering is done, preventing long running HTTP connections, that are potentially
killed by firewalls or load balancers inbetween.
[source,js]
--------------------------------------------------
"actions" : {
"email_admin" : {
"email": {
"to": "John Doe <john.doe@example.com>",
"attachments" : {
"my_image.png" : { <1>
"http" : { <2>
"content_type" : "image.png",
"request" : {
"url": "http://example.org/foo/my-image.png" <3>
}
}
},
"dashboard.pdf" : {
"reporting" : {
"url": "http://example.org:5601/api/reporting/generate/dashboard/Error-Monitoring"
}
},
"data.yml" : {
"data" : {
"format" : "yaml" <4>
}
}
}
}
}
}
--------------------------------------------------
<1> The ID of the attachment, which is used as the file name in the email
attachment.
<2> The type of the attachment and its specific configuration.
<3> The URL from which to retrieve the attachment.
<4> Data attachments default to JSON if you don't specify the format.
.`http` attachment type attributes
[options="header"]
|=====
| Name | Description
| `content_type` | Sets the content type for the email attachment. By default,
the content type is extracted from the response sent by the
HTTP service. You can explicitly specify the content type to
ensure that the type is set correctly in the email in case
the response does not specify the content type or it's specified
incorrectly. Optional.
| `inline` | Configures as an attachment to sent with disposition `inline`. This
allows the use of embedded images in HTML bodies, which are displayed
in certain email clients. Optional. Defaults to `false`.
| `request` | Contains the HTTP request attributes. At a minimum, you must
specify the `url` attribute to configure the host and path to
the service endpoint. See <<webhook-action-attributes>> for
the full list of HTTP request attributes. Required.
|======
.`data` attachment type attributes
[options="header"]
|=====
| Name | Description
| `format` | Attaches the watch data, equivalent to specifying `attach_data`
in the watch configuration. Possible values are `json` or `yaml`.
Defaults to `json` if not specified.
|======
.`reporting` attachment type attributes
[options="header"]
|=====
| Name | Description
| `url` | The URL to trigger the dashboard creation
| `inline` | Configures as an attachment to sent with disposition `inline`. This
allows the use of embedded images in HTML bodies, which are displayed
in certain email clients. Optional. Defaults to `false`.
| `retries` | The reporting attachment type tries to poll regularly to receive the
created PDF. This configures the number of retries. Defaults to `40`.
The setting `xpack.notification.reporting.retries` can be configured
globally to change the default.
| `interval` | The time to wait between two polling tries. Defaults to `15s` (this
means, by default watcher tries to download a dashboard for 10 minutes,
forty times fifteen seconds). The setting `xpack.notification.reporting.interval`
can be configured globally to change the default.
| `request.auth` | Additional auth configuration for the request
| `request.proxy` | Additional proxy configuration for the request
|======
[[email-action-reports]]
===== Attaching Reports to an Email
You can use the `reporting` attachment type in an `email` action to automatically
generate a Kibana report and distribute it via email.
include::{xkb-repo-dir}/reporting/watch-example.asciidoc[]
include::{xkb-repo-dir}/reporting/report-intervals.asciidoc[]
//TODO: RE-ADD LINK:
//For more information, see
//{kibana-ref}/automating-report-generation.html[Automating Report Generation].
[[email-action-attributes]]
==== Email Action Attributes
[cols=",^,,", options="header"]
|======
| Name |Required | Default | Description
| `account` | no | the default account | The <<configuring-email, email account>> to use to send the email.
| `from` | no | - | The email <<email-address,address>> from which the email
will be sent. The `from` field can contain Mustache
<<templates, templates>> as long as it resolves to a
valid email address.
| `to` | yes | - | The email <<email-address,addresses>> of the `to` recipients.
The `to` field can contain Mustache <<templates, templates>>
as long as it resolves to a valid email address.
| `cc` | no | - | The email <<email-address,addresses>> of the `cc` recipients.
The `cc` field can contain Mustache <<templates, templates>>
as long as it resolves to a valid email address.
| `bcc` | no | - | The email <<email-address,addresses>> of the `bcc` recipients.
The `bcc` field can contain Mustache <<templates, templates>>
as long as it resolves to a valid email address.
| `reply_to` | no | - | The email <<email-address,addresses>> that will be set on the
message's `Reply-To` header. The `reply_to` field can contain
Mustache <<templates, templates>> as long as it resolves to
a valid email address.
| `subject` | no | - | The subject of the email. The subject can be static text or
contain Mustache <<templates, templates>>.
| `body` | no | - | The body of the email. When this field holds a string, it
will default to the text body of the email. Set as an object
to specify either the text or the html body or both (using
the fields below)
| `body.text` | yes | - | The plain text body of the email. The body can be static text
or contain Mustache <<templates, templates>>. The email `body`
must contain at least one `text` or `html` field.
| `body.html` | yes | - | The html body of the email. The body can be static text or
contain Mustache <<templates, templates>>. This body will be
sanitized to remove dangerous content such as scripts. This
behavior can be disabled by setting
`xpack.notification.email.html.sanitization.enabled: false` in
`elasticsearch.yaml`. The email `body` must contain at least
one `text` or `html` field.
| `priority` | no | - | The priority of this email. Valid values are: `lowest`, `low`,
`normal`, `high` and `highest`. The priority can contain a
Mustache <<templates, template>> as long as it resolves to
one of the valid values.
| `attachments` | no | - | Attaches the watch payload (`data` attachment) or a file
retrieved from an HTTP service (`http` attachment) to the
email. For more information, see
<<configuring-email-attachments, Configuring Email Attachments>>.
| `attach_data` | no | false | Indicates whether the watch execution data should be attached
to the email. You can specify a Boolean value or an object.
If `attach_data` is set to `true`, the data is attached as a
YAML file. This attribute is deprecated, use the `attachments`
attribute to add a `data` attachment to attach the watch payload.
| `attach_data.format` | no | yaml | When `attach_data` is specified as an object, this field
controls the format of the attached data. The supported formats
are `json` and `yaml`. This attribute is deprecated, use the
`attachments` attribute to add a `data` attachment to attach
the watch payload.
|======
[[email-address]]
Email Address::
An email address can contain two possible parts--the address itself and an
optional personal name as described in http://www.ietf.org/rfc/rfc822.txt[RFC 822].
The address can be represented either as a string of the form `user@host.domain`
or `Personal Name <user@host.domain>`. You can also specify an email address as
an object that contains `name` and `address` fields.
[[address-list]]
Address List::
A list of addresses can be specified as a an
array: `[ 'Personal Name <user1@host.domain>', 'user2@host.domain' ]`.
[[configuring-email]]
==== Configuring Email Accounts
{watcher} can send email using any SMTP email service. Email
messages can contain basic HTML tags. You can control which groups of tags are
allowed by <<email-html-sanitization, Configuring HTML Sanitization Options>>.
You configure the accounts {watcher} can use to send email in the
`xpack.notification.email` namespace in `elasticsearch.yml`.
If your email account is configured to require two step verification, you need
to generate and use a unique App Password to send email from {watcher}.
Authentication will fail if you use your primary password.
IMPORTANT: Currently, neither Watcher nor Shield provide a mechanism to encrypt
settings in `elasticsearch.yml`. Because the email account credentials appear
in plain text, you should limit access to `elasticsearch.yml` to the user that
you use to run Elasticsearch.
[[email-profile]]
{watcher} provides three email profiles that control how MIME messages are
structured: `standard` (default), `gmail`, and `outlook`. These profiles
accommodate differences in how various email systems interpret the MIME
standard. If you are using Gmail or Outlook, we recommend using the
corresponding profile. Use the `standard` profile if you are using another
email system.
For more information about configuring {watcher} to work with different email
systems, see:
* <<gmail, Sending Email from Gmail>>
* <<outlook, Sending Email from Outlook>>
* <<exchange, Sending Email from Exchange>>
* <<amazon-ses, Sending Email from Amazon SES>>
If you configure multiple email accounts, you must either configure a default
account or specify which account the email should be sent with in the
<<actions-email, `email`>> action.
[source,yaml]
--------------------------------------------------
xpack.notification.email:
default_account: team1
account:
team1:
...
team2:
...
--------------------------------------------------
[float]
[[gmail]]
===== Sending Email From Gmail
Use the following email account settings to send email from the
https://mail.google.com[Gmail] SMTP service:
[source,yaml]
--------------------------------------------------
xpack.notification.email.account:
gmail_account:
profile: gmail
smtp:
auth: true
starttls.enable: true
host: smtp.gmail.com
port: 587
user: <username>
password: <password>
--------------------------------------------------
If you get an authentication error that indicates that you need to continue the
sign-in process from a web browser when {watcher} attempts to send email, you need
to configure Gmail to https://support.google.com/accounts/answer/6010255?hl=en[Allow
Less Secure Apps to access your account].
If two-step verification is enabled for your account, you must generate and use
a unique App Password to send email from {watcher}. See
https://support.google.com/accounts/answer/185833?hl=en[Sign in using App Passwords]
for more information.
[float]
[[outlook]]
===== Sending Email from Outlook.com
Use the following email account settings to send email action from the
https://www.outlook.com/[Outlook.com] SMTP service:
[source,yaml]
--------------------------------------------------
xpack.notification.email.account:
outlook_account:
profile: outlook
smtp:
auth: true
starttls.enable: true
host: smtp-mail.outlook.com
port: 587
user: <email.address>
password: <password>
--------------------------------------------------
When sending emails, you have to provide a from address, either a default one
in your account configuration or as part of the email action in the watch.
NOTE: You need to use a unique App Password if two-step verification is enabled.
See http://windows.microsoft.com/en-us/windows/app-passwords-two-step-verification[App
passwords and two-step verification] for more information.
[float]
[[amazon-ses]]
===== Sending Email from Amazon SES (Simple Email Service)
Use the following email account settings to send email from the
http://aws.amazon.com/ses[Amazon Simple Email Service] (SES) SMTP service:
[source,yaml]
--------------------------------------------------
xpack.notification.email.account:
ses_account:
smtp:
auth: true
starttls.enable: true
starttls.required: true
host: email-smtp.us-east-1.amazonaws.com <1>
port: 587
user: <username>
password: <password>
--------------------------------------------------
<1> `smtp.host` varies depending on the region
NOTE: You need to use your Amazon SES SMTP credentials to send email through
Amazon SES. For more information, see
http://docs.aws.amazon.com/ses/latest/DeveloperGuide/smtp-credentials.html[Obtaining
Your Amazon SES SMTP Credentials]. You might also need to verify
https://docs.aws.amazon.com/ses/latest/DeveloperGuide/verify-email-addresses.html[your email address]
or https://docs.aws.amazon.com/ses/latest/DeveloperGuide/verify-domains.html[your whole domain]
at AWS.
[float]
[[exchange]]
===== Sending Email from Microsoft Exchange
Use the following email account settings to send email action from Microsoft
Exchange:
[source,yaml]
--------------------------------------------------
xpack.notification.email.account:
exchange_account:
profile: outlook
email_defaults:
from: <email address of service account> <1>
smtp:
auth: true
starttls.enable: true
host: <your exchange server>
port: 587
user: <email address of service account> <2>
password: <password>
--------------------------------------------------
<1> Some organizations configure Exchange to validate that the `from` field is a
valid local email account.
<2> Many organizations support use of your email address as your username, though
it is a good idea to check with your system administrator if you receive
authentication-related failures.
[float]
[[email-html-sanitization]]
===== Configuring HTML Sanitization Options
The `email` action supports sending messages with an HTML body. However, for
security reasons, {watcher} https://en.wikipedia.org/wiki/HTML_sanitization[sanitizes]
the HTML.
You can control which HTML features are allowed or disallowed by configuring the
`xpack.notification.email.html.sanitization.allow` and
`xpack.notification.email.html.sanitization.disallow` settings in
`elasticsearch.yml`. You can specify individual HTML elements and
{ref}/notification-settings.html#html-feature-groups[HTML feature groups]. By default, {watcher} allows the following
features: `body`, `head`, `_tables`, `_links`, `_blocks`, `_formatting` and
`img:embedded`.
For example, the following settings allow the HTML to contain tables and block
elements, but disallow `<h4>`, `<h5>` and `<h6>` tags.
[source,yaml]
--------------------------------------------------
xpack.notification.email.html.sanitization:
allow: _tables, _blocks
disallow: h4, h5, h6
--------------------------------------------------
To disable sanitization entirely, add the following setting to
`elasticsearch.yml`:
[source,yaml]
--------------------------------------------------
xpack.notification.email.html.sanitization.enabled: false
--------------------------------------------------