mail_plugger 1.0.0 → 1.0.1

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.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +5 -0
  3. data/README.md +1 -1
  4. data/lib/mail_plugger/version.rb +1 -1
  5. metadata +6 -41
  6. data/.github/ISSUE_TEMPLATE/bug_report.md +0 -22
  7. data/.github/ISSUE_TEMPLATE/feature_request.md +0 -16
  8. data/.gitignore +0 -11
  9. data/.rspec +0 -3
  10. data/.rubocop.yml +0 -53
  11. data/.travis.yml +0 -22
  12. data/Appraisals +0 -13
  13. data/CODE_OF_CONDUCT.md +0 -14
  14. data/CONTRIBUTING.md +0 -26
  15. data/Gemfile +0 -18
  16. data/Gemfile.lock +0 -81
  17. data/Rakefile +0 -11
  18. data/bin/console +0 -17
  19. data/bin/setup +0 -8
  20. data/docs/usage_in_ruby_on_rails.md +0 -182
  21. data/docs/usage_in_script_or_console.md +0 -158
  22. data/docs/usage_of_attachments_in_ruby_on_rails.md +0 -110
  23. data/docs/usage_of_aws_ses_in_ruby_on_rails.md +0 -136
  24. data/docs/usage_of_delivery_method.md +0 -104
  25. data/docs/usage_of_mailgun_in_ruby_on_rails.md +0 -58
  26. data/docs/usage_of_mandrill_in_ruby_on_rails.md +0 -104
  27. data/docs/usage_of_more_delivery_system_in_ruby_on_rails.md +0 -332
  28. data/docs/usage_of_one_delivery_system_with_more_send_methods_in_ruby_on_rails.md +0 -119
  29. data/docs/usage_of_plug_in_method.md +0 -62
  30. data/docs/usage_of_postmark_in_ruby_on_rails.md +0 -59
  31. data/docs/usage_of_secial_options_in_ruby_on_rails.md +0 -90
  32. data/docs/usage_of_sendgrid_in_ruby_on_rails.md +0 -82
  33. data/docs/usage_of_sparkpost_in_ruby_on_rails.md +0 -142
  34. data/gemfiles/.bundle/config +0 -2
  35. data/gemfiles/mail_2.6.gemfile +0 -14
  36. data/gemfiles/mail_2.6.gemfile.lock +0 -84
  37. data/gemfiles/mail_2.7.0.gemfile +0 -14
  38. data/gemfiles/mail_2.7.0.gemfile.lock +0 -82
  39. data/gemfiles/mail_2.7.gemfile +0 -14
  40. data/gemfiles/mail_2.7.gemfile.lock +0 -82
  41. data/images/mail_plugger.png +0 -0
  42. data/mail_plugger.gemspec +0 -40
