mailpace-rails 0.3.2 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0e00e92354ac88a5a1ad8d1f2f8a35c513358b40768ee1bb78f15fdfdf56fc6b
4
- data.tar.gz: 886f86f439920c14262128adef015a7339c67d63a5e188d06872d6a9ba5d91d8
3
+ metadata.gz: 116f3c2d1a6a94ee97b33eccd6b576ffa86146e262fa18fea458fd30cc6ce9bb
4
+ data.tar.gz: 367ca296eff427a12a36a56096a04ebc0e694f635d9667c629db4b67c67f65bd
5
5
  SHA512:
6
- metadata.gz: 8f4733e58983c60e330627190116b508d4df6962165fedcf7ea3d3ddfd2772bbb3b176860cd02cdd2b627e00fb7c18404b9f1e545efb23c6f29ff4ff14ad5ed7
7
- data.tar.gz: e90bd2efb8b4cd34abe58cdc9f8bbd5d0fa7d6e27f18871fab6ca37f6d82bd1a409a3ac80ea35bed5271c408b61ce3f37ff9e25c1cdfbfbb3b3dd156e5ca2cbd
6
+ metadata.gz: 2c93b6b5261b781d2692f76732deea6940ab615229cb548986d44023245e5426fdb98937a046cb7dc7f57b5f3c14301107784b22aca641f6c5e10fc1c4ae3467
7
+ data.tar.gz: 9a4e461785290e63f2bced09602a6c9770ca747d120ba8ac1247d9fc7a792bf91347f74ef759473604baefdb46cdaf9a9cf56c351ba8e6b4d87b1db97d9c09ce
data/README.md CHANGED
@@ -8,6 +8,8 @@
8
8
 
