ruby-msg 1.5.1 → 1.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.
- checksums.yaml +7 -0
- data/COPYING +20 -0
- data/ChangeLog +104 -0
- data/Rakefile +29 -54
- data/bin/mapitool +1 -2
- data/lib/mapi.rb +3 -107
- data/lib/mapi/base.rb +103 -0
- data/lib/mapi/convert/note-mime.rb +1 -1
- data/lib/mapi/convert/note-tmail.rb +1 -1
- data/lib/{mime.rb → mapi/mime.rb} +0 -0
- data/lib/mapi/version.rb +3 -0
- data/ruby-msg.gemspec +35 -0
- data/test/test_mime.rb +2 -3
- metadata +68 -85
- data/FIXES +0 -56
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: a44d1dd66134f46841a1842c8bcbbeffe895accf
|
4
|
+
data.tar.gz: 26e85df3e4ea78233a5ec04e78003318479f66e1
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 1501d2ba188801e3458db922d7992c15131a6405992d05c629baec93c80efb06b86ed93c56861ace5e8054684e3f7f9b1271528783559aa359a3008698af2aeb
|
7
|
+
data.tar.gz: a68b2f5c4f2e4a1a35abf0ff3da414f8afdf82af59d743b20f37791b6f14d4a91eb59365f22122beb75960cb022e8509bc34df6bc1fc1164df81d10270d4bf45
|
data/COPYING
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2007-2014 Charles Lowe
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
of this software and associated documentation files (the "Software"), to deal
|
5
|
+
in the Software without restriction, including without limitation the rights
|
6
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
copies of the Software, and to permit persons to whom the Software is
|
8
|
+
furnished to do so, subject to the following conditions:
|
9
|
+
|
10
|
+
The above copyright notice and this permission notice shall be included in
|
11
|
+
all copies or substantial portions of the Software.
|
12
|
+
|
13
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
+
THE SOFTWARE.
|
20
|
+
|
data/ChangeLog
ADDED
@@ -0,0 +1,104 @@
|
|
1
|
+
== 1.5.2 / 2014-08-20
|
2
|
+
|
3
|
+
- Move mime.rb file to avoid conflicts with mime_types gem (github #7,
|
4
|
+
blerins).
|
5
|
+
- Minor fix to mapitool for ruby >= 1.9.
|
6
|
+
- Alway require mapi/convert (indirect fix for missed step in README,
|
7
|
+
github #6).
|
8
|
+
- Various minor cleanups.
|
9
|
+
|
10
|
+
== 1.5.1 / 2012-07-03
|
11
|
+
|
12
|
+
- Fix handling of different body types (issue #14). Was breaking on
|
13
|
+
files without RTF content since 8933c26e, and also failing on files
|
14
|
+
where PR_BODY_HTML was a string rather than a stream.
|
15
|
+
- Move classes from RTF into Mapi::RTF (github #4).
|
16
|
+
|
17
|
+
== 1.5.0 / 2011-05-18
|
18
|
+
|
19
|
+
- Fixes for ruby 1.9.
|
20
|
+
- Move Mime into the Mapi module namespace (crowbot).
|
21
|
+
- Use ascii regex flag to avoid unicode probs (crowbot).
|
22
|
+
|
23
|
+
== 1.4.0 / 2008-10-12
|
24
|
+
|
25
|
+
- Initial simple msg test case.
|
26
|
+
- Update TODO, stripping out all the redundant ole stuff.
|
27
|
+
- Fix property set guids to use the new Ole::Types::Clsid type.
|
28
|
+
- Add block form of Msg.open
|
29
|
+
- Fix file requires for running tests individually.
|
30
|
+
- Update pst RangesIO subclasses for changes in ruby-ole.
|
31
|
+
- Merge initial pst reading code (converted from libpst).
|
32
|
+
- Pretty big pst refactoring, adding initial outlook 2003 pst support.
|
33
|
+
- Flesh out move to mapi to clean up the way pst hijacks the msg
|
34
|
+
classes currently.
|
35
|
+
- Add a ChangeLog :).
|
36
|
+
- Update README, by converting Home.wiki with wiki2rdoc converter.
|
37
|
+
- Separate out generic mapi object code from msg code, and separate out
|
38
|
+
conversion code.
|
39
|
+
- Add decent set of Mapi and Msg unit tests, approaching ~55% code coverage,
|
40
|
+
not including pst.
|
41
|
+
- Add TMail note conversion alternative, to eventually allow removal of
|
42
|
+
custom Mime class.
|
43
|
+
- Expose experimental pst support through renamed mapitool program.
|
44
|
+
|
45
|
+
== 1.3.1 / 2007-08-21
|
46
|
+
|
47
|
+
- Add fix for issue #2, and #4.
|
48
|
+
- Move ole code to ruby-ole project, and depend on it.
|
49
|
+
|
50
|
+
== 1.2.17 / 2007-05-13
|
51
|
+
|
52
|
+
(This was last release before splitting out ruby-ole. subsequent bug fix
|
53
|
+
point releases 1-3 were made directly on the gem, not reflected in the
|
54
|
+
repository, though the fixes were also forward-ported.)
|
55
|
+
|
56
|
+
- Update Ole::Storage backend, finalising api for split to separate
|
57
|
+
library.
|
58
|
+
|
59
|
+
== 1.2.16 / 2007-04-28
|
60
|
+
|
61
|
+
- Some minor fixes to msg parser.
|
62
|
+
- Extending RTF and body conversion support.
|
63
|
+
- Initial look at possible wmf conversion for embedded images.
|
64
|
+
- Add initial cli converter tool
|
65
|
+
- Add rdoc to ole/storage, and msg/properties
|
66
|
+
- Add streaming IO support to Ole::Storage, and use it in Msg::Properties
|
67
|
+
- Updates to test cases
|
68
|
+
- Add README, and update TODO
|
69
|
+
- Convert rtf support tools in c to small ruby class.
|
70
|
+
- Merge preliminary write support for Ole::Storage, as well as preliminary
|
71
|
+
filesystem api.
|
72
|
+
|
73
|
+
== 1.2.13 / 2007-01-22
|
74
|
+
|
75
|
+
- Nested msg support
|
76
|
+
|
77
|
+
== 1.2.10 / 2007-01-21
|
78
|
+
|
79
|
+
- Add initial vcard support.
|
80
|
+
- Implement a named properties map, for vcard conversion.
|
81
|
+
- Add orderedhash to Mime for keeping header order
|
82
|
+
- Fix line endings in lib/mime
|
83
|
+
- First released version
|
84
|
+
|
85
|
+
== <= 1.2.9 / 2007-01-11..2007-01-19
|
86
|
+
|
87
|
+
(Haven't bothered to note exact versions and dates - nothing here was released.
|
88
|
+
can look at history of lib/msg.rb to see exact VERSION at each commit.)
|
89
|
+
|
90
|
+
- Merged most of the named property work.
|
91
|
+
- Added some test files.
|
92
|
+
- Update svn:ignore, to exclude test messages and ole files which I can't
|
93
|
+
release. Need to get some clean files for use in test cases.
|
94
|
+
Also excluding source to the mapitags files for the moment.
|
95
|
+
A lot of it is not redistributable
|
96
|
+
- Added a converter to extract embedded html in rtf. Downloaded somewhere,
|
97
|
+
source unknown.
|
98
|
+
- Minor fix to ole/storage.rb, after new OleDir#type behaviour
|
99
|
+
- Imported support.rb, replacing previously required std.rb
|
100
|
+
- Added initial support for parsing times in Msg::Properties.
|
101
|
+
- Imported some rtf decompression code and minor updates.
|
102
|
+
- Cleaned up the ole class a bit
|
103
|
+
- Fixed OleDir#data method using sb_blocks map (see POLE).
|
104
|
+
|
data/Rakefile
CHANGED
@@ -1,77 +1,52 @@
|
|
1
|
-
require '
|
1
|
+
require 'rubygems'
|
2
2
|
require 'rake/testtask'
|
3
|
-
require 'rake/packagetask'
|
4
|
-
require 'rake/gempackagetask'
|
5
3
|
|
6
4
|
require 'rbconfig'
|
7
5
|
require 'fileutils'
|
8
6
|
|
9
|
-
|
10
|
-
|
11
|
-
require 'mapi/msg'
|
12
|
-
|
13
|
-
PKG_NAME = 'ruby-msg'
|
14
|
-
PKG_VERSION = Mapi::VERSION
|
7
|
+
spec = eval File.read('ruby-msg.gemspec')
|
15
8
|
|
16
9
|
task :default => [:test]
|
17
10
|
|
18
|
-
Rake::TestTask.new
|
11
|
+
Rake::TestTask.new do |t|
|
19
12
|
t.test_files = FileList["test/test_*.rb"] - ['test/test_pst.rb']
|
20
13
|
t.warning = false
|
21
14
|
t.verbose = true
|
22
15
|
end
|
23
16
|
|
24
17
|
begin
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
Rcov::RcovTask.new do |t|
|
29
|
-
t.test_files = FileList['test/test*.rb']
|
30
|
-
t.ruby_opts << "-Ilib" # in order to use this rcov
|
31
|
-
t.rcov_opts << "--xrefs" # comment to disable cross-references
|
32
|
-
t.rcov_opts << "--exclude /usr/local/lib/site_ruby"
|
18
|
+
Rake::TestTask.new(:coverage) do |t|
|
19
|
+
t.test_files = FileList["test/test_*.rb"] - ['test/test_pst.rb']
|
20
|
+
t.warning = false
|
33
21
|
t.verbose = true
|
22
|
+
t.ruby_opts = ['-rsimplecov -e "SimpleCov.start; load(ARGV.shift)"']
|
34
23
|
end
|
35
24
|
rescue LoadError
|
36
|
-
#
|
37
|
-
end
|
38
|
-
|
39
|
-
Rake::RDocTask.new do |t|
|
40
|
-
t.rdoc_dir = 'doc'
|
41
|
-
t.title = "#{PKG_NAME} documentation"
|
42
|
-
t.options += %w[--main README --line-numbers --inline-source --tab-width 2]
|
43
|
-
t.rdoc_files.include 'lib/**/*.rb'
|
44
|
-
t.rdoc_files.include 'README'
|
25
|
+
# SimpleCov not available
|
45
26
|
end
|
46
27
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
s.files += FileList['lib/**/*.rb', 'test/test_*.rb', 'bin/*']
|
60
|
-
|
61
|
-
s.has_rdoc = true
|
62
|
-
s.extra_rdoc_files = ['README']
|
63
|
-
s.rdoc_options += ['--main', 'README',
|
64
|
-
'--title', "#{PKG_NAME} documentation",
|
65
|
-
'--tab-width', '2']
|
66
|
-
|
67
|
-
s.add_dependency 'ruby-ole', '>=1.2.8'
|
68
|
-
s.add_dependency 'vpim', '>=0.360'
|
28
|
+
begin
|
29
|
+
require 'rdoc/task'
|
30
|
+
RDoc::Task.new do |t|
|
31
|
+
t.rdoc_dir = 'doc'
|
32
|
+
t.rdoc_files.include 'lib/**/*.rb'
|
33
|
+
t.rdoc_files.include 'README', 'ChangeLog'
|
34
|
+
t.title = "#{PKG_NAME} documentation"
|
35
|
+
t.options += %w[--line-numbers --inline-source --tab-width 2]
|
36
|
+
t.main = 'README'
|
37
|
+
end
|
38
|
+
rescue LoadError
|
39
|
+
# RDoc not available or too old (<2.4.2)
|
69
40
|
end
|
70
41
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
42
|
+
begin
|
43
|
+
require 'rubygems/package_task'
|
44
|
+
Gem::PackageTask.new(spec) do |t|
|
45
|
+
t.need_tar = true
|
46
|
+
t.need_zip = false
|
47
|
+
t.package_dir = 'build'
|
48
|
+
end
|
49
|
+
rescue LoadError
|
50
|
+
# RubyGems too old (<1.3.2)
|
76
51
|
end
|
77
52
|
|
data/bin/mapitool
CHANGED
@@ -6,7 +6,6 @@ require 'optparse'
|
|
6
6
|
require 'rubygems'
|
7
7
|
require 'mapi/msg'
|
8
8
|
require 'mapi/pst'
|
9
|
-
require 'mapi/convert'
|
10
9
|
require 'time'
|
11
10
|
|
12
11
|
class Mapitool
|
@@ -107,7 +106,7 @@ class Mapitool
|
|
107
106
|
# is the only one that can be robuslty un-quoted. evolution doesn't use this!
|
108
107
|
f.puts "From mapitool@localhost #{Time.now.rfc2822}"
|
109
108
|
#munge_headers mime, opts
|
110
|
-
data.each do |line|
|
109
|
+
data.lines.each do |line|
|
111
110
|
if line =~ /^>*From /o
|
112
111
|
f.print '>' + line
|
113
112
|
else
|
data/lib/mapi.rb
CHANGED
@@ -1,109 +1,5 @@
|
|
1
|
+
require 'mapi/version'
|
2
|
+
require 'mapi/base'
|
1
3
|
require 'mapi/types'
|
2
4
|
require 'mapi/property_set'
|
3
|
-
|
4
|
-
module Mapi
|
5
|
-
VERSION = '1.5.1'
|
6
|
-
|
7
|
-
#
|
8
|
-
# Mapi::Item is the base class used for all mapi objects, and is purely a
|
9
|
-
# property set container
|
10
|
-
#
|
11
|
-
class Item
|
12
|
-
attr_reader :properties
|
13
|
-
alias props properties
|
14
|
-
|
15
|
-
# +properties+ should be a PropertySet instance.
|
16
|
-
def initialize properties
|
17
|
-
@properties = properties
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
# a general attachment class. is subclassed by Msg and Pst attachment classes
|
22
|
-
class Attachment < Item
|
23
|
-
def filename
|
24
|
-
props.attach_long_filename || props.attach_filename
|
25
|
-
end
|
26
|
-
|
27
|
-
def data
|
28
|
-
@embedded_msg || @embedded_ole || props.attach_data
|
29
|
-
end
|
30
|
-
|
31
|
-
# with new stream work, its possible to not have the whole thing in memory at one time,
|
32
|
-
# just to save an attachment
|
33
|
-
#
|
34
|
-
# a = msg.attachments.first
|
35
|
-
# a.save open(File.basename(a.filename || 'attachment'), 'wb')
|
36
|
-
def save io
|
37
|
-
raise "can only save binary data blobs, not ole dirs" if @embedded_ole
|
38
|
-
data.each_read { |chunk| io << chunk }
|
39
|
-
end
|
40
|
-
|
41
|
-
def inspect
|
42
|
-
"#<#{self.class.to_s[/\w+$/]}" +
|
43
|
-
(filename ? " filename=#{filename.inspect}" : '') +
|
44
|
-
(@embedded_ole ? " embedded_type=#{@embedded_ole.embedded_type.inspect}" : '') + ">"
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
class Recipient < Item
|
49
|
-
# some kind of best effort guess for converting to standard mime style format.
|
50
|
-
# there are some rules for encoding non 7bit stuff in mail headers. should obey
|
51
|
-
# that here, as these strings could be unicode
|
52
|
-
# email_address will be an EX:/ address (X.400?), unless external recipient. the
|
53
|
-
# other two we try first.
|
54
|
-
# consider using entry id for this too.
|
55
|
-
def name
|
56
|
-
name = props.transmittable_display_name || props.display_name
|
57
|
-
# dequote
|
58
|
-
name[/^'(.*)'/, 1] or name rescue nil
|
59
|
-
end
|
60
|
-
|
61
|
-
def email
|
62
|
-
props.smtp_address || props.org_email_addr || props.email_address
|
63
|
-
end
|
64
|
-
|
65
|
-
RECIPIENT_TYPES = { 0 => :orig, 1 => :to, 2 => :cc, 3 => :bcc }
|
66
|
-
def type
|
67
|
-
RECIPIENT_TYPES[props.recipient_type]
|
68
|
-
end
|
69
|
-
|
70
|
-
def to_s
|
71
|
-
if name = self.name and !name.empty? and email && name != email
|
72
|
-
%{"#{name}" <#{email}>}
|
73
|
-
else
|
74
|
-
email || name
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
def inspect
|
79
|
-
"#<#{self.class.to_s[/\w+$/]}:#{self.to_s.inspect}>"
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
# i refer to it as a message (as does mapi), although perhaps Item is better, as its a more general
|
84
|
-
# concept than a message, as used in Pst files. though maybe i'll switch to using
|
85
|
-
# Mapi::Object as the base class there.
|
86
|
-
#
|
87
|
-
# IMessage essentially, but there's also stuff like IMAPIFolder etc. so, for this to form
|
88
|
-
# basis for PST Item, it'd need to be more general.
|
89
|
-
class Message < Item
|
90
|
-
# these 2 collections should be provided by our subclasses
|
91
|
-
def attachments
|
92
|
-
raise NotImplementedError
|
93
|
-
end
|
94
|
-
|
95
|
-
def recipients
|
96
|
-
raise NotImplementedError
|
97
|
-
end
|
98
|
-
|
99
|
-
def inspect
|
100
|
-
str = %w[message_class from to subject].map do |key|
|
101
|
-
" #{key}=#{props.send(key).inspect}"
|
102
|
-
end.compact.join
|
103
|
-
str << " recipients=#{recipients.inspect}"
|
104
|
-
str << " attachments=#{attachments.inspect}"
|
105
|
-
"#<#{self.class.to_s[/\w+$/]}#{str}>"
|
106
|
-
end
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
5
|
+
require 'mapi/convert'
|
data/lib/mapi/base.rb
ADDED
@@ -0,0 +1,103 @@
|
|
1
|
+
module Mapi
|
2
|
+
#
|
3
|
+
# Mapi::Item is the base class used for all mapi objects, and is purely a
|
4
|
+
# property set container
|
5
|
+
#
|
6
|
+
class Item
|
7
|
+
attr_reader :properties
|
8
|
+
alias props properties
|
9
|
+
|
10
|
+
# +properties+ should be a PropertySet instance.
|
11
|
+
def initialize properties
|
12
|
+
@properties = properties
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
# a general attachment class. is subclassed by Msg and Pst attachment classes
|
17
|
+
class Attachment < Item
|
18
|
+
def filename
|
19
|
+
props.attach_long_filename || props.attach_filename
|
20
|
+
end
|
21
|
+
|
22
|
+
def data
|
23
|
+
@embedded_msg || @embedded_ole || props.attach_data
|
24
|
+
end
|
25
|
+
|
26
|
+
# with new stream work, its possible to not have the whole thing in memory at one time,
|
27
|
+
# just to save an attachment
|
28
|
+
#
|
29
|
+
# a = msg.attachments.first
|
30
|
+
# a.save open(File.basename(a.filename || 'attachment'), 'wb')
|
31
|
+
def save io
|
32
|
+
raise "can only save binary data blobs, not ole dirs" if @embedded_ole
|
33
|
+
data.each_read { |chunk| io << chunk }
|
34
|
+
end
|
35
|
+
|
36
|
+
def inspect
|
37
|
+
"#<#{self.class.to_s[/\w+$/]}" +
|
38
|
+
(filename ? " filename=#{filename.inspect}" : '') +
|
39
|
+
(@embedded_ole ? " embedded_type=#{@embedded_ole.embedded_type.inspect}" : '') + ">"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
class Recipient < Item
|
44
|
+
# some kind of best effort guess for converting to standard mime style format.
|
45
|
+
# there are some rules for encoding non 7bit stuff in mail headers. should obey
|
46
|
+
# that here, as these strings could be unicode
|
47
|
+
# email_address will be an EX:/ address (X.400?), unless external recipient. the
|
48
|
+
# other two we try first.
|
49
|
+
# consider using entry id for this too.
|
50
|
+
def name
|
51
|
+
name = props.transmittable_display_name || props.display_name
|
52
|
+
# dequote
|
53
|
+
name[/^'(.*)'/, 1] or name rescue nil
|
54
|
+
end
|
55
|
+
|
56
|
+
def email
|
57
|
+
props.smtp_address || props.org_email_addr || props.email_address
|
58
|
+
end
|
59
|
+
|
60
|
+
RECIPIENT_TYPES = { 0 => :orig, 1 => :to, 2 => :cc, 3 => :bcc }
|
61
|
+
def type
|
62
|
+
RECIPIENT_TYPES[props.recipient_type]
|
63
|
+
end
|
64
|
+
|
65
|
+
def to_s
|
66
|
+
if name = self.name and !name.empty? and email && name != email
|
67
|
+
%{"#{name}" <#{email}>}
|
68
|
+
else
|
69
|
+
email || name
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def inspect
|
74
|
+
"#<#{self.class.to_s[/\w+$/]}:#{self.to_s.inspect}>"
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
# i refer to it as a message (as does mapi), although perhaps Item is better, as its a more general
|
79
|
+
# concept than a message, as used in Pst files. though maybe i'll switch to using
|
80
|
+
# Mapi::Object as the base class there.
|
81
|
+
#
|
82
|
+
# IMessage essentially, but there's also stuff like IMAPIFolder etc. so, for this to form
|
83
|
+
# basis for PST Item, it'd need to be more general.
|
84
|
+
class Message < Item
|
85
|
+
# these 2 collections should be provided by our subclasses
|
86
|
+
def attachments
|
87
|
+
raise NotImplementedError
|
88
|
+
end
|
89
|
+
|
90
|
+
def recipients
|
91
|
+
raise NotImplementedError
|
92
|
+
end
|
93
|
+
|
94
|
+
def inspect
|
95
|
+
str = %w[message_class from to subject].map do |key|
|
96
|
+
" #{key}=#{props.send(key).inspect}"
|
97
|
+
end.compact.join
|
98
|
+
str << " recipients=#{recipients.inspect}"
|
99
|
+
str << " attachments=#{attachments.inspect}"
|
100
|
+
"#<#{self.class.to_s[/\w+$/]}#{str}>"
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
File without changes
|
data/lib/mapi/version.rb
ADDED
data/ruby-msg.gemspec
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
$:.unshift File.dirname(__FILE__) + '/lib'
|
2
|
+
require 'mapi/version'
|
3
|
+
|
4
|
+
PKG_NAME = 'ruby-msg'
|
5
|
+
PKG_VERSION = Mapi::VERSION
|
6
|
+
|
7
|
+
Gem::Specification.new do |s|
|
8
|
+
s.name = PKG_NAME
|
9
|
+
s.version = PKG_VERSION
|
10
|
+
s.summary = %q{Ruby Msg library.}
|
11
|
+
s.description = %q{A library for reading and converting Outlook msg and pst files (mapi message stores).}
|
12
|
+
s.authors = ['Charles Lowe']
|
13
|
+
s.email = %q{aquasync@gmail.com}
|
14
|
+
s.homepage = %q{http://code.google.com/p/ruby-msg}
|
15
|
+
s.rubyforge_project = %q{ruby-msg}
|
16
|
+
|
17
|
+
s.executables = ['mapitool']
|
18
|
+
s.files = ['README', 'COPYING', 'Rakefile', 'ChangeLog', 'ruby-msg.gemspec']
|
19
|
+
s.files += Dir.glob('data/*.yaml')
|
20
|
+
s.files += Dir.glob('lib/**/*.rb')
|
21
|
+
s.files += Dir.glob('test/test_*.rb')
|
22
|
+
s.files += Dir.glob('bin/*')
|
23
|
+
|
24
|
+
s.has_rdoc = true
|
25
|
+
s.extra_rdoc_files = ['README', 'ChangeLog']
|
26
|
+
s.rdoc_options += [
|
27
|
+
'--main', 'README',
|
28
|
+
'--title', "#{PKG_NAME} documentation",
|
29
|
+
'--tab-width', '2'
|
30
|
+
]
|
31
|
+
|
32
|
+
s.add_dependency 'ruby-ole', '>=1.2.8'
|
33
|
+
s.add_dependency 'vpim', '>=0.360'
|
34
|
+
end
|
35
|
+
|
data/test/test_mime.rb
CHANGED
@@ -1,10 +1,9 @@
|
|
1
1
|
#! /usr/bin/ruby -w
|
2
2
|
|
3
|
-
|
4
|
-
$: << "#{TEST_DIR}/../lib"
|
3
|
+
$: << File.dirname(__FILE__) + '/../lib'
|
5
4
|
|
6
5
|
require 'test/unit'
|
7
|
-
require 'mime'
|
6
|
+
require 'mapi/mime'
|
8
7
|
|
9
8
|
class TestMime < Test::Unit::TestCase
|
10
9
|
# test out the way it partitions a message into parts
|
metadata
CHANGED
@@ -1,126 +1,109 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-msg
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease: false
|
6
|
-
segments:
|
7
|
-
- 1
|
8
|
-
- 5
|
9
|
-
- 1
|
10
|
-
version: 1.5.1
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.5.2
|
11
5
|
platform: ruby
|
12
|
-
authors:
|
6
|
+
authors:
|
13
7
|
- Charles Lowe
|
14
8
|
autorequire:
|
15
9
|
bindir: bin
|
16
10
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
dependencies:
|
21
|
-
- !ruby/object:Gem::Dependency
|
11
|
+
date: 2014-08-20 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
22
14
|
name: ruby-ole
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
- - ">="
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
hash: 15
|
30
|
-
segments:
|
31
|
-
- 1
|
32
|
-
- 2
|
33
|
-
- 8
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
34
19
|
version: 1.2.8
|
35
20
|
type: :runtime
|
36
|
-
version_requirements: *id001
|
37
|
-
- !ruby/object:Gem::Dependency
|
38
|
-
name: vpim
|
39
21
|
prerelease: false
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 1.2.8
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: vpim
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0.360'
|
50
34
|
type: :runtime
|
51
|
-
|
52
|
-
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0.360'
|
41
|
+
description: A library for reading and converting Outlook msg and pst files (mapi
|
42
|
+
message stores).
|
53
43
|
email: aquasync@gmail.com
|
54
|
-
executables:
|
44
|
+
executables:
|
55
45
|
- mapitool
|
56
46
|
extensions: []
|
57
|
-
|
58
|
-
extra_rdoc_files:
|
47
|
+
extra_rdoc_files:
|
59
48
|
- README
|
60
|
-
|
61
|
-
|
62
|
-
- data/types.yaml
|
63
|
-
- data/named_map.yaml
|
64
|
-
- Rakefile
|
49
|
+
- ChangeLog
|
50
|
+
files:
|
65
51
|
- README
|
66
|
-
-
|
52
|
+
- COPYING
|
53
|
+
- Rakefile
|
54
|
+
- ChangeLog
|
55
|
+
- ruby-msg.gemspec
|
67
56
|
- bin/mapitool
|
57
|
+
- data/types.yaml
|
58
|
+
- data/mapitags.yaml
|
59
|
+
- data/named_map.yaml
|
68
60
|
- lib/mapi.rb
|
69
|
-
- lib/mime.rb
|
70
61
|
- lib/orderedhash.rb
|
71
|
-
- lib/mapi/rtf.rb
|
72
|
-
- lib/mapi/property_set.rb
|
73
|
-
- lib/mapi/convert/contact.rb
|
74
|
-
- lib/mapi/convert/note-mime.rb
|
75
62
|
- lib/mapi/convert/note-tmail.rb
|
76
|
-
- lib/mapi/
|
63
|
+
- lib/mapi/convert/note-mime.rb
|
64
|
+
- lib/mapi/convert/contact.rb
|
65
|
+
- lib/mapi/version.rb
|
77
66
|
- lib/mapi/convert.rb
|
67
|
+
- lib/mapi/base.rb
|
68
|
+
- lib/mapi/property_set.rb
|
69
|
+
- lib/mapi/rtf.rb
|
78
70
|
- lib/mapi/types.rb
|
71
|
+
- lib/mapi/mime.rb
|
72
|
+
- lib/mapi/pst.rb
|
79
73
|
- lib/mapi/msg.rb
|
74
|
+
- test/test_convert_contact.rb
|
80
75
|
- test/test_property_set.rb
|
81
|
-
- test/test_convert_note.rb
|
82
76
|
- test/test_mime.rb
|
83
|
-
- test/test_convert_contact.rb
|
84
77
|
- test/test_types.rb
|
85
78
|
- test/test_msg.rb
|
86
|
-
|
79
|
+
- test/test_convert_note.rb
|
87
80
|
homepage: http://code.google.com/p/ruby-msg
|
88
81
|
licenses: []
|
89
|
-
|
82
|
+
metadata: {}
|
90
83
|
post_install_message:
|
91
|
-
rdoc_options:
|
84
|
+
rdoc_options:
|
92
85
|
- --main
|
93
86
|
- README
|
94
87
|
- --title
|
95
88
|
- ruby-msg documentation
|
96
89
|
- --tab-width
|
97
|
-
-
|
98
|
-
require_paths:
|
90
|
+
- '2'
|
91
|
+
require_paths:
|
99
92
|
- lib
|
100
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
none: false
|
111
|
-
requirements:
|
112
|
-
- - ">="
|
113
|
-
- !ruby/object:Gem::Version
|
114
|
-
hash: 3
|
115
|
-
segments:
|
116
|
-
- 0
|
117
|
-
version: "0"
|
93
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - '>='
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '0'
|
98
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - '>='
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '0'
|
118
103
|
requirements: []
|
119
|
-
|
120
104
|
rubyforge_project: ruby-msg
|
121
|
-
rubygems_version:
|
105
|
+
rubygems_version: 2.0.14
|
122
106
|
signing_key:
|
123
|
-
specification_version:
|
107
|
+
specification_version: 4
|
124
108
|
summary: Ruby Msg library.
|
125
109
|
test_files: []
|
126
|
-
|
data/FIXES
DELETED
@@ -1,56 +0,0 @@
|
|
1
|
-
FIXES
|
2
|
-
|
3
|
-
recent fixes based on importing results into evolution
|
4
|
-
|
5
|
-
1. was running into some issue with base64 encoded message/rfc822 attachments displaying
|
6
|
-
as empty. encoding them as plain solved the issue (odd).
|
7
|
-
|
8
|
-
2. problem with a large percentage of emails, not displaying as mime. turned out to be
|
9
|
-
all received from blackberry. further, turned out there was 2 content-type headers,
|
10
|
-
"Content-Type", which I add, and "Content-type". normally my override works, but I
|
11
|
-
need to handle it case insensitvely it would appear. more tricky, whats the story
|
12
|
-
with these. fixing that will probably fix that whole class of issues there.
|
13
|
-
evolution was renaming my second content type as X-Invalid-Content-Type or something.
|
14
|
-
|
15
|
-
3. another interesting one. had content-transfer-encoding set in the transport message
|
16
|
-
headers. it was set to base64. i didn't override that, so evolution "decoded" my
|
17
|
-
plaintext message into complete garbage.
|
18
|
-
fix - delete content-transfer-encoding.
|
19
|
-
|
20
|
-
4. added content-location and content-id output in the mime handling of attachments
|
21
|
-
to get some inline html/image mails to work properly.
|
22
|
-
further, the containing mime content-type must be multipart/related, not multipart/mixed,
|
23
|
-
at least for evolution, in order for the images to appear inline.
|
24
|
-
could still improve in this area. if someone drags and drops in an image, it may
|
25
|
-
be inline in the rtf version, but exchanges generates crappy html such that the image
|
26
|
-
doesn't display inline. maybe i should correct the html output in these cases as i'm
|
27
|
-
throwing away the rtf version.
|
28
|
-
|
29
|
-
5. note you may need wingdings installed. i had a lot of L and J appear in messages from
|
30
|
-
outlook users. turns out its smilies in wingdings. i think its only if word is used
|
31
|
-
as email editor and has autotext messing things up.
|
32
|
-
|
33
|
-
6. still unsure about how to do my "\r" handling.
|
34
|
-
|
35
|
-
7. need to join addresses with , instead of ; i think. evolution only shows the
|
36
|
-
first one otherwise it appears, but all when they are , separated.
|
37
|
-
|
38
|
-
8. need to solve ole storage issues with the very large file using extra bat
|
39
|
-
stuff.
|
40
|
-
|
41
|
-
9. retest a bit on evolution and thunderbird, and release. tested on a corups
|
42
|
-
of >1000 msg files, so should be starting to get pretty good quality.
|
43
|
-
|
44
|
-
10. longer term, things fall into a few basic categories:
|
45
|
-
|
46
|
-
- non mail conversions (look further into vcard, ical et al support for other
|
47
|
-
types of msg)
|
48
|
-
- further tests and robustness for what i handle now. ie, look into corner
|
49
|
-
cases covered so far, and work on the mime code. fix random charset encoding
|
50
|
-
issues, in the various weird mime ways, do header wrapping etc etc.
|
51
|
-
check fidelity of conversions, and capture some more properties as headers,
|
52
|
-
such as importance which i don't do yet.
|
53
|
-
- fix that named property bug. tidy up warnings, exceptions.
|
54
|
-
- extend conversion to make better html.
|
55
|
-
this is longer term. as i don't use the rtf, i need to make my html better.
|
56
|
-
emulating some rtf things. harder, not important atm.
|