mail_plugger 1.0.0.beta1 → 1.0.0.rc1

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
2
  SHA256:
3
- metadata.gz: b8f511638e18d76bc9e3c85d7fc7b0869765e64116b1118558560ed6b87eae69
4
- data.tar.gz: 673381bb010b20fdba29dab25ed09b2dccb6c5b2c95e44a90e0f3524d75b40bc
3
+ metadata.gz: c47f868eab003c41513627ce740e0d61ab9628a97ba4fd896181254ce957ad92
4
+ data.tar.gz: 5212e247ab3e9372e10c403edd9d680109e67aa07cf07d2cb2e2d92a3a2d8b59
5
5
  SHA512:
6
- metadata.gz: b566e670154a0ffdd282b0d9ebaf297e797fb687e3192ddcea92e3e3810edc5f82b180cab8a57e469929f1fd531b3e217dc2b7990840277af7fbc9a731c92ee0
7
- data.tar.gz: 21c9c007a6923fa03f5b5e1f536ad2a7ec2ff64d323c37e3ba3404ebeb3eef46350d29d1ec16de5935992f77d18ba2ff53b46413ade6f25fde5991059b032b7a
6
+ metadata.gz: d79e80294fffb6b85ad0cb7838b03595d1c695d058feea40640d677e93609095a3b3162d95a2918798c8afc07b8e7d828f79b03019410fd59136d20fce904de8
7
+ data.tar.gz: 401581be7d293bf54d5e133a65d8b793dbf31c36823a96c7080b5f6f3e965f376b9e84c7296272241f245832d665b6c7ca437a86fac9ea55ee7e150bb087cad4
@@ -15,6 +15,9 @@ Metrics/BlockLength:
15
15
  Exclude:
16
16
  - spec/**/*
17
17
 
18
+ Metrics/CyclomaticComplexity:
19
+ Max: 15
20
+
18
21
  Metrics/MethodLength:
19
22
  Max: 20
20
23
 
@@ -1,5 +1,17 @@
1
1
  # Change log
2
2
 
3
+ ## 1.0.0.rc1 (2021-01-13)
4
+
5
+ * Change description and fix changelog_uri in gemspec file.
6
+ * Add/Change documentations.
7
+ * Update gems.
8
+ * Change `MailPlugger.plug_in` and `MailPlugger::MailHelper.delivery_options` methods to accept strings and symbols.
9
+ * Change `MailPlugger::MailHelper.delivery_data` method that we can retrieve massage object as well.
10
+ * Check hash keys in `MailPlugger::MailHelper.delivery_system` method, so now if we are add wrong `delivey_system` then we are getting a meaningful error message.
11
+ * Change `MailPlugger::MailHelper.extract_attachments` method. If an attachment is inline then the hash contains the `filename` and `cid` as well.
12
+ * Add/Change tests.
13
+ * Change `MailPlugger::MailHelper.delivery_option` that returns with indifferent hash
14
+
3
15
  ## 1.0.0.beta1 (2021-01-02)
4
16
 
