Commit a37a95ff6fe881bde453bf290f96c02c91e062dd

Authored by Gabriel Mazetto
1 parent abc10614
Exists in master and in 1 other branch production

Added Email Headers with lots of metadata

Added a shared_example to handle default specs for emails
app/mailers/mailer.rb
@@ -6,7 +6,12 @@ class Mailer < ActionMailer::Base @@ -6,7 +6,12 @@ class Mailer < ActionMailer::Base
6 helper ApplicationHelper 6 helper ApplicationHelper
7 helper BacktraceLineHelper 7 helper BacktraceLineHelper
8 8
9 - default :from => Errbit::Config.email_from 9 + default :from => Errbit::Config.email_from,
  10 + 'X-Errbit-Host' => Errbit::Config.host,
  11 + 'X-Mailer' => 'Errbit',
  12 + 'X-Auto-Response-Suppress' => 'OOF, AutoReply',
  13 + 'Precedence' => 'bulk',
  14 + 'Auto-Submitted' => 'auto-generated'
10 15
11 def err_notification(notice) 16 def err_notification(notice)
12 @notice = notice 17 @notice = notice
@@ -15,6 +20,10 @@ class Mailer < ActionMailer::Base @@ -15,6 +20,10 @@ class Mailer < ActionMailer::Base
15 count = @notice.similar_count 20 count = @notice.similar_count
16 count = count > 1 ? "(#{count}) " : "" 21 count = count > 1 ? "(#{count}) " : ""
17 22
  23 + errbit_headers 'App' => @app.name,
  24 + 'Environment' => @notice.environment_name,
  25 + 'Error-Id' => @notice.err_id
  26 +
18 mail :to => @app.notification_recipients, 27 mail :to => @app.notification_recipients,
19 :subject => "#{count}[#{@app.name}][#{@notice.environment_name}] #{@notice.message.truncate(50)}" 28 :subject => "#{count}[#{@app.name}][#{@notice.environment_name}] #{@notice.message.truncate(50)}"
20 end 29 end
@@ -23,6 +32,11 @@ class Mailer < ActionMailer::Base @@ -23,6 +32,11 @@ class Mailer < ActionMailer::Base
23 @deploy = deploy 32 @deploy = deploy
24 @app = deploy.app 33 @app = deploy.app
25 34
  35 + errbit_headers 'App' => @app.name,
  36 + 'Environment' => @deploy.environment,
  37 + 'Deploy-Revision' => @deploy.revision,
  38 + 'Deploy-User' => @deploy.username
  39 +
26 mail :to => @app.notification_recipients, 40 mail :to => @app.notification_recipients,
27 :subject => "[#{@app.name}] Deployed to #{@deploy.environment} by #{@deploy.username}" 41 :subject => "[#{@app.name}] Deployed to #{@deploy.environment} by #{@deploy.username}"
28 end 42 end
@@ -36,7 +50,18 @@ class Mailer < ActionMailer::Base @@ -36,7 +50,18 @@ class Mailer < ActionMailer::Base
36 50
37 recipients = @comment.notification_recipients 51 recipients = @comment.notification_recipients
38 52
  53 + errbit_headers 'App' => @app.name,
  54 + 'Environment' => @notice.environment_name,
  55 + 'Problem-Id' => @problem.problem_id,
  56 + 'Comment-Author' => @user.name
  57 +
39 mail :to => recipients, 58 mail :to => recipients,
40 :subject => "#{@user.name} commented on [#{@app.name}][#{@notice.environment_name}] #{@notice.message.truncate(50)}" 59 :subject => "#{@user.name} commented on [#{@app.name}][#{@notice.environment_name}] #{@notice.message.truncate(50)}"
41 end 60 end
  61 +
  62 + private
  63 +
  64 + def errbit_headers(header)
  65 + header.each { |key,value| headers["X-Errbit-#{key}"] = value.to_s }
  66 + end
42 end 67 end
spec/mailers/mailer_spec.rb
1 require 'spec_helper' 1 require 'spec_helper'
2 2
  3 +shared_examples "a notification email" do
  4 + it "should have X-Mailer header" do
  5 + expect(@email).to have_header('X-Mailer', 'Errbit')
  6 + end
  7 +
  8 + it "should have X-Errbit-Host header" do
  9 + expect(@email).to have_header('X-Errbit-Host', Errbit::Config.host)
  10 + end
  11 +
  12 + it "should have Precedence header" do
  13 + expect(@email).to have_header('Precedence', 'bulk')
  14 + end
  15 +
  16 + it "should have Auto-Submitted header" do
  17 + expect(@email).to have_header('Auto-Submitted', 'auto-generated')
  18 + end
  19 +
  20 + it "should have X-Auto-Response-Suppress header" do
  21 + # http://msdn.microsoft.com/en-us/library/ee219609(v=EXCHG.80).aspx
  22 + expect(@email).to have_header('X-Auto-Response-Suppress', 'OOF, AutoReply')
  23 + end
  24 +
  25 + it "should send the email" do
  26 + expect(ActionMailer::Base.deliveries.size).to eq 1
  27 + end
  28 +end
  29 +
3 describe Mailer do 30 describe Mailer do
4 context "Err Notification" do 31 context "Err Notification" do
5 include EmailSpec::Helpers 32 include EmailSpec::Helpers
@@ -19,9 +46,8 @@ describe Mailer do @@ -19,9 +46,8 @@ describe Mailer do
19 @email = Mailer.err_notification(notice).deliver 46 @email = Mailer.err_notification(notice).deliver
20 end 47 end
21 48
22 - it "should send the email" do  
23 - expect(ActionMailer::Base.deliveries.size).to eq 1  
24 - end 49 + it_should_behave_like "a notification email"
  50 +
25 51
26 it "should html-escape the notice's message for the html part" do 52 it "should html-escape the notice's message for the html part" do
27 expect(@email).to have_body_text("class < ActionController::Base") 53 expect(@email).to have_body_text("class < ActionController::Base")
@@ -62,10 +88,6 @@ describe Mailer do @@ -62,10 +88,6 @@ describe Mailer do
62 @email = Mailer.comment_notification(comment).deliver 88 @email = Mailer.comment_notification(comment).deliver
63 end 89 end
64 90
65 - it "should send the email" do  
66 - expect(ActionMailer::Base.deliveries.size).to eq 1  
67 - end  
68 -  
69 it "should be sent to comment notification recipients" do 91 it "should be sent to comment notification recipients" do
70 expect(@email.to).to eq recipients 92 expect(@email.to).to eq recipients
71 end 93 end