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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 796bc0c80400fcd45375ea26449505f08d81d038
4
- data.tar.gz: a5c5434cfa5c1151c45d5360e3e7ed0733344303
2
+ SHA256:
3
+ metadata.gz: fba3309aa6431187a31571b6db5ffeb5efd80c988b0a6ddf04c81b0646b6d46f
4
+ data.tar.gz: e0be2186cdb511b14a10a8d0489583a09d3262d5cc36b13c01eb7466b508d6f9
5
5
  SHA512:
6
- metadata.gz: 529802062bddd74474e4ac650325f11b4a3faf9c761cb12650fafe75893c829b3eaa228e81733d8591cae27508633101f362d88d7896408d208efce2663d9faf
7
- data.tar.gz: 59d87114214f143c85ca720a8f7e74395ef29729a1cf81cb975c0f5e317552cbabfa16b391512cc1412a444f5dfa1df4e7522dece82d8aea14415ed4fc5533c9
6
+ metadata.gz: ce3eeebfcc341aa54ae7f4b6345884e98f220c95f92c45d0f15c88ac281711aaf5bb8812265ac9f91a3d2560e3cdaf595fbfee0665581710844f4843f22cbfa0
7
+ data.tar.gz: 6fc5516f97137e2d5030ae08021fcb3d3e18186167ce767764710ef40e91dcf093eac0c3346e8e6211aceb4ef1494395418f1bcc252f1a2bfc88826ef567227e
@@ -1,3 +1,8 @@
1
+ ## 4.1.0
2
+ - Update gemspec summary
3
+ - Add bcc suport #55
4
+ - Add mustache templating #51
5
+
1
6
  ## 4.0.6
2
7
  - Fix some documentation issues
3
8
 
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2012–2016 Elasticsearch <http://www.elastic.co>
1
+ Copyright (c) 2012-2018 Elasticsearch <http://www.elastic.co>
2
2
 
3
3
  Licensed under the Apache License, Version 2.0 (the "License");
4
4
  you may not use this file except in compliance with the License.
@@ -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, :to => to, :to => to)
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
- if @htmlbody.empty?
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
- mail.html_part = Mail::Part.new do
150
- content_type "text/html; charset=UTF-8"
151
- body formattedHtmlBody
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.6'
4
+ s.version = '4.1.0'
5
5
  s.licenses = ['Apache License (2.0)']
6
- s.summary = "Send email when an output is received."
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>
@@ -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
@@ -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.6
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: 2017-08-16 00:00:00.000000000 Z
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
- 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
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.4.8
173
+ rubygems_version: 2.6.13
143
174
  signing_key:
144
175
  specification_version: 4
145
- summary: Send email when an output is received.
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