5
17
  * Implement MailPlugger methods and functionality. See [README.md](https://github.com/norbertszivos/mail_plugger/blob/main/README.md)
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- mail_plugger (1.0.0.beta1)
4
+ mail_plugger (1.0.0.rc1)
5
5
  mail (~> 2.5)
6
6
 
7
7
  GEM
@@ -43,16 +43,16 @@ GEM
43
43
  diff-lcs (>= 1.2.0, < 2.0)
44
44
  rspec-support (~> 3.10.0)
45
45
  rspec-support (3.10.1)
46
- rubocop (1.7.0)
46
+ rubocop (1.8.0)
47
47
  parallel (~> 1.10)
48
- parser (>= 2.7.1.5)
48
+ parser (>= 3.0.0.0)
49
49
  rainbow (>= 2.2.2, < 4.0)
50
50
  regexp_parser (>= 1.8, < 3.0)
51
51
  rexml
52
52
  rubocop-ast (>= 1.2.0, < 2.0)
53
53
  ruby-progressbar (~> 1.7)
54
- unicode-display_width (>= 1.4.0, < 2.0)
55
- rubocop-ast (1.3.0)
54
+ unicode-display_width (>= 1.4.0, < 3.0)
55
+ rubocop-ast (1.4.0)
56
56
  parser (>= 2.7.1.5)
57
57
  rubocop-performance (1.9.2)
58
58
  rubocop (>= 0.90.0, < 2.0)
@@ -61,14 +61,14 @@ GEM
61
61
  rubocop (~> 1.0)
62
62
  rubocop-ast (>= 1.1.0)
63
63
  ruby-progressbar (1.11.0)
64
- simplecov (0.20.0)
64
+ simplecov (0.21.2)
65
65
  docile (~> 1.1)
66
66
  simplecov-html (~> 0.11)
67
67
  simplecov_json_formatter (~> 0.1)
68
68
  simplecov-html (0.12.3)
69
69
  simplecov_json_formatter (0.1.2)
70
70
  thor (1.0.1)
71
- unicode-display_width (1.7.0)
71
+ unicode-display_width (2.0.0)
72
72
  webmock (3.11.0)
73
73
  addressable (>= 2.3.6)
74
74
  crack (>= 0.3.2)
@@ -89,4 +89,4 @@ DEPENDENCIES
89
89
  webmock (~> 3.0)
90
90
 
91
91
  BUNDLED WITH
92
- 2.2.3
92
+ 2.2.4
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # M<img src="https://github.com/norbertszivos/mail_plugger/blob/main/images/mail_plugger.png" height="25" />ilPlugger
2
2
 
3
+ [![Gem Version](https://badge.fury.io/rb/mail_plugger.svg)](https://badge.fury.io/rb/mail_plugger)
4
+ [![MIT license](https://img.shields.io/badge/license-MIT-brightgreen)](LICENSE.txt)
3
5
  [![Ruby Style Guide](https://img.shields.io/badge/code_style-rubocop-brightgreen.svg)](https://github.com/rubocop-hq/rubocop)
4
6
  [![Build Status](https://travis-ci.com/norbertszivos/mail_plugger.svg?branch=main)](https://travis-ci.com/norbertszivos/mail_plugger)
5
7
  [![Maintainability](https://api.codeclimate.com/v1/badges/bd2cda43214c111d8d16/maintainability)](https://codeclimate.com/github/norbertszivos/mail_plugger/maintainability)
@@ -25,9 +27,20 @@ Or install it yourself as:
25
27
 
26
28
  ## Usage
27
29
 
28
- [Use MailPlugger in a Ruby script or IRB console](https://github.com/norbertszivos/mail_plugger/blob/main/docs/usage_in_script_or_console.md)
29
-
30
- [Use MailPlugger in Ruby on Rails](https://github.com/norbertszivos/mail_plugger/blob/main/docs/usage_in_ruby_on_rails.md)
30
+ - [How to use MailPlugger.plug_in method](https://github.com/norbertszivos/mail_plugger/blob/main/docs/usage_of_plug_in_method.md)
31
+ - [How to use MailPlugger::DeliveryMethod class](https://github.com/norbertszivos/mail_plugger/blob/main/docs/usage_of_delivery_method.md)
32
+ - [How to use MailPlugger in a Ruby script or IRB console](https://github.com/norbertszivos/mail_plugger/blob/main/docs/usage_in_script_or_console.md)
33
+ - [How to use MailPlugger in Ruby on Rails](https://github.com/norbertszivos/mail_plugger/blob/main/docs/usage_in_ruby_on_rails.md)
34
+ - [How to add API specific options to the mailer method in Ruby on Rails](https://github.com/norbertszivos/mail_plugger/blob/main/docs/usage_of_secial_options_in_ruby_on_rails.md)
35
+ - [How to add attachments to the mailer method in Ruby on Rails](https://github.com/norbertszivos/mail_plugger/blob/main/docs/usage_of_attachments_in_ruby_on_rails.md)
36
+ - [How to use more delivey systems in Ruby on Rails](https://github.com/norbertszivos/mail_plugger/blob/main/docs/usage_of_more_delivery_system_in_ruby_on_rails.md)
37
+ - [How to use one delivey system with more send methods in Ruby on Rails](https://github.com/norbertszivos/mail_plugger/blob/main/docs/usage_of_one_delivery_system_with_more_send_methods_in_ruby_on_rails.md)
38
+ - [How to use AWS SES with MailPlugger in Ruby on Rails](https://github.com/norbertszivos/mail_plugger/blob/main/docs/usage_of_aws_ses_in_ruby_on_rails.md)
39
+ - [How to use SparkPost with MailPlugger in Ruby on Rails](https://github.com/norbertszivos/mail_plugger/blob/main/docs/usage_of_sparkpost_in_ruby_on_rails.md)
40
+ - [How to use SendGrid with MailPlugger in Ruby on Rails](https://github.com/norbertszivos/mail_plugger/blob/main/docs/usage_of_sendgrid_in_ruby_on_rails.md)
41
+ - [How to use Mandrill with MailPlugger in Ruby on Rails](https://github.com/norbertszivos/mail_plugger/blob/main/docs/usage_of_mandrill_in_ruby_on_rails.md)
42
+ - [How to use Postmark with MailPlugger in Ruby on Rails](https://github.com/norbertszivos/mail_plugger/blob/main/docs/usage_of_postmark_in_ruby_on_rails.md)
43
+ - [How to use Mailgun with MailPlugger in Ruby on Rails](https://github.com/norbertszivos/mail_plugger/blob/main/docs/usage_of_mailgun_in_ruby_on_rails.md)
31
44
 
32
45
  ## Development
33
46
 
@@ -1,4 +1,4 @@
1
- ## Use MailPlugger in Ruby on Rails
1
+ # How to use MailPlugger in Ruby on Rails
2
2
 
3
3
  After to add `mail_plugger` gem and the gem of API of the mail provider, create `config/initializers/mail_plugger.rb` file and add something similar.
4
4
 
@@ -95,7 +95,7 @@ TestMailer.send_test.deliver_now
95
95
  # Rendered test_mailer/send_test.text.erb within layouts/mailer (0.5ms)
96
96
  #TestMailer#send_test: processed outbound mail in 62.2ms
97
97
  # >>> settings: {:api_key=>"12345"}
98
- # >>> 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"}
98
+ # >>> 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"}
99
99
  # >>> 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"}]}
100
100
  #Sent mail to to@example.com (12.2ms)
101
101
  #Date: Sat, 02 Jan 2021 15:08:53 +0100
@@ -151,7 +151,7 @@ TestMailer.send_test.deliver_now!
151
151
  # Rendered test_mailer/send_test.text.erb within layouts/mailer (0.0ms)
152
152
  #TestMailer#send_test: processed outbound mail in 20.9ms
153
153
  # >>> settings: {:api_key=>"12345"}
154
- # >>> 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"}
154
+ # >>> 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"}
155
155
  # >>> 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"}]}
156
156
  #=> #<Mail::Message:61140, Multipart: true, Headers: <From: from@example.com>, <To: to@example.com>, <Subject: Test email>, <Mime-Version: 1.0>, <Content-Type: multipart/alternative; boundary="--==_mimepart_5ff082bd7aab5_10afcebb4503a4"; charset=UTF-8>>
157
157
  ```
@@ -176,7 +176,7 @@ TestMailer.send_test.deliver_now!
176
176
  # Rendered test_mailer/send_test.text.erb within layouts/mailer (0.4ms)
177
177
  #TestMailer#send_test: processed outbound mail in 37.0ms
178
178
  # >>> settings: {:api_key=>"12345"}
179
- # >>> 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"}
179
+ # >>> 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"}
180
180
  # >>> 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"}]}
181
181
  #=> {:response=>"OK"}
182
182
  ```
@@ -1,4 +1,4 @@
1
- ## Use MailPlugger in a Ruby script or IRB console
1
+ # How to use MailPlugger in a Ruby script or IRB console
2
2
 
3
3
  First you should be able to `require 'mail'` and `require 'mail_plugger'` to get started.
4
4
 
@@ -61,7 +61,7 @@ message = Mail.new(from: 'from@example.com', to: 'to@example.com', subject: 'Tes
61
61
 
62
62
  MailPlugger::DeliveryMethod.new.deliver!(message)
63
63
  # >>> settings: {:api_key=>"12345"}
64
- # >>> options: {:from=>["from@example.com"], :to=>["to@example.com"], :subject=>"Test email", :body=>"Test email body"}
64
+ # >>> options: {"from"=>["from@example.com"], "to"=>["to@example.com"], "subject"=>"Test email", "body"=>"Test email body"}
65
65
  # >>> generate_mail_hash: {:to=>[{:email=>"to@example.com"}], :from=>{:email=>"from@example.com"}, :subject=>"Test email", :content=>[{:type=>"text/plain", :value=>"Test email body"}]}
66
66
  # => {:response=>"OK"}
67
67
  ```
@@ -74,7 +74,7 @@ message = Mail.new(from: 'from@example.com', to: 'to@example.com', subject: 'Tes
74
74
 
75
75
  MailPlugger::DeliveryMethod.new(delivery_options: %i[from to subject body], client: TestApiClientClass).deliver!(message)
76
76
  # >>> settings: {:api_key=>"12345"}
77
- # >>> options: {:from=>["from@example.com"], :to=>["to@example.com"], :subject=>"Test email", :body=>"Test email body"}
77
+ # >>> options: {"from"=>["from@example.com"], "to"=>["to@example.com"], "subject"=>"Test email", "body"=>"Test email body"}
78
78
  # >>> generate_mail_hash: {:to=>[{:email=>"to@example.com"}], :from=>{:email=>"from@example.com"}, :subject=>"Test email", :content=>[{:type=>"text/plain", :value=>"Test email body"}]}
79
79
  # => {:response=>"OK"}
80
80
  ```
@@ -90,7 +90,7 @@ mail.delivery_method MailPlugger::DeliveryMethod, { delivery_options: %i[from to
90
90
 
91
91
  mail.deliver
92
92
  # >>> settings: {:api_key=>"12345"}
93
- # >>> options: {:from=>["from@example.com"], :to=>["to@example.com"], :subject=>"Test email", :body=>"Test email body"}
93
+ # >>> options: {"from"=>["from@example.com"], "to"=>["to@example.com"], "subject"=>"Test email", "body"=>"Test email body"}
94
94
  # >>> generate_mail_hash: {:to=>[{:email=>"to@example.com"}], :from=>{:email=>"from@example.com"}, :subject=>"Test email", :content=>[{:type=>"text/plain", :value=>"Test email body"}]}
95
95
  # => #<Mail::Message:1960, Multipart: false, Headers: <From: from@example.com>, <To: to@example.com>, <Subject: Test email>>
96
96
 
@@ -98,7 +98,7 @@ mail.deliver
98
98
 
99
99
  mail.deliver!
100
100
  # >>> settings: {:api_key=>"12345"}
101
- # >>> options: {:from=>["from@example.com"], :to=>["to@example.com"], :subject=>"Test email", :body=>"Test email body"}
101
+ # >>> options: {"from"=>["from@example.com"], "to"=>["to@example.com"], "subject"=>"Test email", "body"=>"Test email body"}
102
102
  # >>> generate_mail_hash: {:to=>[{:email=>"to@example.com"}], :from=>{:email=>"from@example.com"}, :subject=>"Test email", :content=>[{:type=>"text/plain", :value=>"Test email body"}]}
103
103
  # => #<Mail::Message:1960, Multipart: false, Headers: <From: from@example.com>, <To: to@example.com>, <Subject: Test email>>
104
104
  ```
@@ -114,7 +114,7 @@ mail.delivery_method MailPlugger::DeliveryMethod, { delivery_options: %i[from to
114
114
 
115
115
  mail.deliver
116
116
  # >>> settings: {:api_key=>"12345"}
117
- # >>> options: {:from=>["from@example.com"], :to=>["to@example.com"], :subject=>"Test email", :body=>"Test email body"}
117
+ # >>> options: {"from"=>["from@example.com"], "to"=>["to@example.com"], "subject"=>"Test email", "body"=>"Test email body"}
118
118
  # >>> generate_mail_hash: {:to=>[{:email=>"to@example.com"}], :from=>{:email=>"from@example.com"}, :subject=>"Test email", :content=>[{:type=>"text/plain", :value=>"Test email body"}]}
119
119
  # => #<Mail::Message:1960, Multipart: false, Headers: <From: from@example.com>, <To: to@example.com>, <Subject: Test email>>
120
120
 
@@ -122,7 +122,7 @@ mail.deliver
122
122
 
123
123
  mail.deliver!
124
124
  # >>> settings: {:api_key=>"12345"}
125
- # >>> options: {:from=>["from@example.com"], :to=>["to@example.com"], :subject=>"Test email", :body=>"Test email body"}
125
+ # >>> options: {"from"=>["from@example.com"], "to"=>["to@example.com"], "subject"=>"Test email", "body"=>"Test email body"}
126
126
  # >>> generate_mail_hash: {:to=>[{:email=>"to@example.com"}], :from=>{:email=>"from@example.com"}, :subject=>"Test email", :content=>[{:type=>"text/plain", :value=>"Test email body"}]}
127
127
  # => {:response=>"OK"}
128
128
  ```
@@ -144,7 +144,7 @@ mail.delivery_method MailPlugger::DeliveryMethod
144
144
 
145
145
  mail.deliver
146
146
  # >>> settings: {:api_key=>"12345"}
147
- # >>> options: {:from=>["from@example.com"], :to=>["to@example.com"], :subject=>"Test email", :body=>"Test email body"}
147
+ # >>> options: {"from"=>["from@example.com"], "to"=>["to@example.com"], "subject"=>"Test email", "body"=>"Test email body"}
148
148
  # >>> generate_mail_hash: {:to=>[{:email=>"to@example.com"}], :from=>{:email=>"from@example.com"}, :subject=>"Test email", :content=>[{:type=>"text/plain", :value=>"Test email body"}]}
149
149
  # => #<Mail::Message:1960, Multipart: false, Headers: <From: from@example.com>, <To: to@example.com>, <Subject: Test email>>
150
150
 
@@ -152,7 +152,7 @@ mail.deliver
152
152
 
153
153
  mail.deliver!
154
154
  # >>> settings: {:api_key=>"12345"}
155
- # >>> options: {:from=>["from@example.com"], :to=>["to@example.com"], :subject=>"Test email", :body=>"Test email body"}
155
+ # >>> options: {"from"=>["from@example.com"], "to"=>["to@example.com"], "subject"=>"Test email", "body"=>"Test email body"}
156
156
  # >>> generate_mail_hash: {:to=>[{:email=>"to@example.com"}], :from=>{:email=>"from@example.com"}, :subject=>"Test email", :content=>[{:type=>"text/plain", :value=>"Test email body"}]}
157
157
  # => {:response=>"OK"}
158
158
  ```
@@ -0,0 +1,110 @@
1
+ # How to add attachments to the mailer method in Ruby on Rails
2
+
3
+ Let's use mailer method which was defined [here](https://github.com/norbertszivos/mail_plugger/blob/main/docs/usage_in_ruby_on_rails.md).
4
+
5
+ Change the API and `MailPlugger.plug_in` method in `config/initializers/mail_plugger.rb`.
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: 'OK' }
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
+ attachments: generate_attachments
43
+ }
44
+ end
45
+
46
+ def generate_recipients
47
+ @options[:to].map do |to|
48
+ {
49
+ email: to
50
+ }
51
+ end
52
+ end
53
+
54
+ def generate_attachments
55
+ @options[:attachments].map do |attachment|
56
+ hash = {
57
+ filename: attachment[:filename],
58
+ type: attachment[:type],
59
+ content: attachment[:content]
60
+ }
61
+ hash.merge!(content_id: attachment[:cid]) if attachment.has_key?(:cid)
62
+
63
+ hash
64
+ end
65
+ end
66
+ end
67
+
68
+ MailPlugger.plug_in('test_api_client') do |api|
69
+ api.delivery_options = %i[from to subject text_part html_part attachments]
70
+ api.delivery_settings = { return_response: true }
71
+ api.client = TestApiClientClass
72
+ end
73
+ ```
74
+
75
+ Let's change `app/mailers/test_mailer.rb` file.
76
+
77
+ ```ruby
78
+ class TestMailer < ApplicationMailer
79
+ default from: 'from@example.com'
80
+
81
+ def send_test
82
+ attachments['image1.png'] = File.read('/path/to/image1.png')
83
+ attachments.inline['image2.png'] = File.read('/path/to/image2.png')
84
+
85
+ mail subject: 'Test email', to: 'to@example.com'
86
+ end
87
+ end
88
+ ```
89
+
90
+ Then change `app/views/test_mailer/send_test.html.erb` and add inline attachment.
91
+
92
+ ```erb
93
+ <p>Test email body</p>
94
+ <%= image_tag attachments['image2.png'].url %>
95
+ ```
96
+
97
+ In the `rails console` we can try it out.
98
+
99
+ ```ruby
100
+ TestMailer.send_test.deliver_now!
101
+ # Rendering test_mailer/send_test.html.erb within layouts/mailer
102
+ # Rendered test_mailer/send_test.html.erb within layouts/mailer (4.6ms)
103
+ # Rendering test_mailer/send_test.text.erb within layouts/mailer
104
+ # Rendered test_mailer/send_test.text.erb within layouts/mailer (0.3ms)
105
+ #TestMailer#send_test: processed outbound mail in 47.5ms
106
+ # >>> settings: {:api_key=>"12345"}
107
+ # >>> 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<img src=\"cid:5ffdd449d282a_163e2ef9c62c0@server.local.mail\" />\n\n </body>\n</html>\n", "attachments"=>[{"filename"=>"image1.png", "type"=>"image/png", "content"=>"iVBORw0KGgoAAAANSUhEUgAAALQAAABdCAMAAAA7WLggg==\n"}, {"cid"=>"5ffdd449d282a_163e2ef9c62c0@server.local.mail", "filename"=>"image2.png", "type"=>"image/png", "content"=>"iVBORw0KGgoAAAANSUhEUgAAAAggg==\n"}]}
108
+ # >>> 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<img src=\"cid:5ffdd449d282a_163e2ef9c62c0@server.local.mail\" />\n\n </body>\n</html>\n"}], :attachments=>[{:filename=>"image1.png", :type=>"image/png", :content=>"iVBORw0KGgoAAAANSUhEUgAAALQAAABdCAMAAAA7WLggg==\n"}, {:filename=>"image2.png", :type=>"image/png", :content=>"iVBORw0KGgoAAAANSUhEUgAAAAggg==\n", :content_id=>"5ffdd449d282a_163e2ef9c62c0@server.local.mail"}]}
109
+ #=> {:response=>"OK"}
110
+ ```
@@ -0,0 +1,136 @@
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
+ ```