9
9
  The MailPace Rails Gem is a plug in for ActionMailer to send emails via [MailPace](https://mailpace.com) to make sending emails from Rails apps super simple.
10
10
 
11
+ > **New in 0.4.0: [Idempotent Requests](https://docs.mailpace.com/guide/idempotency/), Improved Error Handling, InReplyTo and References support**
12
+
11
13
  > **New in 0.3.0: The ability to consume [inbound emails](https://docs.mailpace.com/guide/inbound/) from MailPace via ActionMailbox**
12
14
 
13
15
  ## Usage
@@ -133,6 +135,26 @@ Alternatively, provide the password in the `RAILS_INBOUND_EMAIL_PASSWORD` enviro
133
135
  `https://actionmailbox:PASSWORD@example.com/rails/action_mailbox/mailpace/inbound_emails`
134
136
 
135
137
  That's it! Emails should start flowing into your app just like magic.
138
+
139
+ ## Idempotent Requests
140
+
141
+ Mailpace supports [idempotency](https://docs.mailpace.com/guide/idempotency) for safely retrying requests without accidentally sending the same email twice. This is useful to guarantee that an email is not sent to the same recipient multiple times, e.g. through a network error, or a bug in your application logic.
142
+
143
+ To do this, when writing your mailer, generate and add a unique `idempotency_key`:
144
+
145
+ ```ruby
146
+ class TestMailer < ApplicationMailer
147
+ default from: 'notifications@example.com'
148
+ def idempotent_mail
149
+ email = 'email@example.com'
150
+ mail(
151
+ to: email,
152
+ idempotency_key: Digest::SHA256.hexdigest("#{email}-#{Time.now.to_i / 3600}")
153
+ )
154
+ end
155
+ end
156
+ ```
157
+
136
158
  ## Support
137
159
 
138
160
  For support please check the [MailPace Documentation](https://docs.mailpace.com) or contact us at support@mailpace.com
@@ -1,5 +1,5 @@
1
1
  module Mailpace
2
2
  module Rails
3
- VERSION = '0.3.2'
3
+ VERSION = '0.4.0'
4
4
  end
5
5
  end
@@ -31,6 +31,8 @@ module Mailpace
31
31
  cc: address_list(mail.header[:cc])&.addresses&.join(','),
32
32
  bcc: address_list(mail.header[:bcc])&.addresses&.join(','),
33
33
  replyto: mail.reply_to&.join(','),
34
+ inreplyto: mail.header['In-Reply-To'].to_s,
35
+ references: mail.header['References'].to_s,
34
36
  list_unsubscribe: mail.header['list_unsubscribe'].to_s,
35
37
  attachments: format_attachments(mail.attachments),
36
38
  tags: mail.header['tags'].to_s
@@ -39,7 +41,8 @@ module Mailpace
39
41
  'User-Agent' => "MailPace Rails Gem v#{Mailpace::Rails::VERSION}",
40
42
  'Accept' => 'application/json',
41
43
  'Content-Type' => 'application/json',
42
- 'Mailpace-Server-Token' => settings[:api_token]
44
+ 'Mailpace-Server-Token' => settings[:api_token],
45
+ 'Idempotency-Key' => mail.header['idempotency_key'].to_s
43
46
  }
44
47
  )
45
48
 
@@ -63,9 +66,10 @@ module Mailpace
63
66
  def handle_response(result)
64
67
  return result unless result.code != 200
65
68
 
66
- # TODO: Improved error handling
67
- res = result.parsed_response
68
- raise res['error']&.to_s || res['errors']&.to_s
69
+ parsed_response = result.parsed_response
70
+ error_message = join_error_messages(parsed_response)
71
+
72
+ raise DeliveryError, "MAILPACE Error: #{error_message}" unless error_message.empty?
69
73
  end
70
74
 
71
75
  def format_attachments(attachments)
@@ -88,9 +92,15 @@ module Mailpace
88
92
  obj&.address_list
89
93
  end
90
94
  end
95
+
96
+ def join_error_messages(response)
97
+ # Join 'error' and 'errors' keys from response into a single string
98
+ [response['error'], response['errors']].compact.join(', ')
99
+ end
91
100
  end
92
101
 
93
102
  class Error < StandardError; end
103
+ class DeliveryError < StandardError; end
94
104
 
95
105
  def self.root
96
106
  Pathname.new(File.expand_path(File.join(__dir__, '..')))
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mailpace-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - MailPace
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-01-23 00:00:00.000000000 Z
11
+ date: 2024-10-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionmailer
@@ -24,6 +24,34 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: 6.0.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: actionmailbox
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 6.0.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 6.0.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: activestorage
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: 6.0.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: 6.0.0
27
55
  - !ruby/object:Gem::Dependency
28
56
  name: httparty
29
57
  requirement: !ruby/object:Gem::Requirement
@@ -44,14 +72,14 @@ dependencies:
44
72
  requirements:
45
73
  - - ">="
46
74
  - !ruby/object:Gem::Version
47
- version: 7.0.4.1
75
+ version: 7.2.0
48
76
  type: :development
49
77
  prerelease: false
50
78
  version_requirements: !ruby/object:Gem::Requirement
51
79
  requirements:
52
80
  - - ">="
53
81
  - !ruby/object:Gem::Version
54
- version: 7.0.4.1
82
+ version: 7.2.0
55
83
  - !ruby/object:Gem::Dependency
56
84
  name: sqlite3
57
85
  requirement: !ruby/object:Gem::Requirement
@@ -88,7 +116,7 @@ licenses:
88
116
  metadata:
89
117
  source_code_uri: https://github.com/mailpace/mailpace-rails
90
118
  changelog_uri: https://github.com/mailpace/mailpace-rails/blob/master/CHANGELOG.md
91
- post_install_message:
119
+ post_install_message:
92
120
  rdoc_options: []
93
121
  require_paths:
94
122
  - lib
@@ -103,8 +131,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
103
131
  - !ruby/object:Gem::Version
104
132
  version: '0'
105
133
  requirements: []
106
- rubygems_version: 3.3.26
107
- signing_key:
134
+ rubygems_version: 3.5.16
135
+ signing_key:
108
136
  specification_version: 4
109
137
  summary: Lets you send transactional emails from your app over an easy to use API
110
138
  test_files: []