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 +4 -4
- data/README.md +22 -0
- data/lib/mailpace-rails/version.rb +1 -1
- data/lib/mailpace-rails.rb +14 -4
- metadata +36 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 116f3c2d1a6a94ee97b33eccd6b576ffa86146e262fa18fea458fd30cc6ce9bb
|
4
|
+
data.tar.gz: 367ca296eff427a12a36a56096a04ebc0e694f635d9667c629db4b67c67f65bd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
data/lib/mailpace-rails.rb
CHANGED
@@ -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
|
-
|
67
|
-
|
68
|
-
|
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.
|
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:
|
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
|
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
|
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.
|
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: []
|