logstash-output-email 4.0.6 → 4.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/CHANGELOG.md +5 -0
- data/LICENSE +1 -1
- data/docs/index.asciidoc +21 -0
- data/lib/logstash/outputs/email.rb +28 -6
- data/logstash-output-email.gemspec +5 -2
- data/spec/fixtures/template.mustache +1 -0
- data/spec/outputs/email_spec.rb +15 -0
- data/spec/spec_helper.rb +14 -0
- metadata +37 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: fba3309aa6431187a31571b6db5ffeb5efd80c988b0a6ddf04c81b0646b6d46f
|
4
|
+
data.tar.gz: e0be2186cdb511b14a10a8d0489583a09d3262d5cc36b13c01eb7466b508d6f9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ce3eeebfcc341aa54ae7f4b6345884e98f220c95f92c45d0f15c88ac281711aaf5bb8812265ac9f91a3d2560e3cdaf595fbfee0665581710844f4843f22cbfa0
|
7
|
+
data.tar.gz: 6fc5516f97137e2d5030ae08021fcb3d3e18186167ce767764710ef40e91dcf093eac0c3346e8e6211aceb4ef1494395418f1bcc252f1a2bfc88826ef567227e
|
data/CHANGELOG.md
CHANGED
data/LICENSE
CHANGED
data/docs/index.asciidoc
CHANGED
@@ -33,6 +33,7 @@ output {
|
|
33
33
|
from => 'monitor@example.com'
|
34
34
|
subject => 'Alert - %{title}'
|
35
35
|
body => "Tags: %{tags}\\n\\Content:\\n%{message}"
|
36
|
+
template_file => "/tmp/email_template.mustache"
|
36
37
|
domain => 'mail.example.com'
|
37
38
|
port => 25
|
38
39
|
}
|
@@ -53,6 +54,7 @@ This plugin supports the following configuration options plus the <<plugins-{typ
|
|
53
54
|
| <<plugins-{type}s-{plugin}-authentication>> |<<string,string>>|No
|
54
55
|
| <<plugins-{type}s-{plugin}-body>> |<<string,string>>|No
|
55
56
|
| <<plugins-{type}s-{plugin}-cc>> |<<string,string>>|No
|
57
|
+
| <<plugins-{type}s-{plugin}-bcc>> |<<string,string>>|No
|
56
58
|
| <<plugins-{type}s-{plugin}-contenttype>> |<<string,string>>|No
|
57
59
|
| <<plugins-{type}s-{plugin}-debug>> |<<boolean,boolean>>|No
|
58
60
|
| <<plugins-{type}s-{plugin}-domain>> |<<string,string>>|No
|
@@ -66,6 +68,7 @@ This plugin supports the following configuration options plus the <<plugins-{typ
|
|
66
68
|
| <<plugins-{type}s-{plugin}-use_tls>> |<<boolean,boolean>>|No
|
67
69
|
| <<plugins-{type}s-{plugin}-username>> |<<string,string>>|No
|
68
70
|
| <<plugins-{type}s-{plugin}-via>> |<<string,string>>|No
|
71
|
+
| <<plugins-{type}s-{plugin}-template_file>> |<<path,path>>|No
|
69
72
|
|=======================================================================
|
70
73
|
|
71
74
|
Also see <<plugins-{type}s-{plugin}-common-options>> for a list of options supported by all
|
@@ -116,6 +119,16 @@ The fully-qualified email address(es) to include as cc: address(es).
|
|
116
119
|
This field also accepts a comma-separated string of addresses, for example:
|
117
120
|
`"me@example.com, you@example.com"`
|
118
121
|
|
122
|
+
[id="plugins-{type}s-{plugin}-bcc"]
|
123
|
+
===== `bcc`
|
124
|
+
|
125
|
+
* Value type is <<string,string>>
|
126
|
+
* There is no default value for this setting.
|
127
|
+
|
128
|
+
The fully-qualified email address(es) to include as bcc: address(es).
|
129
|
+
|
130
|
+
This field accepts several addresses like cc.
|
131
|
+
|
119
132
|
[id="plugins-{type}s-{plugin}-contenttype"]
|
120
133
|
===== `contenttype`
|
121
134
|
|
@@ -229,6 +242,14 @@ Username to authenticate with the server
|
|
229
242
|
|
230
243
|
How Logstash should send the email, either via SMTP or by invoking sendmail.
|
231
244
|
|
245
|
+
[id="plugins-{type}s-{plugin}-template_file"]
|
246
|
+
===== `template_file`
|
247
|
+
|
248
|
+
* Value type is <<path,path>>
|
249
|
+
* There is no default value for this setting.
|
250
|
+
|
251
|
+
Path of a [Mustache templating](https://mustache.github.io/) file used for email templating. See example in test fixture.
|
252
|
+
Can be used with `body` to send multi-part emails. Takes precedence over `htmlBody`.
|
232
253
|
|
233
254
|
|
234
255
|
[id="plugins-{type}s-{plugin}-common-options"]
|
@@ -46,6 +46,9 @@ class LogStash::Outputs::Email < LogStash::Outputs::Base
|
|
46
46
|
# This field also accepts a comma-separated string of addresses, for example:
|
47
47
|
# `"me@example.com, you@example.com"`
|
48
48
|
config :cc, :validate => :string
|
49
|
+
|
50
|
+
# Same as cc but in blind carbon
|
51
|
+
config :bcc, :validate => :string
|
49
52
|
|
50
53
|
# How Logstash should send the email, either via SMTP or by invoking sendmail.
|
51
54
|
config :via, :validate => :string, :default => "smtp"
|
@@ -80,6 +83,9 @@ class LogStash::Outputs::Email < LogStash::Outputs::Base
|
|
80
83
|
# Body for the email - plain text only.
|
81
84
|
config :body, :validate => :string, :default => ""
|
82
85
|
|
86
|
+
# Email template file to be used - as mustache template.
|
87
|
+
config :template_file, :validate => :path
|
88
|
+
|
83
89
|
# HTML Body for the email, which may contain HTML markup.
|
84
90
|
config :htmlbody, :validate => :string, :default => ""
|
85
91
|
|
@@ -93,6 +99,7 @@ class LogStash::Outputs::Email < LogStash::Outputs::Base
|
|
93
99
|
public
|
94
100
|
def register
|
95
101
|
require "mail"
|
102
|
+
require "mustache"
|
96
103
|
|
97
104
|
options = {
|
98
105
|
:address => @address,
|
@@ -118,6 +125,7 @@ class LogStash::Outputs::Email < LogStash::Outputs::Base
|
|
118
125
|
delivery_method :@via, options
|
119
126
|
end
|
120
127
|
end # @via tests
|
128
|
+
@htmlTemplate = File.open(@template_file, "r").read unless @template_file.nil?
|
121
129
|
@logger.debug("Email Output Registered!", :config => options, :via => @via)
|
122
130
|
end # def register
|
123
131
|
|
@@ -125,10 +133,11 @@ class LogStash::Outputs::Email < LogStash::Outputs::Base
|
|
125
133
|
def receive(event)
|
126
134
|
|
127
135
|
|
128
|
-
@logger.debug? and @logger.debug("Creating mail with these settings : ", :via => @via, :options => @options, :from => @from, :to => @to, :cc => @cc, :subject => @subject, :body => @body, :content_type => @contenttype, :htmlbody => @htmlbody, :attachments => @attachments
|
136
|
+
@logger.debug? and @logger.debug("Creating mail with these settings : ", :via => @via, :options => @options, :from => @from, :to => @to, :cc => @cc, :bcc => @bcc, :subject => @subject, :body => @body, :content_type => @contenttype, :htmlbody => @htmlbody, :attachments => @attachments)
|
129
137
|
formatedSubject = event.sprintf(@subject)
|
130
138
|
formattedBody = event.sprintf(@body)
|
131
139
|
formattedHtmlBody = event.sprintf(@htmlbody)
|
140
|
+
|
132
141
|
mail = Mail.new
|
133
142
|
mail.from = event.sprintf(@from)
|
134
143
|
mail.to = event.sprintf(@to)
|
@@ -136,25 +145,38 @@ class LogStash::Outputs::Email < LogStash::Outputs::Base
|
|
136
145
|
mail.reply_to = event.sprintf(@replyto)
|
137
146
|
end
|
138
147
|
mail.cc = event.sprintf(@cc)
|
148
|
+
mail.bcc = event.sprintf(@bcc)
|
139
149
|
mail.subject = formatedSubject
|
140
|
-
|
150
|
+
|
151
|
+
if @htmlbody.empty? and @template_file.nil?
|
141
152
|
formattedBody.gsub!(/\\n/, "\n") # Take new line in the email
|
142
153
|
mail.body = formattedBody
|
143
154
|
else
|
155
|
+
# This handles multipart emails
|
156
|
+
# cf: https://github.com/mikel/mail/#writing-and-sending-a-multipartalternative-html-and-text-email
|
144
157
|
mail.text_part = Mail::Part.new do
|
145
158
|
content_type "text/plain; charset=UTF-8"
|
146
159
|
formattedBody.gsub!(/\\n/, "\n") # Take new line in the email
|
147
160
|
body formattedBody
|
148
161
|
end
|
149
|
-
|
150
|
-
|
151
|
-
|
162
|
+
|
163
|
+
if @template_file.nil?
|
164
|
+
mail.html_part = Mail::Part.new do
|
165
|
+
content_type "text/html; charset=UTF-8"
|
166
|
+
body formattedHtmlBody
|
167
|
+
end
|
168
|
+
else
|
169
|
+
templatedHtmlBody = Mustache.render(@htmlTemplate, event.to_hash)
|
170
|
+
mail.html_part = Mail::Part.new do
|
171
|
+
content_type "text/html; charset=UTF-8"
|
172
|
+
body templatedHtmlBody
|
173
|
+
end
|
152
174
|
end
|
153
175
|
end
|
154
176
|
@attachments.each do |fileLocation|
|
155
177
|
mail.add_file(fileLocation)
|
156
178
|
end # end @attachments.each
|
157
|
-
@logger.debug? and @logger.debug("Sending mail with these values : ", :from => mail.from, :to => mail.to, :cc => mail.cc, :subject => mail.subject)
|
179
|
+
@logger.debug? and @logger.debug("Sending mail with these values : ", :from => mail.from, :to => mail.to, :cc => mail.cc, :bcc => mail.bcc, :subject => mail.subject)
|
158
180
|
begin
|
159
181
|
mail.deliver!
|
160
182
|
rescue StandardError => e
|
@@ -1,9 +1,9 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
|
3
3
|
s.name = 'logstash-output-email'
|
4
|
-
s.version = '4.0
|
4
|
+
s.version = '4.1.0'
|
5
5
|
s.licenses = ['Apache License (2.0)']
|
6
|
-
s.summary = "
|
6
|
+
s.summary = "Sends email to a specified address when output is received"
|
7
7
|
s.description = "This gem is a Logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/logstash-plugin install gemname. This gem is not a stand-alone program"
|
8
8
|
s.authors = ["Elastic"]
|
9
9
|
s.email = 'info@elastic.co'
|
@@ -26,9 +26,12 @@ Gem::Specification.new do |s|
|
|
26
26
|
# mime-types >= 3 require ruby 2.0 support
|
27
27
|
s.add_runtime_dependency 'mime-types', '< 3'
|
28
28
|
|
29
|
+
s.add_runtime_dependency 'mustache', '>= 0.99.8'
|
30
|
+
|
29
31
|
s.add_development_dependency 'logstash-devutils'
|
30
32
|
s.add_development_dependency 'rumbster'
|
31
33
|
s.add_development_dependency 'logstash-input-generator'
|
34
|
+
s.add_development_dependency 'gserver'
|
32
35
|
|
33
36
|
end
|
34
37
|
|
@@ -0,0 +1 @@
|
|
1
|
+
<h1>{{message}}</h1>
|
data/spec/outputs/email_spec.rb
CHANGED
@@ -89,5 +89,20 @@ describe "outputs/email" do
|
|
89
89
|
|
90
90
|
end
|
91
91
|
end
|
92
|
+
|
93
|
+
context "mustache template for email body" do
|
94
|
+
it "uses the template file" do
|
95
|
+
subject = plugin.new("to" => "me@host",
|
96
|
+
"subject" => "Hello World",
|
97
|
+
"template_file" => File.dirname(__FILE__) + "/../fixtures/template.mustache",
|
98
|
+
"port" => port)
|
99
|
+
subject.register
|
100
|
+
subject.receive(LogStash::Event.new("message" => "hello"))
|
101
|
+
|
102
|
+
expect(message_observer.messages.size).to eq(1)
|
103
|
+
expect(message_observer.messages[0].subject).to eq("Hello World")
|
104
|
+
expect(message_observer.messages[0].body.decoded).to eq(craft_multi_part_email('', '<h1>hello</h1>', message_observer.messages[0].content_type))
|
105
|
+
end
|
106
|
+
end
|
92
107
|
end
|
93
108
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -12,3 +12,17 @@ class LogStash::Filters::NOOP < LogStash::Filters::Base
|
|
12
12
|
filter_matched(event)
|
13
13
|
end
|
14
14
|
end
|
15
|
+
|
16
|
+
def craft_multi_part_email(body, htmlbody, content_type)
|
17
|
+
charset = "charset=UTF-8"
|
18
|
+
content_encoding = "Content-Transfer-Encoding: 7bit"
|
19
|
+
|
20
|
+
# Have to get the generated part of the header, eg:
|
21
|
+
# --==_mimepart_5a462a1fda04b_efe7d032127
|
22
|
+
mimetype = content_type.split('; ')[1][10..-2]
|
23
|
+
|
24
|
+
plain_header = "\n--#{mimetype}\nContent-Type: text/plain;\n #{charset}\n#{content_encoding}\n\n"
|
25
|
+
html_header = "\n--#{mimetype}\nContent-Type: text/html;\n #{charset}\n#{content_encoding}\n\n"
|
26
|
+
|
27
|
+
"#{plain_header}#{body}#{html_header}#{htmlbody}\n\n--#{mimetype}--\n"
|
28
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logstash-output-email
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.0
|
4
|
+
version: 4.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Elastic
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-01-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
@@ -58,6 +58,20 @@ dependencies:
|
|
58
58
|
- - "<"
|
59
59
|
- !ruby/object:Gem::Version
|
60
60
|
version: '3'
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
requirement: !ruby/object:Gem::Requirement
|
63
|
+
requirements:
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: 0.99.8
|
67
|
+
name: mustache
|
68
|
+
prerelease: false
|
69
|
+
type: :runtime
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: 0.99.8
|
61
75
|
- !ruby/object:Gem::Dependency
|
62
76
|
requirement: !ruby/object:Gem::Requirement
|
63
77
|
requirements:
|
@@ -100,7 +114,23 @@ dependencies:
|
|
100
114
|
- - ">="
|
101
115
|
- !ruby/object:Gem::Version
|
102
116
|
version: '0'
|
103
|
-
|
117
|
+
- !ruby/object:Gem::Dependency
|
118
|
+
requirement: !ruby/object:Gem::Requirement
|
119
|
+
requirements:
|
120
|
+
- - ">="
|
121
|
+
- !ruby/object:Gem::Version
|
122
|
+
version: '0'
|
123
|
+
name: gserver
|
124
|
+
prerelease: false
|
125
|
+
type: :development
|
126
|
+
version_requirements: !ruby/object:Gem::Requirement
|
127
|
+
requirements:
|
128
|
+
- - ">="
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
version: '0'
|
131
|
+
description: This gem is a Logstash plugin required to be installed on top of the
|
132
|
+
Logstash core pipeline using $LS_HOME/bin/logstash-plugin install gemname. This
|
133
|
+
gem is not a stand-alone program
|
104
134
|
email: info@elastic.co
|
105
135
|
executables: []
|
106
136
|
extensions: []
|
@@ -115,6 +145,7 @@ files:
|
|
115
145
|
- docs/index.asciidoc
|
116
146
|
- lib/logstash/outputs/email.rb
|
117
147
|
- logstash-output-email.gemspec
|
148
|
+
- spec/fixtures/template.mustache
|
118
149
|
- spec/outputs/email_spec.rb
|
119
150
|
- spec/spec_helper.rb
|
120
151
|
homepage: http://www.elastic.co/guide/en/logstash/current/index.html
|
@@ -139,10 +170,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
139
170
|
version: '0'
|
140
171
|
requirements: []
|
141
172
|
rubyforge_project:
|
142
|
-
rubygems_version: 2.
|
173
|
+
rubygems_version: 2.6.13
|
143
174
|
signing_key:
|
144
175
|
specification_version: 4
|
145
|
-
summary:
|
176
|
+
summary: Sends email to a specified address when output is received
|
146
177
|
test_files:
|
178
|
+
- spec/fixtures/template.mustache
|
147
179
|
- spec/outputs/email_spec.rb
|
148
180
|
- spec/spec_helper.rb
|