bcbiff 0.2.1 → 0.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.
- data/.gitignore +17 -0
- data/Gemfile +3 -10
- data/Gemfile.lock +18 -17
- data/Rakefile +1 -65
- data/bcbiff.gemspec +29 -51
- data/lib/bcbiff.rb +53 -7
- metadata +72 -97
data/.gitignore
ADDED
data/Gemfile
CHANGED
@@ -1,11 +1,4 @@
|
|
1
|
-
source
|
1
|
+
source 'https://rubygems.org'
|
2
2
|
|
3
|
-
gem
|
4
|
-
|
5
|
-
# Add dependencies to develop your gem here.
|
6
|
-
# Include everything needed to run rake, tests, features, etc.
|
7
|
-
group :development do
|
8
|
-
gem "bundler", "~> 1.0.0"
|
9
|
-
gem "jeweler", "~> 1.6.4"
|
10
|
-
gem "rcov", ">= 0"
|
11
|
-
end
|
3
|
+
# Specify your gem's dependencies in bcbiff.gemspec
|
4
|
+
gemspec
|
data/Gemfile.lock
CHANGED
@@ -1,21 +1,23 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
bcbiff (0.3.0)
|
5
|
+
mail
|
6
|
+
|
1
7
|
GEM
|
2
|
-
remote:
|
8
|
+
remote: https://rubygems.org/
|
3
9
|
specs:
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
bundler (~> 1.0)
|
8
|
-
git (>= 1.2.5)
|
9
|
-
rake
|
10
|
-
mail (2.3.0)
|
10
|
+
i18n (0.6.1)
|
11
|
+
json (1.7.7)
|
12
|
+
mail (2.5.3)
|
11
13
|
i18n (>= 0.4.0)
|
12
14
|
mime-types (~> 1.16)
|
13
15
|
treetop (~> 1.4.8)
|
14
|
-
mime-types (1.
|
15
|
-
polyglot (0.3.
|
16
|
-
|
17
|
-
|
18
|
-
treetop (1.4.
|
16
|
+
mime-types (1.21)
|
17
|
+
polyglot (0.3.3)
|
18
|
+
rdoc (3.12.1)
|
19
|
+
json (~> 1.4)
|
20
|
+
treetop (1.4.12)
|
19
21
|
polyglot
|
20
22
|
polyglot (>= 0.3.1)
|
21
23
|
|
@@ -23,7 +25,6 @@ PLATFORMS
|
|
23
25
|
ruby
|
24
26
|
|
25
27
|
DEPENDENCIES
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
rcov
|
28
|
+
bcbiff!
|
29
|
+
bundler (>= 1.2)
|
30
|
+
rdoc (> 2.4.2)
|
data/Rakefile
CHANGED
@@ -1,65 +1 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require 'rubygems'
|
4
|
-
require 'bundler'
|
5
|
-
begin
|
6
|
-
Bundler.setup(:default, :development)
|
7
|
-
rescue Bundler::BundlerError => e
|
8
|
-
$stderr.puts e.message
|
9
|
-
$stderr.puts "Run `bundle install` to install missing gems"
|
10
|
-
exit e.status_code
|
11
|
-
end
|
12
|
-
require 'rake'
|
13
|
-
|
14
|
-
require 'jeweler'
|
15
|
-
Jeweler::Tasks.new do |gem|
|
16
|
-
eval File.read('./lib/bcbiff.rb').lines.find { |line|
|
17
|
-
/BCBIFF_VERSION/ =~ line
|
18
|
-
} if !defined?(BCBIFF_VERSION)
|
19
|
-
|
20
|
-
# gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
|
21
|
-
gem.name = "bcbiff"
|
22
|
-
gem.homepage = "http://github.com/knu/bcbiff"
|
23
|
-
gem.license = "2-clause BSDL"
|
24
|
-
gem.summary = %Q{bcbiff(1) - Boxcar based IMAP biff}
|
25
|
-
gem.description = <<-'EOS'
|
26
|
-
Bcbiff checks the Inbox folder on an IMAP server for unread mails and
|
27
|
-
sends a notification for each. Ideal for enabling push notification
|
28
|
-
for your Gmail account using Boxcar.
|
29
|
-
EOS
|
30
|
-
gem.email = "knu@idaemons.org"
|
31
|
-
gem.authors = ["Akinori MUSHA"]
|
32
|
-
gem.executables = ["bcbiff"]
|
33
|
-
gem.version = BCBIFF_VERSION
|
34
|
-
|
35
|
-
gem.required_ruby_version = Gem::Requirement.new(">= 1.8.7")
|
36
|
-
# dependencies defined in Gemfile
|
37
|
-
end
|
38
|
-
Jeweler::RubygemsDotOrgTasks.new
|
39
|
-
|
40
|
-
require 'rake/testtask'
|
41
|
-
Rake::TestTask.new(:test) do |test|
|
42
|
-
test.libs << 'lib' << 'test'
|
43
|
-
test.pattern = 'test/**/test_*.rb'
|
44
|
-
test.verbose = true
|
45
|
-
end
|
46
|
-
|
47
|
-
require 'rcov/rcovtask'
|
48
|
-
Rcov::RcovTask.new do |test|
|
49
|
-
test.libs << 'test'
|
50
|
-
test.pattern = 'test/**/test_*.rb'
|
51
|
-
test.verbose = true
|
52
|
-
test.rcov_opts << '--exclude "gems/*"'
|
53
|
-
end
|
54
|
-
|
55
|
-
task :default => :test
|
56
|
-
|
57
|
-
require 'rake/rdoctask'
|
58
|
-
Rake::RDocTask.new do |rdoc|
|
59
|
-
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
60
|
-
|
61
|
-
rdoc.rdoc_dir = 'rdoc'
|
62
|
-
rdoc.title = "bcbiff #{version}"
|
63
|
-
rdoc.rdoc_files.include('README*')
|
64
|
-
rdoc.rdoc_files.include('lib/**/*.rb')
|
65
|
-
end
|
1
|
+
require 'bundler/gem_tasks'
|
data/bcbiff.gemspec
CHANGED
@@ -1,59 +1,37 @@
|
|
1
|
-
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
1
|
# -*- encoding: utf-8 -*-
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
eval File.read(
|
5
|
+
File.expand_path('../lib/bcbiff.rb', __FILE__)
|
6
|
+
).lines.find { |line|
|
7
|
+
/BCBIFF_VERSION/ =~ line
|
8
|
+
} if !defined?(BCBIFF_VERSION)
|
5
9
|
|
6
|
-
Gem::Specification.new do |
|
7
|
-
|
8
|
-
|
10
|
+
Gem::Specification.new do |gem|
|
11
|
+
gem.name = "bcbiff"
|
12
|
+
gem.version = BCBIFF_VERSION
|
13
|
+
gem.authors = ["Akinori MUSHA"]
|
14
|
+
gem.email = ["knu@idaemons.org"]
|
15
|
+
gem.homepage = "https://github.com/knu/bcbiff"
|
16
|
+
gem.licenses = ["2-clause BSDL"]
|
17
|
+
gem.description = <<'EOS'
|
18
|
+
Bcbiff checks the Inbox folder on an IMAP server for unread mails and
|
19
|
+
sends a notification for each. Ideal for enabling push notification
|
20
|
+
for your Gmail account using Boxcar.
|
21
|
+
EOS
|
22
|
+
gem.summary = %q{bcbiff(1) - Boxcar based IMAP biff}
|
9
23
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
s.extra_rdoc_files = [
|
24
|
+
gem.files = `git ls-files`.split($/)
|
25
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
26
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
27
|
+
gem.require_paths = ["lib"]
|
28
|
+
|
29
|
+
gem.extra_rdoc_files = [
|
17
30
|
"LICENSE.txt",
|
18
31
|
"README.md"
|
19
32
|
]
|
20
|
-
s.files = [
|
21
|
-
".document",
|
22
|
-
"Gemfile",
|
23
|
-
"Gemfile.lock",
|
24
|
-
"LICENSE.txt",
|
25
|
-
"README.md",
|
26
|
-
"Rakefile",
|
27
|
-
"bcbiff.gemspec",
|
28
|
-
"bin/bcbiff",
|
29
|
-
"lib/bcbiff.rb"
|
30
|
-
]
|
31
|
-
s.homepage = "http://github.com/knu/bcbiff"
|
32
|
-
s.licenses = ["2-clause BSDL"]
|
33
|
-
s.require_paths = ["lib"]
|
34
|
-
s.required_ruby_version = Gem::Requirement.new(">= 1.8.7")
|
35
|
-
s.rubygems_version = "1.8.10"
|
36
|
-
s.summary = "bcbiff(1) - Boxcar based IMAP biff"
|
37
33
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
42
|
-
s.add_runtime_dependency(%q<mail>, [">= 0"])
|
43
|
-
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
44
|
-
s.add_development_dependency(%q<jeweler>, ["~> 1.6.4"])
|
45
|
-
s.add_development_dependency(%q<rcov>, [">= 0"])
|
46
|
-
else
|
47
|
-
s.add_dependency(%q<mail>, [">= 0"])
|
48
|
-
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
49
|
-
s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
|
50
|
-
s.add_dependency(%q<rcov>, [">= 0"])
|
51
|
-
end
|
52
|
-
else
|
53
|
-
s.add_dependency(%q<mail>, [">= 0"])
|
54
|
-
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
55
|
-
s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
|
56
|
-
s.add_dependency(%q<rcov>, [">= 0"])
|
57
|
-
end
|
34
|
+
gem.add_runtime_dependency("mail", [">= 0"])
|
35
|
+
gem.add_development_dependency("rdoc", ["> 2.4.2"])
|
36
|
+
gem.add_development_dependency("bundler", [">= 1.2"])
|
58
37
|
end
|
59
|
-
|
data/lib/bcbiff.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
#
|
4
4
|
# bcbiff(1) - Boxcar based IMAP biff
|
5
5
|
#
|
6
|
-
# Copyright (c) 2011 Akinori MUSHA
|
6
|
+
# Copyright (c) 2011, 2012 Akinori MUSHA
|
7
7
|
#
|
8
8
|
# All rights reserved.
|
9
9
|
#
|
@@ -28,13 +28,19 @@
|
|
28
28
|
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
29
29
|
# SUCH DAMAGE.
|
30
30
|
|
31
|
+
if defined?(Encoding)
|
32
|
+
Encoding.default_external = Encoding::UTF_8
|
33
|
+
else
|
34
|
+
$KCODE = 'u'
|
35
|
+
end
|
36
|
+
|
31
37
|
require 'rubygems'
|
32
38
|
require 'net/imap'
|
33
39
|
require 'yaml'
|
34
40
|
require 'mail'
|
35
41
|
require 'shellwords'
|
36
42
|
|
37
|
-
BCBIFF_VERSION = '0.
|
43
|
+
BCBIFF_VERSION = '0.3.0'
|
38
44
|
|
39
45
|
CERTS_PATHS = [
|
40
46
|
'/etc/ssl/cert.pem', # FreeBSD
|
@@ -47,6 +53,7 @@ CERTS_PATH = CERTS_PATHS.find { |f| File.exist?(f) }
|
|
47
53
|
IDCACHE_FILE = '~/Maildir/idcache.%s.yml'
|
48
54
|
IDCACHE_SIZE = 100
|
49
55
|
BCBIFF_FILE = '~/.bcbiff'
|
56
|
+
ADDRESSES_FILE = '~/.addresses'
|
50
57
|
|
51
58
|
def main(argv)
|
52
59
|
accounts = config[:accounts]
|
@@ -79,6 +86,8 @@ Then add `:certs_path: /path/to/pem` to #{BCBIFF_FILE}.
|
|
79
86
|
exit 1
|
80
87
|
end
|
81
88
|
|
89
|
+
read_addresses
|
90
|
+
|
82
91
|
accounts.each { |options|
|
83
92
|
check_mails(options)
|
84
93
|
}
|
@@ -121,6 +130,34 @@ def certs_path
|
|
121
130
|
$certs_path ||= config[:certs_path] || CERTS_PATH
|
122
131
|
end
|
123
132
|
|
133
|
+
def read_addresses
|
134
|
+
$display_address = {}
|
135
|
+
|
136
|
+
begin
|
137
|
+
content = File.read(ADDRESSES_FILE)
|
138
|
+
rescue
|
139
|
+
return
|
140
|
+
end
|
141
|
+
|
142
|
+
content.each_line { |line|
|
143
|
+
line.chomp!
|
144
|
+
address, nickname, fullname = line.split("\t").map { |field|
|
145
|
+
if m = field.match(/\A"(.*)"\z/)
|
146
|
+
m[1].gsub(/\\(.)/, "\\1")
|
147
|
+
else
|
148
|
+
field
|
149
|
+
end
|
150
|
+
}
|
151
|
+
begin
|
152
|
+
addr = Mail::Address.new(address)
|
153
|
+
addr.display_name = nickname
|
154
|
+
$display_address[address.downcase] = addr.to_s
|
155
|
+
rescue
|
156
|
+
end
|
157
|
+
}
|
158
|
+
rescue
|
159
|
+
end
|
160
|
+
|
124
161
|
def check_mails(options)
|
125
162
|
#Net::IMAP.debug = true
|
126
163
|
mailto = options[:mailto]
|
@@ -146,8 +183,8 @@ def check_mails(options)
|
|
146
183
|
next if msgids.include?(msgid)
|
147
184
|
msgids << msgid
|
148
185
|
|
149
|
-
(header = mail.header).fields.each { |
|
150
|
-
case name
|
186
|
+
(header = mail.header).fields.map(&:name).each { |name|
|
187
|
+
case name
|
151
188
|
when /\A(From|Subject|Date)\z/i
|
152
189
|
# preserve
|
153
190
|
else
|
@@ -155,9 +192,18 @@ def check_mails(options)
|
|
155
192
|
end
|
156
193
|
}
|
157
194
|
|
158
|
-
|
159
|
-
|
160
|
-
}
|
195
|
+
mail.from = mail[:from].field.addrs.map { |addr|
|
196
|
+
$display_address[addr.address.downcase] || addr.to_s
|
197
|
+
}.join(', ')
|
198
|
+
|
199
|
+
begin
|
200
|
+
encoded = mail.encoded
|
201
|
+
open("| sendmail #{mailto.shellescape}", 'w') { |sendmail|
|
202
|
+
sendmail.print encoded
|
203
|
+
}
|
204
|
+
rescue => e
|
205
|
+
STDERR.puts "%s: %s" % [msgid, e.message]
|
206
|
+
end
|
161
207
|
}
|
162
208
|
}
|
163
209
|
msgids.slice!(0...-IDCACHE_SIZE) if msgids.size > IDCACHE_SIZE
|
metadata
CHANGED
@@ -1,97 +1,83 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: bcbiff
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.3.0
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 2
|
9
|
-
- 1
|
10
|
-
version: 0.2.1
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Akinori MUSHA
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
- !ruby/object:Gem::Dependency
|
21
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
22
|
-
none: false
|
23
|
-
requirements:
|
24
|
-
- - ">="
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
hash: 3
|
27
|
-
segments:
|
28
|
-
- 0
|
29
|
-
version: "0"
|
30
|
-
version_requirements: *id001
|
12
|
+
date: 2013-02-14 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
31
15
|
name: mail
|
32
|
-
|
33
|
-
type: :runtime
|
34
|
-
- !ruby/object:Gem::Dependency
|
35
|
-
requirement: &id002 !ruby/object:Gem::Requirement
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
36
17
|
none: false
|
37
|
-
requirements:
|
38
|
-
- -
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
|
41
|
-
|
42
|
-
- 1
|
43
|
-
- 0
|
44
|
-
- 0
|
45
|
-
version: 1.0.0
|
46
|
-
version_requirements: *id002
|
47
|
-
name: bundler
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
48
23
|
prerelease: false
|
49
|
-
|
50
|
-
- !ruby/object:Gem::Dependency
|
51
|
-
requirement: &id003 !ruby/object:Gem::Requirement
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
25
|
none: false
|
53
|
-
requirements:
|
54
|
-
- -
|
55
|
-
- !ruby/object:Gem::Version
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
- 4
|
61
|
-
version: 1.6.4
|
62
|
-
version_requirements: *id003
|
63
|
-
name: jeweler
|
64
|
-
prerelease: false
|
65
|
-
type: :development
|
66
|
-
- !ruby/object:Gem::Dependency
|
67
|
-
requirement: &id004 !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rdoc
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
68
33
|
none: false
|
69
|
-
requirements:
|
70
|
-
- -
|
71
|
-
- !ruby/object:Gem::Version
|
72
|
-
|
73
|
-
|
74
|
-
- 0
|
75
|
-
version: "0"
|
76
|
-
version_requirements: *id004
|
77
|
-
name: rcov
|
34
|
+
requirements:
|
35
|
+
- - ! '>'
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 2.4.2
|
38
|
+
type: :development
|
78
39
|
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>'
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 2.4.2
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: bundler
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '1.2'
|
79
54
|
type: :development
|
80
|
-
|
81
|
-
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.2'
|
62
|
+
description: ! 'Bcbiff checks the Inbox folder on an IMAP server for unread mails
|
63
|
+
and
|
64
|
+
|
82
65
|
sends a notification for each. Ideal for enabling push notification
|
66
|
+
|
83
67
|
for your Gmail account using Boxcar.
|
84
68
|
|
85
|
-
|
86
|
-
|
69
|
+
'
|
70
|
+
email:
|
71
|
+
- knu@idaemons.org
|
72
|
+
executables:
|
87
73
|
- bcbiff
|
88
74
|
extensions: []
|
89
|
-
|
90
|
-
extra_rdoc_files:
|
75
|
+
extra_rdoc_files:
|
91
76
|
- LICENSE.txt
|
92
77
|
- README.md
|
93
|
-
files:
|
78
|
+
files:
|
94
79
|
- .document
|
80
|
+
- .gitignore
|
95
81
|
- Gemfile
|
96
82
|
- Gemfile.lock
|
97
83
|
- LICENSE.txt
|
@@ -100,40 +86,29 @@ files:
|
|
100
86
|
- bcbiff.gemspec
|
101
87
|
- bin/bcbiff
|
102
88
|
- lib/bcbiff.rb
|
103
|
-
homepage:
|
104
|
-
licenses:
|
89
|
+
homepage: https://github.com/knu/bcbiff
|
90
|
+
licenses:
|
105
91
|
- 2-clause BSDL
|
106
92
|
post_install_message:
|
107
93
|
rdoc_options: []
|
108
|
-
|
109
|
-
require_paths:
|
94
|
+
require_paths:
|
110
95
|
- lib
|
111
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
96
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
112
97
|
none: false
|
113
|
-
requirements:
|
114
|
-
- -
|
115
|
-
- !ruby/object:Gem::Version
|
116
|
-
|
117
|
-
|
118
|
-
- 1
|
119
|
-
- 8
|
120
|
-
- 7
|
121
|
-
version: 1.8.7
|
122
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
123
103
|
none: false
|
124
|
-
requirements:
|
125
|
-
- -
|
126
|
-
- !ruby/object:Gem::Version
|
127
|
-
|
128
|
-
segments:
|
129
|
-
- 0
|
130
|
-
version: "0"
|
104
|
+
requirements:
|
105
|
+
- - ! '>='
|
106
|
+
- !ruby/object:Gem::Version
|
107
|
+
version: '0'
|
131
108
|
requirements: []
|
132
|
-
|
133
109
|
rubyforge_project:
|
134
|
-
rubygems_version: 1.8.
|
110
|
+
rubygems_version: 1.8.24
|
135
111
|
signing_key:
|
136
112
|
specification_version: 3
|
137
113
|
summary: bcbiff(1) - Boxcar based IMAP biff
|
138
114
|
test_files: []
|
139
|
-
|