@@ -1,136 +0,0 @@
1
- # How to use AWS SES with MailPlugger in Ruby on Rails
2
-
3
- **Please note that these examples were not tested, but I believe it should work.**
4
-
5
- Let's use mailer method which was defined [here](https://github.com/norbertszivos/mail_plugger/blob/main/docs/usage_in_ruby_on_rails.md).
6
-
7
- Add `aws-sdk-gem` to the `Gemfile`.
8
-
9
- ```ruby
10
- gem 'aws-sdk-ses'
11
- ```
12
-
13
- Then run `bundle install` command to deploy the gem.
14
-
15
- ## Send Email
16
-
17
- Change the API and `MailPlugger.plug_in` method in `config/initializers/mail_plugger.rb`.
18
-
19
- ```ruby
20
- class AwsSesApiClient
21
- def initialize(options = {})
22
- @credentials = Aws::Credentials.new(ENV['AWS_ACCESS_KEY_ID'], ENV['AWS_SECRET_ACCESS_KEY'])
23
- @region = ENV['AWS_DEFAULT_REGION']
24
- @options = options
25
- end
26
-
27
- def deliver
28
- Aws::SES::Client.new(credentials: @credentials, region: @region).send_email(generate_mail_hash)
29
- end
30
-
31
- private
32
-
33
- def generate_mail_hash
34
- {
35
- source: @options[:from].first,
36
- destination: {
37
- to_addresses: @options[:to]
38
- },
39
- message: {
40
- subject: {
41
- charset: 'UTF-8',
42
- data: @options[:subject]
43
- },
44
- body: {
45
- text: {
46
- charset: 'UTF-8',
47
- data: @options[:text_part]
48
- },
49
- html: {
50
- charset: 'UTF-8',
51
- data: @options[:html_part]
52
- }
53
- }
54
- },
55
- tags: [
56
- {
57
- name: @options[:message_obj].delivery_handler.to_s,
58
- value: @options[:tag]
59
- }
60
- ],
61
- configuration_set_name: @options[:configuration_set_name]
62
- }
63
- end
64
- end
65
-
66
- MailPlugger.plug_in('aws_ses') do |api|
67
- api.delivery_options = %i[from to subject text_part html_part message_obj tag configuration_set_name]
68
- api.delivery_settings = { return_response: true }
69
- api.client = AwsSesApiClient
70
- end
71
- ```
72
-
73
- Then modify the mailer method a little bit.
74
-
75
- ```ruby
76
- class TestMailer < ApplicationMailer
77
- default from: 'from@example.com'
78
-
79
- def send_test
80
- mail subject: 'Test email', to: 'to@example.com', delivery_system: 'aws_ses', tag: 'send_test', configuration_set_name: "#{Rails.env}_events_tracking"
81
- end
82
- end
83
- ```
84
-
85
- ## Send Raw Email
86
-
87
- Change the API and `MailPlugger.plug_in` method in `config/initializers/mail_plugger.rb`.
88
-
89
- ```ruby
90
- class AwsSesApiClient
91
- def initialize(options = {})
92
- @credentials = Aws::Credentials.new(ENV['AWS_ACCESS_KEY_ID'], ENV['AWS_SECRET_ACCESS_KEY'])
93
- @region = ENV['AWS_DEFAULT_REGION']
94
- @options = options
95
- end
96
-
97
- def deliver
98
- Aws::SES::Client.new(credentials: @credentials, region: @region).send_raw_email(generate_mail_hash)
99
- end
100
-
101
- private
102
-
103
- def generate_mail_hash
104
- {
105
- raw_message: {
106
- data: @options[:message_obj].to_s
107
- },
108
- tags: [
109
- {
110
- name: @options[:message_obj].delivery_handler.to_s,
111
- value: @options[:tag]
112
- }
113
- ],
114
- configuration_set_name: @options[:configuration_set_name]
115
- }
116
- end
117
- end
118
-
119
- MailPlugger.plug_in('aws_ses') do |api|
120
- api.delivery_options = %i[message_obj tag configuration_set_name]
121
- api.delivery_settings = { return_response: true }
122
- api.client = AwsSesApiClient
123
- end
124
- ```
125
-
126
- Then modify the mailer method a little bit.
127
-
128
- ```ruby
129
- class TestMailer < ApplicationMailer
130
- default from: 'from@example.com'
131
-
132
- def send_test
133
- mail subject: 'Test email', to: 'to@example.com', delivery_system: 'aws_ses', tag: 'send_test', configuration_set_name: "#{Rails.env}_events_tracking"
134
- end
135
- end
136
- ```
@@ -1,104 +0,0 @@
1
- # How to use MailPlugger::DeliveryMethod class
2
-
3
- With this class it can extract data from the Mail::Message object and send message based on the given configurations. We can add these options directly in the `new` method or we can use `MailPlugger.plug_in` method as well.
4
-
5
- The `new` method parameter is a Hash where the keys are Symbols.
6
-
7
- Hash parameters:
8
- - `client` which should be a Class (It can be a Hash with this Class as well. In this case the key of the Hash is the `delivery_system` from the `Mail::Message` object or the `default_delivery_system`). This Class is a special class which generates the data and calls the API to send the message.
9
- - `delivery_options` which should be an Array with Symbols or Strings (It can be a Hash with this Array as well. In this case the key of the Hash is the `delivery_system` from the `Mail::Message` object or the `default_delivery_system`). It will search these options in the `Mail::Message` object like `from`, `to`, `cc`, `bcc`, `subject`, `body`, `text_part`, `html_part`, `attachments` or anything what we will add to this object. Also we can retrieve the `Mail::Message` object with `message_obj`.
10
- - `delivery_settings` which should be a Hash. The Mail gem can use these settings like `{ return_response: true }` (The keys are should be Symbols).
11
- - `default_delivery_system` which should be a String or Symbol. This option is needed when `delivery_options` and `client` are Hashes. When `delivery_system` in the `Mail::Message` object is not defined then the `default_delivery_system` value is the key of those Hashes. When `default_delivery_system` is not defined then `default_delivery_system_get` will return with the first key of `delivery_options` or `client` Hash.
12
-
13
- Examples:
14
-
15
- ```ruby
16
- # NOTE: This is just an example for testing...
17
- class TestApiClientClass
18
- def initialize(options = {})
19
- @settings = { api_key: '12345' }
20
- @options = options
21
- end
22
-
23
- def deliver
24
- # e.g. API.new(@settings).client.post(generate_mail_hash)
25
- puts " >>> settings: #{@settings.inspect}"
26
- puts " >>> options: #{@options.inspect}"
27
- puts " >>> generate_mail_hash: #{generate_mail_hash.inspect}"
28
- { response: 'OK' }
29
- end
30
-
31
- private
32
-
33
- def generate_mail_hash
34
- {
35
- to: generate_recipients,
36
- from: {
37
- email: @options[:from].first
38
- },
39
- subject: @options[:subject],
40
- content: [
41
- {
42
- type: 'text/plain',
43
- value: @options[:body]
44
- }
45
- ]
46
- }
47
- end
48
-
49
- def generate_recipients
50
- @options[:to].map do |to|
51
- {
52
- email: to
53
- }
54
- end
55
- end
56
- end
57
- ```
58
-
59
- We can add simple options to `MailPlugger::DeliveryMethod`.
60
-
61
- ```ruby
62
- message = Mail.new(from: 'from@example.com', to: 'to@example.com', subject: 'Test email', body: 'Test email body')
63
-
64
- MailPlugger::DeliveryMethod.new(delivery_options: %i[from to subject body], client: TestApiClientClass).deliver!(message)
65
- ```
66
-
67
- Or we can add these options in Hash and set `default_delivery_system`.
68
-
69
- ```ruby
70
- message = Mail.new(from: 'from@example.com', to: 'to@example.com', subject: 'Test email', body: 'Test email body')
71
-
72
- MailPlugger::DeliveryMethod.new(delivery_options: { 'test_api_client' => %i[from to subject body] }, client: { 'test_api_client' => TestApiClientClass }, default_delivery_system: 'test_api_client').deliver!(message)
73
- ```
74
-
75
- Add `delivery_system` in the `Mail::Message` object (it will search this value in the given Hash). The `delivery_system` type in the `Mail::Message` object should match with the given key type of the Hash (if `delivery_system` is String then Hash key should String as well).
76
-
77
- ```ruby
78
- message = Mail.new(from: 'from@example.com', to: 'to@example.com', subject: 'Test email', body: 'Test email body', delivery_system: 'test_api_client')
79
-
80
- MailPlugger::DeliveryMethod.new(delivery_options: { 'test_api_client' => %i[from to subject body] }, client: { 'test_api_client' => TestApiClientClass }).deliver!(message)
81
- ```
82
-
83
- If we are not adding `delivery_system` anywhere then it will use the first key of the Hash.
84
-
85
- ```ruby
86
- message = Mail.new(from: 'from@example.com', to: 'to@example.com', subject: 'Test email', body: 'Test email body')
87
-
88
- MailPlugger::DeliveryMethod.new(delivery_options: { 'test_api_client' => %i[from to subject body] }, client: { 'test_api_client' => TestApiClientClass }).deliver!(message)
89
- ```
90
-
91
- We can use `MailPlugger.plug_in` to add our configurations.
92
-
93
- ```ruby
94
- MailPlugger.plug_in('test_api_client') do |api|
95
- api.delivery_options = %i[from to subject body]
96
- api.client = TestApiClientClass
97
- end
98
-
99
- message = Mail.new(from: 'from@example.com', to: 'to@example.com', subject: 'Test email', body: 'Test email body')
100
-
101
- MailPlugger::DeliveryMethod.new.deliver!(message)
102
- ```
103
-
104
- If we are using `mail_plugger` gem in Ruby on Rails we don't have to do anything with this class. Rails will load this method automatically. Basically we should use `MailPlugger.plug_in` method to configure this delivery method.
@@ -1,58 +0,0 @@
1
- # How to use Mailgun with MailPlugger in Ruby on Rails
2
-
3
- **Please note that these examples were not tested, but I believe it should work.**
4
-
5
- Let's use mailer method which was defined [here](https://github.com/norbertszivos/mail_plugger/blob/main/docs/usage_in_ruby_on_rails.md).
6
-
7
- Add `mailgun-ruby` to the `Gemfile`.
8
-
9
- ```ruby
10
- gem 'mailgun-ruby'
11
- ```
12
-
13
- Then run `bundle install` command to deploy the gem.
14
-
15
- Change the API and `MailPlugger.plug_in` method in `config/initializers/mail_plugger.rb`.
16
-
17
- ```ruby
18
- class MailgunApiClient
19
- def initialize(options = {})
20
- @settings = { api_key: ENV['MAILGUN_API_KEY'] }
21
- @options = options
22
- end
23
-
24
- def deliver
25
- Mailgun::Client.new(@settings[:api_key]).send_message('sending_domain.com', generate_mail_hash)
26
- end
27
-
28
- private
29
-
30
- def generate_mail_hash
31
- {
32
- from: @options[:from].first,
33
- to: @options[:to].join(','),
34
- subject: @options[:subject],
35
- text: @options[:text_part],
36
- html: @options[:html_part]
37
- }
38
- end
39
- end
40
-
41
- MailPlugger.plug_in('mailgun') do |api|
42
- api.delivery_options = %i[from to subject text_part html_part]
43
- api.delivery_settings = { return_response: true }
44
- api.client = MailgunApiClient
45
- end
46
- ```
47
-
48
- Then modify the mailer method a little bit.
49
-
50
- ```ruby
51
- class TestMailer < ApplicationMailer
52
- default from: 'from@example.com'
53
-
54
- def send_test
55
- mail subject: 'Test email', to: 'to@example.com', delivery_system: 'mailgun'
56
- end
57
- end
58
- ```
@@ -1,104 +0,0 @@
1
- # How to use Mandrill with MailPlugger in Ruby on Rails
2
-
3
- **Please note that these examples were not tested, but I believe it should work.**
4
-
5
- Let's use mailer method which was defined [here](https://github.com/norbertszivos/mail_plugger/blob/main/docs/usage_in_ruby_on_rails.md).
6
-
7
- Add `mandrill-api-json` to the `Gemfile`.
8
-
9
- ```ruby
10
- gem 'mandrill-api-json'
11
- ```
12
-
13
- Then run `bundle install` command to deploy the gem.
14
-
15
- ## Send
16
-
17
- Change the API and `MailPlugger.plug_in` method in `config/initializers/mail_plugger.rb`.
18
-
19
- ```ruby
20
- class MandrillApiClient
21
- def initialize(options = {})
22
- @settings = { api_key: ENV['MANDRILL_API_KEY'] }
23
- @options = options
24
- end
25
-
26
- def deliver
27
- Mandrill::API.new(@settings[:api_key]).messages.send(generate_mail_hash)
28
- end
29
-
30
- private
31
-
32
- def generate_mail_hash
33
- {
34
- from_email: @options[:from].first,
35
- to: generate_recipients,
36
- subject: @options[:subject],
37
- text: @options[:text_part],
38
- html: @options[:html_part],
39
- tags: [@options[:tag]]
40
- }
41
- end
42
-
43
- def generate_recipients
44
- @options[:to].map do |to|
45
- {
46
- email: to
47
- }
48
- end
49
- end
50
- end
51
-
52
- MailPlugger.plug_in('mandrill') do |api|
53
- api.delivery_options = %i[from to subject text_part html_part tag]
54
- api.delivery_settings = { return_response: true }
55
- api.client = MandrillApiClient
56
- end
57
- ```
58
-
59
- Then modify the mailer method a little bit.
60
-
61
- ```ruby
62
- class TestMailer < ApplicationMailer
63
- default from: 'from@example.com'
64
-
65
- def send_test
66
- mail subject: 'Test email', to: 'to@example.com', delivery_system: 'mandrill', tag: 'send_test'
67
- end
68
- end
69
- ```
70
-
71
- ## Send Raw
72
-
73
- Change the API and `MailPlugger.plug_in` method in `config/initializers/mail_plugger.rb`.
74
-
75
- ```ruby
76
- class MandrillApiClient
77
- def initialize(options = {})
78
- @settings = { api_key: ENV['MANDRILL_API_KEY'] }
79
- @options = options
80
- end
81
-
82
- def deliver
83
- Mandrill::API.new(@settings[:api_key]).messages.send_raw(@options[:message_obj].to_s)
84
- end
85
- end
86
-
87
- MailPlugger.plug_in('mandrill') do |api|
88
- api.delivery_options = %i[message_obj]
89
- api.delivery_settings = { return_response: true }
90
- api.client = MandrillApiClient
91
- end
92
- ```
93
-
94
- Then modify the mailer method a little bit.
95
-
96
- ```ruby
97
- class TestMailer < ApplicationMailer
98
- default from: 'from@example.com'
99
-
100
- def send_test
101
- mail subject: 'Test email', to: 'to@example.com', delivery_system: 'mandrill'
102
- end
103
- end
104
- ```
@@ -1,332 +0,0 @@
1
- # How to use more delivey systems in Ruby on Rails
2
-
3
- Let's modify the configuration which was defined [here](https://github.com/norbertszivos/mail_plugger/blob/main/docs/usage_in_ruby_on_rails.md).
4
-
5
- Add a new API Class in `config/initializers/mail_plugger.rb` (you can define it in another place just now it is esasier to do this).
6
-
7
- ```ruby
8
- # NOTE: This is just an example for testing...
9
- class TestApiClientClass
10
- def initialize(options = {})
11
- @settings = { api_key: '12345' }
12
- @options = options
13
- end
14
-
15
- def deliver
16
- # e.g. API.new(@settings).client.post(generate_mail_hash)
17
- puts " >>> settings: #{@settings.inspect}"
18
- puts " >>> options: #{@options.inspect}"
19
- puts " >>> generate_mail_hash: #{generate_mail_hash.inspect}"
20
- { response: 'Message sent via API' }
21
- end
22
-
23
- private
24
-
25
- def generate_mail_hash
26
- {
27
- to: generate_recipients,
28
- from: {
29
- email: @options[:from].first
30
- },
31
- subject: @options[:subject],
32
- content: [
33
- {
34
- type: 'text/plain',
35
- value: @options[:text_part]
36
- },
37
- {
38
- type: 'text/html; charset=UTF-8',
39
- value: @options[:html_part]
40
- }
41
- ]
42
- }
43
- end
44
-
45
- def generate_recipients
46
- @options[:to].map do |to|
47
- {
48
- email: to
49
- }
50
- end
51
- end
52
- end
53
-
54
- class TestApi2ClientClass
55
- def initialize(options = {})
56
- @settings = { api_key: '54321' }
57
- @options = options
58
- end
59
-
60
- def deliver
61
- # e.g. API.new(@settings).client.post(generate_mail_hash)
62
- puts " >>> settings: #{@settings.inspect}"
63
- puts " >>> options: #{@options.inspect}"
64
- puts " >>> generate_mail_hash: #{generate_mail_hash.inspect}"
65
- { response: 'Message sent via API2' }
66
- end
67
-
68
- private
69
-
70
- def generate_mail_hash
71
- {
72
- to: generate_recipients,
73
- from: {
74
- email: @options[:from].first
75
- },
76
- subject: @options[:subject],
77
- content: [
78
- {
79
- type: 'text/plain',
80
- value: @options[:text_part]
81
- },
82
- {
83
- type: 'text/html; charset=UTF-8',
84
- value: @options[:html_part]
85
- }
86
- ]
87
- }
88
- end
89
-
90
- def generate_recipients
91
- @options[:to].map do |to|
92
- {
93
- email: to
94
- }
95
- end
96
- end
97
- end
98
-
99
- MailPlugger.plug_in('test_api_client') do |api|
100
- api.delivery_options = %i[from to subject text_part html_part]
101
- api.delivery_settings = { return_response: true }
102
- api.client = TestApiClientClass
103
- end
104
-
105
- MailPlugger.plug_in('test_api2_client') do |api|
106
- api.delivery_options = %i[from to subject text_part html_part]
107
- api.delivery_settings = { return_response: true }
108
- api.client = TestApi2ClientClass
109
- end
110
- ```
111
-
112
- Then change `app/mailers/test_mailer.rb` file.
113
-
114
- ```ruby
115
- class TestMailer < ApplicationMailer
116
- default from: 'from@example.com'
117
-
118
- def send_test
119
- mail subject: 'Test email', to: 'to@example.com', delivery_system: 'test_api_client'
120
- end
121
-
122
- def send_test2
123
- mail subject: 'Test email', to: 'to@example.com', delivery_system: 'test_api2_client'
124
- end
125
- end
126
- ```
127
-
128
- Then we should add views of the second mailer method, so create `app/views/test_mailer/send_test2.html.erb`
129
-
130
- ```erb
131
- <p>Test email body</p>
132
- ```
133
-
134
- and `app/views/test_mailer/send_test2.text.erb`.
135
-
136
- ```erb
137
- Test email body
138
- ```
139
-
140
- In the `rails console` we can try it out.
141
-
142
- ```ruby
143
- TestMailer.send_test.deliver_now!
144
- # Rendering test_mailer/send_test.html.erb within layouts/mailer
145
- # Rendered test_mailer/send_test.html.erb within layouts/mailer (1.0ms)
146
- # Rendering test_mailer/send_test.text.erb within layouts/mailer
147
- # Rendered test_mailer/send_test.text.erb within layouts/mailer (0.3ms)
148
- #TestMailer#send_test: processed outbound mail in 46.1ms
149
- # >>> settings: {:api_key=>"12345"}
150
- # >>> options: {"from"=>["from@example.com"], "to"=>["to@example.com"], "subject"=>"Test email", "text_part"=>"Test email body\n\n", "html_part"=>"<!DOCTYPE html>\n<html>\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n <style>\n /* Email styles need to be inline */\n </style>\n </head>\n\n <body>\n <p>Test email body</p>\n\n </body>\n</html>\n"}
151
- # >>> generate_mail_hash: {:to=>[{:email=>"to@example.com"}], :from=>{:email=>"from@example.com"}, :subject=>"Test email", :content=>[{:type=>"text/plain", :value=>"Test email body\n\n"}, {:type=>"text/html; charset=UTF-8", :value=>"<!DOCTYPE html>\n<html>\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n <style>\n /* Email styles need to be inline */\n </style>\n </head>\n\n <body>\n <p>Test email body</p>\n\n </body>\n</html>\n"}]}
152
- #=> {:response=>"Message sent via API"}
153
-
154
- TestMailer.send_test2.deliver_now!
155
- # Rendering test_mailer/send_test2.html.erb within layouts/mailer
156
- # Rendered test_mailer/send_test2.html.erb within layouts/mailer (2.6ms)
157
- # Rendering test_mailer/send_test2.text.erb within layouts/mailer
158
- # Rendered test_mailer/send_test2.text.erb within layouts/mailer (0.4ms)
159
- #TestMailer#send_test2: processed outbound mail in 33.9ms
160
- # >>> settings: {:api_key=>"54321"}
161
- # >>> options: {"from"=>["from@example.com"], "to"=>["to@example.com"], "subject"=>"Test email", "text_part"=>"Test email body\n\n", "html_part"=>"<!DOCTYPE html>\n<html>\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n <style>\n /* Email styles need to be inline */\n </style>\n </head>\n\n <body>\n <p>Test email body</p>\n\n </body>\n</html>\n"}
162
- # >>> generate_mail_hash: {:to=>[{:email=>"to@example.com"}], :from=>{:email=>"from@example.com"}, :subject=>"Test email", :content=>[{:type=>"text/plain", :value=>"Test email body\n\n"}, {:type=>"text/html; charset=UTF-8", :value=>"<!DOCTYPE html>\n<html>\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n <style>\n /* Email styles need to be inline */\n </style>\n </head>\n\n <body>\n <p>Test email body</p>\n\n </body>\n</html>\n"}]}
163
- #=> {:response=>"Message sent via API2"}
164
- ```
165
-
166
- In the `app/mailers/test_mailer.rb` file we can use the Rails default option as well to define `delivery_system`.
167
-
168
- ```ruby
169
- class TestMailer < ApplicationMailer
170
- default from: 'from@example.com', delivery_system: 'test_api_client'
171
-
172
- def send_test
173
- mail subject: 'Test email', to: 'to@example.com'
174
- end
175
-
176
- def send_test2
177
- mail subject: 'Test email', to: 'to@example.com'
178
- end
179
- end
180
- ```
181
-
182
- In the `rails console` we can try it out.
183
-
184
- ```ruby
185
- TestMailer.send_test.deliver_now!
186
- # Rendering test_mailer/send_test.html.erb within layouts/mailer
187
- # Rendered test_mailer/send_test.html.erb within layouts/mailer (1.0ms)
188
- # Rendering test_mailer/send_test.text.erb within layouts/mailer
189
- # Rendered test_mailer/send_test.text.erb within layouts/mailer (0.3ms)
190
- #TestMailer#send_test: processed outbound mail in 46.1ms
191
- # >>> settings: {:api_key=>"12345"}
192
- # >>> options: {"from"=>["from@example.com"], "to"=>["to@example.com"], "subject"=>"Test email", "text_part"=>"Test email body\n\n", "html_part"=>"<!DOCTYPE html>\n<html>\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n <style>\n /* Email styles need to be inline */\n </style>\n </head>\n\n <body>\n <p>Test email body</p>\n\n </body>\n</html>\n"}
193
- # >>> generate_mail_hash: {:to=>[{:email=>"to@example.com"}], :from=>{:email=>"from@example.com"}, :subject=>"Test email", :content=>[{:type=>"text/plain", :value=>"Test email body\n\n"}, {:type=>"text/html; charset=UTF-8", :value=>"<!DOCTYPE html>\n<html>\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n <style>\n /* Email styles need to be inline */\n </style>\n </head>\n\n <body>\n <p>Test email body</p>\n\n </body>\n</html>\n"}]}
194
- #=> {:response=>"Message sent via API"}
195
-
196
- TestMailer.send_test2.deliver_now!
197
- # Rendering test_mailer/send_test.html.erb within layouts/mailer
198
- # Rendered test_mailer/send_test.html.erb within layouts/mailer (1.0ms)
199
- # Rendering test_mailer/send_test.text.erb within layouts/mailer
200
- # Rendered test_mailer/send_test.text.erb within layouts/mailer (0.3ms)
201
- #TestMailer#send_test: processed outbound mail in 46.1ms
202
- # >>> settings: {:api_key=>"12345"}
203
- # >>> options: {"from"=>["from@example.com"], "to"=>["to@example.com"], "subject"=>"Test email", "text_part"=>"Test email body\n\n", "html_part"=>"<!DOCTYPE html>\n<html>\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n <style>\n /* Email styles need to be inline */\n </style>\n </head>\n\n <body>\n <p>Test email body</p>\n\n </body>\n</html>\n"}
204
- # >>> generate_mail_hash: {:to=>[{:email=>"to@example.com"}], :from=>{:email=>"from@example.com"}, :subject=>"Test email", :content=>[{:type=>"text/plain", :value=>"Test email body\n\n"}, {:type=>"text/html; charset=UTF-8", :value=>"<!DOCTYPE html>\n<html>\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n <style>\n /* Email styles need to be inline */\n </style>\n </head>\n\n <body>\n <p>Test email body</p>\n\n </body>\n</html>\n"}]}
205
- #=> {:response=>"Message sent via API"}
206
- ```
207
-
208
- Or we can use default, but override it in the method.
209
-
210
- ```ruby
211
- class TestMailer < ApplicationMailer
212
- default from: 'from@example.com', delivery_system: 'test_api_client'
213
-
214
- def send_test
215
- mail subject: 'Test email', to: 'to@example.com'
216
- end
217
-
218
- def send_test2
219
- mail subject: 'Test email', to: 'to@example.com', delivery_system: 'test_api2_client'
220
- end
221
- end
222
- ```
223
-
224
- In the `rails console` we can try it out.
225
-
226
- ```ruby
227
- TestMailer.send_test.deliver_now!
228
- # Rendering test_mailer/send_test.html.erb within layouts/mailer
229
- # Rendered test_mailer/send_test.html.erb within layouts/mailer (1.0ms)
230
- # Rendering test_mailer/send_test.text.erb within layouts/mailer
231
- # Rendered test_mailer/send_test.text.erb within layouts/mailer (0.3ms)
232
- #TestMailer#send_test: processed outbound mail in 46.1ms
233
- # >>> settings: {:api_key=>"12345"}
234
- # >>> options: {"from"=>["from@example.com"], "to"=>["to@example.com"], "subject"=>"Test email", "text_part"=>"Test email body\n\n", "html_part"=>"<!DOCTYPE html>\n<html>\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n <style>\n /* Email styles need to be inline */\n </style>\n </head>\n\n <body>\n <p>Test email body</p>\n\n </body>\n</html>\n"}
235
- # >>> generate_mail_hash: {:to=>[{:email=>"to@example.com"}], :from=>{:email=>"from@example.com"}, :subject=>"Test email", :content=>[{:type=>"text/plain", :value=>"Test email body\n\n"}, {:type=>"text/html; charset=UTF-8", :value=>"<!DOCTYPE html>\n<html>\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n <style>\n /* Email styles need to be inline */\n </style>\n </head>\n\n <body>\n <p>Test email body</p>\n\n </body>\n</html>\n"}]}
236
- #=> {:response=>"Message sent via API"}
237
-
238
- TestMailer.send_test2.deliver_now!
239
- # Rendering test_mailer/send_test2.html.erb within layouts/mailer
240
- # Rendered test_mailer/send_test2.html.erb within layouts/mailer (2.6ms)
241
- # Rendering test_mailer/send_test2.text.erb within layouts/mailer
242
- # Rendered test_mailer/send_test2.text.erb within layouts/mailer (0.4ms)
243
- #TestMailer#send_test2: processed outbound mail in 33.9ms
244
- # >>> settings: {:api_key=>"54321"}
245
- # >>> options: {"from"=>["from@example.com"], "to"=>["to@example.com"], "subject"=>"Test email", "text_part"=>"Test email body\n\n", "html_part"=>"<!DOCTYPE html>\n<html>\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n <style>\n /* Email styles need to be inline */\n </style>\n </head>\n\n <body>\n <p>Test email body</p>\n\n </body>\n</html>\n"}
246
- # >>> generate_mail_hash: {:to=>[{:email=>"to@example.com"}], :from=>{:email=>"from@example.com"}, :subject=>"Test email", :content=>[{:type=>"text/plain", :value=>"Test email body\n\n"}, {:type=>"text/html; charset=UTF-8", :value=>"<!DOCTYPE html>\n<html>\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n <style>\n /* Email styles need to be inline */\n </style>\n </head>\n\n <body>\n <p>Test email body</p>\n\n </body>\n</html>\n"}]}
247
- #=> {:response=>"Message sent via API2"}
248
- ```
249
-
250
- Or if we are not define any `delivey_system` then it will use the first defined one with `MailPlugger.plug_in` method.
251
-
252
- ```ruby
253
- class TestMailer < ApplicationMailer
254
- default from: 'from@example.com'
255
-
256
- def send_test
257
- mail subject: 'Test email', to: 'to@example.com'
258
- end
259
-
260
- def send_test2
261
- mail subject: 'Test email', to: 'to@example.com'
262
- end
263
- end
264
- ```
265
-
266
- In the `rails console` we can try it out.
267
-
268
- ```ruby
269
- TestMailer.send_test.deliver_now!
270
- # Rendering test_mailer/send_test.html.erb within layouts/mailer
271
- # Rendered test_mailer/send_test.html.erb within layouts/mailer (1.0ms)
272
- # Rendering test_mailer/send_test.text.erb within layouts/mailer
273
- # Rendered test_mailer/send_test.text.erb within layouts/mailer (0.3ms)
274
- #TestMailer#send_test: processed outbound mail in 46.1ms
275
- # >>> settings: {:api_key=>"12345"}
276
- # >>> options: {"from"=>["from@example.com"], "to"=>["to@example.com"], "subject"=>"Test email", "text_part"=>"Test email body\n\n", "html_part"=>"<!DOCTYPE html>\n<html>\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n <style>\n /* Email styles need to be inline */\n </style>\n </head>\n\n <body>\n <p>Test email body</p>\n\n </body>\n</html>\n"}
277
- # >>> generate_mail_hash: {:to=>[{:email=>"to@example.com"}], :from=>{:email=>"from@example.com"}, :subject=>"Test email", :content=>[{:type=>"text/plain", :value=>"Test email body\n\n"}, {:type=>"text/html; charset=UTF-8", :value=>"<!DOCTYPE html>\n<html>\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n <style>\n /* Email styles need to be inline */\n </style>\n </head>\n\n <body>\n <p>Test email body</p>\n\n </body>\n</html>\n"}]}
278
- #=> {:response=>"Message sent via API"}
279
-
280
- TestMailer.send_test2.deliver_now!
281
- # Rendering test_mailer/send_test.html.erb within layouts/mailer
282
- # Rendered test_mailer/send_test.html.erb within layouts/mailer (1.0ms)
283
- # Rendering test_mailer/send_test.text.erb within layouts/mailer
284
- # Rendered test_mailer/send_test.text.erb within layouts/mailer (0.3ms)
285
- #TestMailer#send_test: processed outbound mail in 46.1ms
286
- # >>> settings: {:api_key=>"12345"}
287
- # >>> options: {"from"=>["from@example.com"], "to"=>["to@example.com"], "subject"=>"Test email", "text_part"=>"Test email body\n\n", "html_part"=>"<!DOCTYPE html>\n<html>\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n <style>\n /* Email styles need to be inline */\n </style>\n </head>\n\n <body>\n <p>Test email body</p>\n\n </body>\n</html>\n"}
288
- # >>> generate_mail_hash: {:to=>[{:email=>"to@example.com"}], :from=>{:email=>"from@example.com"}, :subject=>"Test email", :content=>[{:type=>"text/plain", :value=>"Test email body\n\n"}, {:type=>"text/html; charset=UTF-8", :value=>"<!DOCTYPE html>\n<html>\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n <style>\n /* Email styles need to be inline */\n </style>\n </head>\n\n <body>\n <p>Test email body</p>\n\n </body>\n</html>\n"}]}
289
- #=> {:response=>"Message sent via API"}
290
- ```
291
-
292
- Or we can just define `delivery_system` where we would like to use the other one.
293
-
294
- ```ruby
295
- class TestMailer < ApplicationMailer
296
- default from: 'from@example.com'
297
-
298
- def send_test
299
- mail subject: 'Test email', to: 'to@example.com'
300
- end
301
-
302
- def send_test2
303
- mail subject: 'Test email', to: 'to@example.com', delivery_system: 'test_api2_client'
304
- end
305
- end
306
- ```
307
-
308
- In the `rails console` we can try it out.
309
-
310
- ```ruby
311
- TestMailer.send_test.deliver_now!
312
- # Rendering test_mailer/send_test.html.erb within layouts/mailer
313
- # Rendered test_mailer/send_test.html.erb within layouts/mailer (1.0ms)
314
- # Rendering test_mailer/send_test.text.erb within layouts/mailer
315
- # Rendered test_mailer/send_test.text.erb within layouts/mailer (0.3ms)
316
- #TestMailer#send_test: processed outbound mail in 46.1ms
317
- # >>> settings: {:api_key=>"12345"}
318
- # >>> options: {"from"=>["from@example.com"], "to"=>["to@example.com"], "subject"=>"Test email", "text_part"=>"Test email body\n\n", "html_part"=>"<!DOCTYPE html>\n<html>\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n <style>\n /* Email styles need to be inline */\n </style>\n </head>\n\n <body>\n <p>Test email body</p>\n\n </body>\n</html>\n"}
319
- # >>> generate_mail_hash: {:to=>[{:email=>"to@example.com"}], :from=>{:email=>"from@example.com"}, :subject=>"Test email", :content=>[{:type=>"text/plain", :value=>"Test email body\n\n"}, {:type=>"text/html; charset=UTF-8", :value=>"<!DOCTYPE html>\n<html>\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n <style>\n /* Email styles need to be inline */\n </style>\n </head>\n\n <body>\n <p>Test email body</p>\n\n </body>\n</html>\n"}]}
320
- #=> {:response=>"Message sent via API"}
321
-
322
- TestMailer.send_test2.deliver_now!
323
- # Rendering test_mailer/send_test2.html.erb within layouts/mailer
324
- # Rendered test_mailer/send_test2.html.erb within layouts/mailer (2.6ms)
325
- # Rendering test_mailer/send_test2.text.erb within layouts/mailer
326
- # Rendered test_mailer/send_test2.text.erb within layouts/mailer (0.4ms)
327
- #TestMailer#send_test2: processed outbound mail in 33.9ms
328
- # >>> settings: {:api_key=>"54321"}
329
- # >>> options: {"from"=>["from@example.com"], "to"=>["to@example.com"], "subject"=>"Test email", "text_part"=>"Test email body\n\n", "html_part"=>"<!DOCTYPE html>\n<html>\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n <style>\n /* Email styles need to be inline */\n </style>\n </head>\n\n <body>\n <p>Test email body</p>\n\n </body>\n</html>\n"}
330
- # >>> generate_mail_hash: {:to=>[{:email=>"to@example.com"}], :from=>{:email=>"from@example.com"}, :subject=>"Test email", :content=>[{:type=>"text/plain", :value=>"Test email body\n\n"}, {:type=>"text/html; charset=UTF-8", :value=>"<!DOCTYPE html>\n<html>\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n <style>\n /* Email styles need to be inline */\n </style>\n </head>\n\n <body>\n <p>Test email body</p>\n\n </body>\n</html>\n"}]}
331
- #=> {:response=>"Message sent via API2"}
332
- ```