popper 0.5.3 → 0.6.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/.github/workflows/ruby.yml +3 -6
- data/lib/popper/action/exec_cmd.rb +10 -8
- data/lib/popper/mail_account.rb +31 -27
- data/lib/popper/version.rb +1 -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: 3247fe4e78dc92357e74dbef91a27adad0f2b9fe93115aa6d5003b4a1888bd9a
|
4
|
+
data.tar.gz: bbeadd71ec4abfe61587f2181809a8f1a40786affd0ebf17526f884bb0aaa8cf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d2e3f30baf3d3739675d7d515b9efc5a9913350d8ffb19c01a53d7d579ceb3a5ff751ffbee638b21b07d773f4c163b415524b0e678aed6da0b8801eb97f89e41
|
7
|
+
data.tar.gz: 5a79445a2d2606b9943fdb3c7ca05888757edf6f109d6b5dea55ac90f722dd0a2a72a665753b016755366147fb9de8688e48b9484428aa9c716240d889cece5e
|
data/.github/workflows/ruby.yml
CHANGED
@@ -22,15 +22,12 @@ jobs:
|
|
22
22
|
runs-on: ubuntu-latest
|
23
23
|
strategy:
|
24
24
|
matrix:
|
25
|
-
ruby-version: ['
|
25
|
+
ruby-version: ['3.2', '3.3']
|
26
26
|
|
27
27
|
steps:
|
28
|
-
- uses: actions/checkout@
|
28
|
+
- uses: actions/checkout@v4
|
29
29
|
- name: Set up Ruby
|
30
|
-
|
31
|
-
# change this to (see https://github.com/ruby/setup-ruby#versioning):
|
32
|
-
# uses: ruby/setup-ruby@v1
|
33
|
-
uses: ruby/setup-ruby@0a29871fe2b0200a17a4497bae54fe5df0d973aa # v1.115.3
|
30
|
+
uses: ruby/setup-ruby@v1
|
34
31
|
with:
|
35
32
|
ruby-version: ${{ matrix.ruby-version }}
|
36
33
|
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
|
@@ -3,15 +3,17 @@ require 'shellwords'
|
|
3
3
|
require 'tempfile'
|
4
4
|
module Popper::Action
|
5
5
|
class ExecCmd < Base
|
6
|
-
def self.task(mail, params={})
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
6
|
+
def self.task(mail, params = {})
|
7
|
+
unless mail.attachments.empty?
|
8
|
+
tmps = mail.attachments.map do |a|
|
9
|
+
::Tempfile.open(a.filename) do |f|
|
10
|
+
f.write a.body.decoded
|
11
|
+
f
|
12
|
+
end
|
11
13
|
end
|
12
|
-
end
|
13
|
-
cmd = "#{@action_config.cmd} #{Shellwords.escape(mail.subject)} #{Shellwords.escape(mail.utf_body)} #{Shellwords.escape(mail.from.join(
|
14
|
-
cmd += " #{tmps.map {|t| Shellwords.escape(t.path) }.join(' ')}" if tmps && !tmps.empty?
|
14
|
+
end
|
15
|
+
cmd = "#{@action_config.cmd} #{Shellwords.escape(mail.subject)} #{Shellwords.escape(mail.utf_body)} #{Shellwords.escape(mail.from.join(';'))} #{Shellwords.escape(mail.to.join(';'))}"
|
16
|
+
cmd += " #{tmps.map { |t| Shellwords.escape(t.path) }.join(' ')}" if tmps && !tmps.empty?
|
15
17
|
::Bundler.with_clean_env do
|
16
18
|
system(cmd)
|
17
19
|
end
|
data/lib/popper/mail_account.rb
CHANGED
@@ -16,8 +16,8 @@ module Popper
|
|
16
16
|
self.complete_list = current_list unless complete_list
|
17
17
|
pop(conn)
|
18
18
|
end
|
19
|
-
|
20
|
-
|
19
|
+
rescue StandardError => e
|
20
|
+
Popper.log.warn e
|
21
21
|
end
|
22
22
|
|
23
23
|
def pop(conn)
|
@@ -27,17 +27,15 @@ module Popper
|
|
27
27
|
Popper.log.info "start popper #{config.name}"
|
28
28
|
|
29
29
|
process_uidl_list(conn).each do |m|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
Popper.log.warn e
|
40
|
-
end
|
30
|
+
done_uidls << check_and_action(m)
|
31
|
+
m.delete if config.login.respond_to?(:delete_after) && config.login.delete_after
|
32
|
+
rescue Net::POPError => e
|
33
|
+
self.complete_list += done_uidls
|
34
|
+
Popper.log.warn 'pop err write uidl'
|
35
|
+
return
|
36
|
+
rescue StandardError => e
|
37
|
+
error_uidls << m.uidl
|
38
|
+
Popper.log.warn e
|
41
39
|
end
|
42
40
|
|
43
41
|
self.complete_list = current_list - error_uidls
|
@@ -46,7 +44,7 @@ module Popper
|
|
46
44
|
|
47
45
|
def check_and_action(m)
|
48
46
|
mail = EncodeMail.new(m.mail)
|
49
|
-
Popper.log.info "check mail:#{mail.date
|
47
|
+
Popper.log.info "check mail:#{mail.date} #{mail.subject}"
|
50
48
|
match_rules?(mail).each do |rule|
|
51
49
|
Popper.log.info "do action:#{mail.subject}"
|
52
50
|
Popper::Action::Webhook.run(config.action_by_rule(rule), mail) if config.action_by_rule(rule)
|
@@ -71,10 +69,10 @@ module Popper
|
|
71
69
|
|
72
70
|
def set_pop_option(pop)
|
73
71
|
pop.enable_ssl if config.login.respond_to?(:ssl) && config.login.ssl
|
74
|
-
%w
|
72
|
+
%w[
|
75
73
|
open_timeout
|
76
74
|
read_timeout
|
77
|
-
|
75
|
+
].each do |m|
|
78
76
|
pop.instance_variable_set("@#{m}", ENV['POP_TIMEOUT'] || 120)
|
79
77
|
end
|
80
78
|
pop
|
@@ -82,11 +80,11 @@ module Popper
|
|
82
80
|
|
83
81
|
def process_uidl_list(conn)
|
84
82
|
uidl_list = current_list - complete_list
|
85
|
-
conn.mails.select {|_m|uidl_list.include?(_m.uidl)}
|
83
|
+
conn.mails.select { |_m| uidl_list.include?(_m.uidl) }
|
86
84
|
end
|
87
85
|
|
88
86
|
def match_rules?(mail)
|
89
|
-
config.rule_with_conditions_select do |
|
87
|
+
config.rule_with_conditions_select do |_rule, mail_header, conditions|
|
90
88
|
conditions.all? do |condition|
|
91
89
|
mail.respond_to?(mail_header) && mail.send(mail_header).to_s.match(/#{condition}/)
|
92
90
|
end
|
@@ -97,12 +95,20 @@ end
|
|
97
95
|
|
98
96
|
class ::Hash
|
99
97
|
def deep_merge(second)
|
100
|
-
merger = proc { |
|
101
|
-
|
98
|
+
merger = proc { |_key, v1, v2|
|
99
|
+
if v1.is_a?(Hash) && v2.is_a?(Hash)
|
100
|
+
v1.merge(v2, &merger)
|
101
|
+
elsif v1.is_a?(Array) && v2.is_a?(Array)
|
102
|
+
v1 | v2
|
103
|
+
else
|
104
|
+
[:undefined, nil, :nil].include?(v2) ? v1 : v2
|
105
|
+
end
|
106
|
+
}
|
107
|
+
merge(second.to_h, &merger)
|
102
108
|
end
|
103
109
|
|
104
110
|
def deep_merge!(second)
|
105
|
-
|
111
|
+
merge!(deep_merge(second))
|
106
112
|
end
|
107
113
|
end
|
108
114
|
|
@@ -113,13 +119,11 @@ class EncodeMail < Mail::Message
|
|
113
119
|
|
114
120
|
def utf_body
|
115
121
|
if multipart?
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
html_part.decoded.encode("UTF-8", charset)
|
120
|
-
end
|
122
|
+
parts.map do |part|
|
123
|
+
part.body.decoded.encode('UTF-8', charset) unless part.attachment?
|
124
|
+
end.join
|
121
125
|
else
|
122
|
-
body.decoded.encode(
|
126
|
+
body.decoded.encode('UTF-8', charset)
|
123
127
|
end
|
124
128
|
end
|
125
129
|
end
|
data/lib/popper/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: popper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- pyama86
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-08-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -217,7 +217,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
217
217
|
- !ruby/object:Gem::Version
|
218
218
|
version: '0'
|
219
219
|
requirements: []
|
220
|
-
rubygems_version: 3.
|
220
|
+
rubygems_version: 3.4.10
|
221
221
|
signing_key:
|
222
222
|
specification_version: 4
|
223
223
|
summary: email notification tool
|