imapstore 0.4.4 → 0.5.2
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/Rakefile +1 -1
- data/bin/imapstore +12 -7
- data/lib/imapstore.rb +1 -1
- data/lib/imapstore/imapstore.rb +62 -34
- metadata +9 -9
data/Rakefile
CHANGED
@@ -9,11 +9,11 @@ $hoe = Hoe.new('imapstore', IMAPSTORE::VERSION) do |p|
|
|
9
9
|
#p.post_install_message = 'PostInstall.txt' # TODO remove if post-install message not required
|
10
10
|
p.rubyforge_name = p.name # TODO this is default value
|
11
11
|
p.extra_deps = [
|
12
|
-
['rdoc','>= 2.2.0'],
|
13
12
|
['tmail','>= 1.2.3'],
|
14
13
|
['getoptions','>= 0.1']
|
15
14
|
]
|
16
15
|
p.extra_dev_deps = [
|
16
|
+
['rdoc','>= 2.2.0'],
|
17
17
|
['newgem', ">= #{::Newgem::VERSION}"]
|
18
18
|
]
|
19
19
|
|
data/bin/imapstore
CHANGED
@@ -3,17 +3,21 @@ $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__) + "/../lib"))
|
|
3
3
|
|
4
4
|
require 'rubygems'
|
5
5
|
require 'imapstore'
|
6
|
+
require 'rdoc/ri/ri_paths'
|
6
7
|
require 'getoptions'
|
7
8
|
#old versions of ruby require this
|
8
|
-
|
9
|
+
|
10
|
+
def print_help
|
11
|
+
puts "Usage: imapstore -c <#{COMMAND_LIST.join(', ')}> -s <subject> -d <folder> -f <file list or glob> "
|
12
|
+
puts " -i <imapstore> -x --recursive --versioned --all -t <text of message> -p password"
|
13
|
+
puts " imapstore -h"
|
14
|
+
end
|
9
15
|
|
10
16
|
COMMAND_LIST = ['ls', 'rm', 'put', 'get', 'rmdir', 'mkdir', 'quota', 'setup', 'snipplet' ]
|
11
|
-
opt = GetOptions.new(%w( help subject=s command=s dir=s files=@s recursive! versioned! all! imapstore:s x! text=s))
|
17
|
+
opt = GetOptions.new(%w( help password=s subject=s command=s dir=s files=@s recursive! versioned! all! imapstore:s x! text=s ))
|
12
18
|
|
13
19
|
if opt['help']
|
14
|
-
|
15
|
-
puts " -i <imapstore> -x --recursive --versioned --all"
|
16
|
-
puts " imapstore -h"
|
20
|
+
print_help
|
17
21
|
exit 0
|
18
22
|
end
|
19
23
|
|
@@ -27,7 +31,7 @@ all = opt['all'] || false
|
|
27
31
|
versioned = opt['versioned']
|
28
32
|
verbose = opt['x'] || false
|
29
33
|
text = opt['text'] || "no text"
|
30
|
-
|
34
|
+
password = opt['password']
|
31
35
|
|
32
36
|
|
33
37
|
|
@@ -40,7 +44,7 @@ if COMMAND_LIST.include? command
|
|
40
44
|
end
|
41
45
|
|
42
46
|
puts "Opening mailstore #{imapstore} configured in #{File.expand_path('~/.imapstore/config.yml')}" if verbose
|
43
|
-
i = IMAPSTORE::Imapstore.new(File.expand_path('~/.imapstore/config.yml'), imapstore)
|
47
|
+
i = IMAPSTORE::Imapstore.new(File.expand_path('~/.imapstore/config.yml'), imapstore, password)
|
44
48
|
puts "Mailstore #{imapstore} opened" if verbose
|
45
49
|
|
46
50
|
i.versioned=versioned if versioned!=nil
|
@@ -116,4 +120,5 @@ end
|
|
116
120
|
|
117
121
|
rescue
|
118
122
|
puts "An error has occured #{$!}"
|
123
|
+
print_help
|
119
124
|
end
|
data/lib/imapstore.rb
CHANGED
data/lib/imapstore/imapstore.rb
CHANGED
@@ -37,11 +37,13 @@ END
|
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
40
|
-
def initialize(file = File.expand_path('~/.imapstore/config.yml'), imapstore="default")
|
40
|
+
def initialize(file = File.expand_path('~/.imapstore/config.yml'), imapstore="default", password=nil)
|
41
41
|
puts "Initializing IMAP" if @verbose
|
42
42
|
@versioned = true
|
43
43
|
@verbose = false
|
44
|
-
|
44
|
+
|
45
|
+
@password = password
|
46
|
+
|
45
47
|
puts "Getting configuration file #{file} for account #{imapstore}" if @verbose
|
46
48
|
get_config(file, imapstore)
|
47
49
|
connect
|
@@ -84,6 +86,7 @@ END
|
|
84
86
|
end
|
85
87
|
|
86
88
|
def connect()
|
89
|
+
raise "No password given" if @password == nil
|
87
90
|
if !@imap && @email && @password && @imap_server && @imap_port
|
88
91
|
if(@ssl == true)
|
89
92
|
@imap = Net::IMAP.new(@imap_server, @imap_port, true)
|
@@ -113,7 +116,7 @@ END
|
|
113
116
|
|
114
117
|
#COFIGURATION SECTION
|
115
118
|
@email = aConfig[imapstore]['email']
|
116
|
-
@password = aConfig[imapstore]['password']
|
119
|
+
@password = aConfig[imapstore]['password'] if aConfig[imapstore]['password']
|
117
120
|
@store_tag = aConfig[imapstore]['store_tag'] || "IMAPSTORE"
|
118
121
|
@imap_server = aConfig[imapstore]['imap_server']
|
119
122
|
@imap_port = aConfig[imapstore]['imap_port']
|
@@ -217,9 +220,9 @@ END
|
|
217
220
|
|
218
221
|
end
|
219
222
|
|
220
|
-
|
223
|
+
def store_file( file, folder = "INBOX", subject = "")
|
221
224
|
|
222
|
-
|
225
|
+
@imap.create(folder) if !@imap.list("", folder)
|
223
226
|
|
224
227
|
size = File.size(file)
|
225
228
|
if(size > MAX_FILE_SIZE)
|
@@ -242,11 +245,7 @@ END
|
|
242
245
|
|
243
246
|
def transverse(target_folder = "INBOX", glob = /.+/, recursive = false, dot_files = false, folder_only=false)
|
244
247
|
file_list=[]
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
begin
|
248
|
+
#begin
|
250
249
|
target_folder = "" if target_folder == "/"
|
251
250
|
|
252
251
|
puts "..... fetching #{target_folder} " if @verbose
|
@@ -258,7 +257,9 @@ END
|
|
258
257
|
if ((recursive == true) && (target_folder == "" ? true : folder.name.match(/^#{target_folder}(\/.+)*$/))) || (folder.name == target_folder)
|
259
258
|
puts "..... got hit transversing #{folder.name} " if @verbose
|
260
259
|
file_list << folder.name
|
261
|
-
|
260
|
+
if(block_given?)
|
261
|
+
yield(folder.name, nil, nil, nil, nil, nil)
|
262
|
+
end
|
262
263
|
|
263
264
|
if((!folder.attr.include? :Noselect) && (folder_only==false))
|
264
265
|
|
@@ -268,45 +269,72 @@ END
|
|
268
269
|
a = @imap.fetch(message_id, "RFC822")
|
269
270
|
mail = TMail::Mail.parse(a[0].attr["RFC822"])
|
270
271
|
file_name = mail.subject.match(/^[^\[]+\[([^\]]+)\]/)[1]
|
271
|
-
|
272
|
-
|
272
|
+
puts "Considering #{file_name}" if @verbose
|
273
|
+
|
274
|
+
parts = mail.subject.match(/^[^\[]+\[[^\]]+\]\(([0-9]+)\-([0-9]+)\)/)
|
275
|
+
file_part = parts[1]
|
276
|
+
max_parts = parts[2]
|
277
|
+
if file_name.match(glob)
|
278
|
+
file_list << folder.name + "/" + file_name
|
279
|
+
yield(folder.name, file_name, message_id, mail, file_part, max_parts) if block_given?
|
280
|
+
end
|
273
281
|
end
|
274
282
|
end
|
275
283
|
end
|
276
284
|
end
|
277
|
-
rescue
|
278
|
-
end
|
285
|
+
#rescue
|
286
|
+
#end
|
279
287
|
|
280
288
|
file_list.sort
|
281
289
|
end
|
282
290
|
|
283
|
-
|
291
|
+
def ls(target_folder = "INBOX", glob = /.+/, recursive = false, dot_files = false)
|
284
292
|
transverse(target_folder, glob, recursive, dot_files, false)
|
285
|
-
|
286
|
-
|
287
|
-
def get_file(target_folder = "INBOX", glob = /.+/, recursive = false, dot_files = false)
|
288
|
-
file_list = transverse(target_folder, glob, recursive, dot_files, false) do |folder, file, message_id, mail, file_name|
|
289
|
-
|
290
|
-
if mail && mail.multipart? then
|
291
|
-
mail.parts.each do |m|
|
292
|
-
if !m.main_type
|
293
|
-
append_dir = folder.sub(/^#{target_folder}\/*/,"")
|
294
|
-
if append_dir != ""
|
295
|
-
Dir.mkdir(append_dir) if !File.exists? append_dir
|
293
|
+
end
|
296
294
|
|
297
|
-
|
298
|
-
|
299
|
-
|
295
|
+
def get_file(target_folder = "INBOX", glob = /.+/, recursive = false, dot_files = false)
|
296
|
+
multipart_files = Hash.new
|
297
|
+
file_list = transverse(target_folder, glob, recursive, dot_files, false) do |folder, file_name, message_id, mail, file_part, max_parts|
|
298
|
+
if(file_name && mail.parts)
|
299
|
+
mail.parts.each do |m|
|
300
|
+
if !m.main_type
|
301
|
+
append_dir = folder
|
302
|
+
append_dir.sub!(/^#{target_folder}\/*/,"")
|
303
|
+
if append_dir != ""
|
304
|
+
Dir.mkdir(append_dir) if !File.exists? append_dir
|
305
|
+
file_name = append_dir + "/" + file_name
|
300
306
|
end
|
301
|
-
|
307
|
+
|
308
|
+
if(file_part)
|
309
|
+
multipart_files[file_name] = max_parts if !multipart_files[file_name]
|
310
|
+
file_name = file_name + "_#{file_part}_#{max_parts}"
|
311
|
+
end
|
312
|
+
puts "Getting file #{file_name}" if @verbose
|
313
|
+
|
314
|
+
File.open(file_name,"w") do |f|
|
315
|
+
f.write(m.body)
|
316
|
+
end
|
317
|
+
end
|
318
|
+
end
|
302
319
|
end
|
303
320
|
end
|
304
|
-
|
321
|
+
|
322
|
+
multipart_files.each do |key,value|
|
323
|
+
puts "Fusing #{key} ---- #{value}" if @verbose
|
324
|
+
File.open(key,"w") do |f|
|
325
|
+
1.upto(value.to_i) do |step|
|
326
|
+
f.write(File.open("#{key}_#{step}_#{value}").read)
|
327
|
+
File.unlink("#{key}_#{step}_#{value}")
|
328
|
+
end
|
329
|
+
end
|
330
|
+
end
|
331
|
+
return file_list
|
332
|
+
end
|
305
333
|
|
306
334
|
|
307
335
|
|
308
336
|
def rm_file(target_folder = "INBOX", glob = /.+/, recursive = false, dot_files = false)
|
309
|
-
file_list = transverse(target_folder, glob, false, dot_files, false) do |folder,
|
337
|
+
file_list = transverse(target_folder, glob, false, dot_files, false) do |folder, file_name, message_id, mail, file_part, max_parts|
|
310
338
|
if file && message_id
|
311
339
|
@imap.store(message_id, "+FLAGS", [:Deleted])
|
312
340
|
@imap.expunge
|
@@ -324,7 +352,7 @@ END
|
|
324
352
|
folders = []
|
325
353
|
puts "..... Deleting #{target_folder}" if @verbose
|
326
354
|
|
327
|
-
transverse(target_folder, /.+/, recursive, dot_files, false) do |folder, file, message_id, mail,
|
355
|
+
transverse(target_folder, /.+/, recursive, dot_files, false) do |folder, file, message_id, mail, file_part, max_parts|
|
328
356
|
puts "..... assigning dir #{folder} for removal" if @verbose
|
329
357
|
folders << folder if !(folders.include? folder)
|
330
358
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: imapstore
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joan Marc Carbo Arnau
|
@@ -9,38 +9,38 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-01-
|
12
|
+
date: 2009-01-27 00:00:00 +01:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
|
-
name:
|
16
|
+
name: tmail
|
17
17
|
type: :runtime
|
18
18
|
version_requirement:
|
19
19
|
version_requirements: !ruby/object:Gem::Requirement
|
20
20
|
requirements:
|
21
21
|
- - ">="
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version:
|
23
|
+
version: 1.2.3
|
24
24
|
version:
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
|
-
name:
|
26
|
+
name: getoptions
|
27
27
|
type: :runtime
|
28
28
|
version_requirement:
|
29
29
|
version_requirements: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 1
|
33
|
+
version: "0.1"
|
34
34
|
version:
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
|
-
name:
|
37
|
-
type: :
|
36
|
+
name: rdoc
|
37
|
+
type: :development
|
38
38
|
version_requirement:
|
39
39
|
version_requirements: !ruby/object:Gem::Requirement
|
40
40
|
requirements:
|
41
41
|
- - ">="
|
42
42
|
- !ruby/object:Gem::Version
|
43
|
-
version:
|
43
|
+
version: 2.2.0
|
44
44
|
version:
|
45
45
|
- !ruby/object:Gem::Dependency
|
46
46
|
name: newgem
|