mailkick 1.2.1 → 1.3.0
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 +4 -4
- data/CHANGELOG.md +8 -0
- data/README.md +11 -1
- data/app/controllers/mailkick/subscriptions_controller.rb +8 -1
- data/config/routes.rb +1 -1
- data/lib/mailkick/engine.rb +1 -1
- data/lib/mailkick/url_helper.rb +6 -1
- data/lib/mailkick/version.rb +1 -1
- data/lib/mailkick.rb +2 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f9cc5e031a75a29b20c985acb8b16922338dab5e65a1df97818facd9a94c75e3
|
4
|
+
data.tar.gz: 433257564c2918ad55eeb41efc5219e86720d2d29bca3808ff084ba76a085524
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1c28e41447543e5498ca2f91fa66e1e0cf1dce16160d76d73b883be236f8a5d36091c2e768d3f5668702a371759891e1a3a5187f4a440cb35b313f9021734908
|
7
|
+
data.tar.gz: 1fe58111dc7a26644d68a425be18824a660cf16c4305207c8b63ae8916609381d376a72bd449b4e21b02fe1541e571a210b0086d7947b764e619ed67a3f8a5dd
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Email subscriptions for Rails
|
4
4
|
|
5
|
-
- Add one-click unsubscribe links to your emails
|
5
|
+
- Add one-click unsubscribe links and headers to your emails
|
6
6
|
- Fetch bounces and spam reports from your email service
|
7
7
|
|
8
8
|
:postbox: Check out [Ahoy Email](https://github.com/ankane/ahoy_email) for analytics
|
@@ -81,6 +81,16 @@ rails generate mailkick:views
|
|
81
81
|
|
82
82
|
which copies the view into `app/views/mailkick`.
|
83
83
|
|
84
|
+
## Unsubscribe Headers
|
85
|
+
|
86
|
+
For one-click unsubscribe headers ([RFC 8058](https://datatracker.ietf.org/doc/html/rfc8058)), create `config/initializers/mailkick.rb` with:
|
87
|
+
|
88
|
+
```ruby
|
89
|
+
Mailkick.headers = true
|
90
|
+
```
|
91
|
+
|
92
|
+
Headers will automatically be added to emails that call `mailkick_unsubscribe_url`.
|
93
|
+
|
84
94
|
## Bounces and Spam Reports
|
85
95
|
|
86
96
|
Fetch bounces, spam reports, and unsubscribes from your email service. Create `config/initializers/mailkick.rb` with a method to handle opt outs.
|
@@ -1,6 +1,7 @@
|
|
1
1
|
module Mailkick
|
2
2
|
class SubscriptionsController < ActionController::Base
|
3
3
|
protect_from_forgery with: :exception
|
4
|
+
skip_forgery_protection only: [:unsubscribe]
|
4
5
|
|
5
6
|
before_action :set_subscription
|
6
7
|
|
@@ -12,7 +13,13 @@ module Mailkick
|
|
12
13
|
|
13
14
|
Mailkick::Legacy.opt_out(legacy_options) if Mailkick::Legacy.opt_outs?
|
14
15
|
|
15
|
-
|
16
|
+
if request.post? && params["List-Unsubscribe"] == "One-Click"
|
17
|
+
# must not redirect according to RFC 8058
|
18
|
+
# could render show action instead
|
19
|
+
render plain: "Unsubscribe successful"
|
20
|
+
else
|
21
|
+
redirect_to subscription_path(params[:id])
|
22
|
+
end
|
16
23
|
end
|
17
24
|
|
18
25
|
def subscribe
|
data/config/routes.rb
CHANGED
data/lib/mailkick/engine.rb
CHANGED
@@ -20,7 +20,7 @@ module Mailkick
|
|
20
20
|
end
|
21
21
|
|
22
22
|
token = creds.respond_to?(:secret_key_base) ? creds.secret_key_base : creds.secret_token
|
23
|
-
Mailkick.message_verifier.rotate(token, serializer: Marshal)
|
23
|
+
Mailkick.message_verifier.rotate(token, serializer: Marshal) if token
|
24
24
|
end
|
25
25
|
end
|
26
26
|
end
|
data/lib/mailkick/url_helper.rb
CHANGED
@@ -2,7 +2,12 @@ module Mailkick
|
|
2
2
|
module UrlHelper
|
3
3
|
def mailkick_unsubscribe_url(subscriber, list, **options)
|
4
4
|
token = Mailkick.generate_token(subscriber, list)
|
5
|
-
mailkick.unsubscribe_subscription_url(token, **options)
|
5
|
+
url = mailkick.unsubscribe_subscription_url(token, **options)
|
6
|
+
if Mailkick.headers && headers["List-Unsubscribe"].nil?
|
7
|
+
headers["List-Unsubscribe-Post"] ||= "List-Unsubscribe=One-Click"
|
8
|
+
headers["List-Unsubscribe"] = "<#{url}>"
|
9
|
+
end
|
10
|
+
url
|
6
11
|
end
|
7
12
|
end
|
8
13
|
end
|
data/lib/mailkick/version.rb
CHANGED
data/lib/mailkick.rb
CHANGED
@@ -24,12 +24,13 @@ require_relative "mailkick/version"
|
|
24
24
|
require_relative "mailkick/engine" if defined?(Rails)
|
25
25
|
|
26
26
|
module Mailkick
|
27
|
-
mattr_accessor :services, :mount, :process_opt_outs_method
|
27
|
+
mattr_accessor :services, :mount, :process_opt_outs_method, :headers
|
28
28
|
mattr_reader :secret_token
|
29
29
|
mattr_writer :message_verifier
|
30
30
|
self.services = []
|
31
31
|
self.mount = true
|
32
32
|
self.process_opt_outs_method = ->(_) { raise "process_opt_outs_method not defined" }
|
33
|
+
self.headers = false
|
33
34
|
|
34
35
|
def self.fetch_opt_outs
|
35
36
|
services.each(&:fetch_opt_outs)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mailkick
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Kane
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-01-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -75,7 +75,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
75
75
|
- !ruby/object:Gem::Version
|
76
76
|
version: '0'
|
77
77
|
requirements: []
|
78
|
-
rubygems_version: 3.
|
78
|
+
rubygems_version: 3.5.3
|
79
79
|
signing_key:
|
80
80
|
specification_version: 4
|
81
81
|
summary: Email subscriptions for Rails
|