mms2r 2.3.0 → 2.4.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -2,3 +2,4 @@
2
2
  coverage/
3
3
  pkg/
4
4
  email.txt
5
+ coverage.info
data/History.txt CHANGED
@@ -1,4 +1,15 @@
1
- ### 2.3.0 / 2008-08-30 (Snakes 'n' Barrels Greatest Hits)
1
+ ### 2.4.0 / 2009-12-20 (Dr. Nanemiltred Philtendrieden - specialist on celebrity death)
2
+
3
+ * 1 new feature
4
+ * replace Hpricot with Nokogiri for html parsing of Sprint data
5
+
6
+ * 3 minor enhancements
7
+ * smartphone identities stored :
8
+ * identify Motorola Droid as a smartphone
9
+ * identify T-Mobile Dash as a smartphone
10
+ * use uuidtools for naming temp directories - kbaum
11
+
12
+ ### 2.3.0 / 2009-08-30 (Snakes 'n' Barrels Greatest Hits)
2
13
  * 5 new features
3
14
  * detect smartphone status/type based on model metadata from jpeg and tiff
4
15
  exif data using exifr gem, access exif data with MMS2R::Media#exif
data/Manifest.txt CHANGED
@@ -38,7 +38,7 @@ conf/vmpix.com.yml
38
38
  conf/vzwpix.com.yml
39
39
  conf/waw.plspictures.com.yml
40
40
  dev_tools/anonymizer.rb
41
- dev_tools/debug_sprint_hpricot_parsing.rb
41
+ dev_tools/debug_sprint_nokogiri_parsing.rb
42
42
  dev_tools/github.rb
43
43
  init.rb
44
44
  lib/mms2r.rb
data/README.txt CHANGED
@@ -3,7 +3,7 @@
3
3
  http://mms2r.rubyforge.org/
4
4
  by Mike Mondragon
5
5
  http://rubyforge.org/tracker/?group_id=3065
6
- http://github.com/monde/mms2r/tree/master
6
+ http://github.com/monde/mms2r
7
7
  http://peepcode.com/products/mms2r-pdf
8
8
 
9
9
  == DESCRIPTION
@@ -17,6 +17,9 @@ having to deal with the cruft from the carriers.
17
17
  If MMS2R is not aware of a particular carrier no extra processing is done to the
18
18
  MMS other than decoding and consolidating its media.
19
19
 
20
+ MMS2R can be used to process any multipart email to conveniently access the
21
+ parts the mail is comprised of.
22
+
20
23
  Contact the author to add additional carriers to be processed by the library.
21
24
  Suggestions and patches appreciated and welcomed!
22
25
 
@@ -64,6 +67,10 @@ Corpus of carriers currently processed by MMS2R:
64
67
  * #process supports blocks to for enumerating over the content of the MMS
65
68
  * #process can be made lazy when :process => :lazy is passed to new
66
69
  * logging is enabled when :logger => your_logger is passed to new
70
+ * an mms instance acts like a tmail object, any methods not defined on the
71
+ instance are delegated to its underlying tmail object
72
+ * #device_type? returns a symbol representing a device or smartphone type
73
+ Known smartphones thus far: iPhone, BlackBerry, T-Mobile Dash, Droid
67
74
 
68
75
  == BOOKS
69
76
 
@@ -117,9 +124,11 @@ http://peepcode.com/products/mms2r-pdf
117
124
  # check if the mail is from a mobile phone
118
125
  puts "mail is from a mobile phone #{mail.is_mobile?}"
119
126
 
127
+ # determine the device type of the phone
128
+ puts "mail is from a mobile phone of type #{mail.device_type?}"
129
+
120
130
  # inspect default media's exif data if exifr gem is installed and default
121
131
  # media is a jpeg or tiff
122
- puts "mail is from a mobile phone #{mail.is_mobile?}"
123
132
  puts "mail's default media's exif data is:"
124
133
  puts mms.exif.inspect
125
134
 
@@ -140,8 +149,9 @@ http://peepcode.com/products/mms2r-pdf
140
149
 
141
150
  == REQUIREMENTS
142
151
 
143
- * Hpricot
144
152
  * TMail
153
+ * Nokogiri (for mms from Sprint)
154
+ * UUIDTools
145
155
 
146
156
  == OPTIONAL
147
157
 
@@ -150,17 +160,11 @@ http://peepcode.com/products/mms2r-pdf
150
160
 
151
161
  == INSTALL
152
162
 
153
- conventional
154
163
  * sudo gem install mms2r
155
164
 
156
- github
157
- * sudo gem sources -a http://gems.github.com
158
- * sudo gem install monde-mms2r
159
-
160
165
  == SOURCE
161
166
 
162
167
  git clone git://github.com/monde/mms2r.git
163
- svn co svn://rubyforge.org/var/svn/mms2r/trunk mms2r
164
168
 
165
169
  == AUTHORS
166
170
 
@@ -177,14 +181,17 @@ MMS2R's Flickr page[http://www.flickr.com/photos/8627919@N05/]
177
181
  * Jason Haruska (blog[http://software.haruska.com/])
178
182
  * Dave Myron (company[http://contentfree.com/])
179
183
  * Vijay Yellapragada
180
- * Jesse Dp
184
+ * Jesse Dp (github profile[http://github.com/jessedp])
181
185
  * David Alm
182
186
  * Jeremy Wilkins
183
- * Matt Conway
187
+ * Matt Conway (github profile[http://github.com/wr0ngway])
184
188
  * Kai Kai
185
189
  * Michael DelGaudio
186
190
  * Sai Emrys (blog[http://saizai.com])
187
191
  * Brendan Lim (github profile[http://github.com/brendanlim])
192
+ * Scott Taylor (github profile[http://github.com/smtlaissezfaire])
193
+ * Jaap van der Meer (github profile[http://github.com/japetheape])
194
+ * Karl Baum (github profile[http://github.com/kbaum])
188
195
 
189
196
  == LICENSE
190
197
 
data/Rakefile CHANGED
@@ -13,14 +13,15 @@ require 'mms2r'
13
13
 
14
14
  Hoe.new('mms2r', MMS2R::Media::VERSION) do |p|
15
15
  p.rubyforge_name = 'mms2r'
16
- p.author = 'Mike Mondragon'
17
- p.email = 'mikemondragon@gmail.com'
16
+ p.author = ['Mike Mondragon']
17
+ p.email = ['mikemondragon@gmail.com']
18
18
  p.summary = 'Extract user media from MMS (and not carrier cruft)'
19
- p.description = p.paragraphs_of('README.txt', 2..7).join("\n\n")
19
+ p.description = p.paragraphs_of('README.txt', 2..5).join("\n\n")
20
20
  p.url = p.paragraphs_of('README.txt', 1).first.strip
21
- p.changes = p.paragraphs_of('History.txt', 0..1).join("\n\n")
22
- p.extra_deps << ['hpricot']
21
+ p.changes = p.paragraphs_of('History.txt', 0..2).join("\n\n")
22
+ p.extra_deps << ['nokogiri']
23
23
  p.extra_deps << ['tmail']
24
+ p.extra_deps << ['uuidtools']
24
25
  p.clean_globs << 'coverage'
25
26
  end
26
27
 
data/conf/mms2r_media.yml CHANGED
@@ -29,3 +29,19 @@ device_types:
29
29
  :iphone: !ruby/regexp /iPhone Mail/i
30
30
  x-rim-org-msg-ref-id:
31
31
  :blackberry: !ruby/regexp /.+/
32
+ # TODO do something about the assortment of camera models that have
33
+ # been seen:
34
+ # 1.3 Megapixel, 2.0 Megapixel, BlackBerry, CU920, G'z One TYPE-S,
35
+ # Hermes, iPhone, LG8700, LSI_S5K4AAFA, Micron MT9M113 1.3MP YUV,
36
+ # Motorola Phone, Omni_vision-9650, Pre,
37
+ # Seoul Electronics & Telecom SIM120B 1.3M, SGH-T729, SGH-T819,
38
+ # SPH-M540, SPH-M800, SYSTEMLSI S5K4BAFB 2.0 MP, VX-9700
39
+ #
40
+ # NOTE: These model strings are stored in the exif model header of an image file
41
+ # created and sent by the device, the regex is used by mms2r to detect the
42
+ # model string
43
+ models:
44
+ :iphone: !ruby/regexp /iPhone/i
45
+ :blackberry: !ruby/regexp /BlackBerry/i
46
+ :dash: !ruby/regexp /T-Mobile Dash/i
47
+ :droid: !ruby/regexp /Droid/i
data/conf/vzwpix.com.yml CHANGED
@@ -1,8 +1,8 @@
1
1
  ---
2
2
  ignore:
3
3
  text/plain:
4
- - /\AThis message was sent using .* from Verizon Wireless!.*/m
4
+ - /\AThis message (was|has been) sent using .* from Verizon Wireless!.*/m
5
5
  transform:
6
6
  text/plain:
7
- - - /\A(.+?)\s+This message was sent using .* from Verizon Wireless!.*/m
7
+ - - /\A(.+?)\s+This message (was|has been) sent using .* from Verizon Wireless!.*/m
8
8
  - "\1"
@@ -1,8 +1,8 @@
1
1
  require 'rubygems'
2
- require 'hpricot'
2
+ require 'nokogiri'
3
3
  require 'net/http'
4
+ require 'cgi'
4
5
  require 'rubygems'
5
- require 'hpricot'
6
6
  require 'pp'
7
7
 
8
8
  if ARGV[0].nil?
@@ -11,12 +11,12 @@ if ARGV[0].nil?
11
11
  exit
12
12
  end
13
13
 
14
- doc = open(ARGV[0]) { |f| Hpricot(f) }
14
+ doc = open(ARGV[0]) { |f| Nokogiri(f) }
15
15
 
16
16
  puts "TITLE: #{doc.at('title').inner_html}"
17
17
 
18
18
  #phone number is tucked away in the comment in the head
19
- c = doc.search("/html/head/comment//").last
19
+ c = doc.search("/html/head/comment()").last
20
20
  t = c.content.gsub(/\s+/m," ").strip
21
21
  number = / name=&quot;MDN&quot;&gt;(\d+)&lt;/.match(t)[1]
22
22
  puts "NUMBER: #{number}"
@@ -26,16 +26,14 @@ puts "NUMBER: #{number}"
26
26
  text = doc.search("/html/body//pre").first.inner_html
27
27
  puts "TEXT: #{text}"
28
28
 
29
- # just see what they say this MMS is it really doesn't
30
- # mean anything, the content is in paux image with
31
- # a RECIPIENT in its URI path
32
- trs = doc.search("/html/body//tr")
33
- text = trs[3].search("/td/p/font/b/")
29
+ # just see what they say this MMS is it really doesn't mean anything, the
30
+ # content is in faux image with a RECIPIENT in its URI path
31
+ text = doc.search("/html/body//tr[2]/td//b")
34
32
  case text.text
35
33
  when /You have a Video Mail from/
36
- puts "it claims to be a video"
34
+ puts "it claims to be a video: #{text}"
37
35
  when /You have a Picture Mail from /
38
- puts "it claims to be an image"
36
+ puts "it claims to be an image: #{text}"
39
37
  else
40
38
  puts "what is it? #{text.text}"
41
39
  end
@@ -59,15 +57,22 @@ puts "there are #{srcs.size} sources to fetch"
59
57
  cnt = 0
60
58
  srcs.each do |src|
61
59
  puts "--"
62
- puts "FETCHING:\n #{src}"
60
+ puts "FETCHING:\n #{src.text}"
63
61
 
64
- url = URI.parse(src)
65
- #res = Net::HTTP.get_response(url)
66
- agent = "Mozilla/5.0 (X11; U; Minix3 i686 (x86_64); en-US; rv:1.8.1.1) Gecko/20061208 Firefox/2.0.0.1"
67
- res = Net::HTTP.start(url.host, url.port) { |http|
68
- req = Net::HTTP::Get.new(url.request_uri, {'User-Agent' => agent})
69
- http.request(req)
70
- }
62
+ url = URI.parse(CGI.unescapeHTML(src.text))
63
+ query={}
64
+ url.query.split('&').each{|a| p=a.split('='); query[p[0]] = p[1]}
65
+ query.delete_if{|k, v| k == 'limitsize' or k == 'squareoutput' }
66
+ url.query = query.map{|k,v| "#{k}=#{v}"}.join("&")
67
+ # sprint is a ghetto, they expect to see &amp; for video request
68
+ url.query = url.query.gsub(/&/, "&amp;") if @is_video
69
+
70
+ #res = Net::HTTP.get_response(url)
71
+ agent = "Mozilla/5.0 (X11; U; Minix3 i686 (x86_64); en-US; rv:1.8.1.1) Gecko/20061208 Firefox/2.0.0.1"
72
+ res = Net::HTTP.start(url.host, url.port) { |http|
73
+ req = Net::HTTP::Get.new(url.request_uri, {'User-Agent' => agent})
74
+ http.request(req)
75
+ }
71
76
 
72
77
  # prep and write a file
73
78
  base = /\/RECIPIENT\/([^\/]+)\//.match(src)[1]
@@ -6,7 +6,7 @@
6
6
 
7
7
  require 'net/http'
8
8
  require 'rubygems'
9
- require 'hpricot'
9
+ require 'nokogiri'
10
10
  require 'cgi'
11
11
 
12
12
  module MMS2R
@@ -46,7 +46,7 @@ module MMS2R
46
46
  doc = nil
47
47
  parts.each do |p|
48
48
  next unless p.part_type? == 'text/html'
49
- d = Hpricot(p.body)
49
+ d = Nokogiri(p.body)
50
50
  title = d.at('title').inner_html
51
51
  if title =~ /You have new Picture Mail!/
52
52
  doc = d
@@ -115,6 +115,8 @@ module MMS2R
115
115
  imgs = doc.search("/html/body//img")
116
116
  imgs.each do |i|
117
117
  src = i.attributes['src']
118
+ next unless src
119
+ src = src.text
118
120
  # we don't want to double fetch content and we only
119
121
  # want to fetch media from the content server, you get
120
122
  # a clue about that as there is a RECIPIENT in the URI path
data/lib/mms2r/media.rb CHANGED
@@ -218,7 +218,7 @@ module MMS2R
218
218
  @carrier = opts[:domain]
219
219
  @dir_count = 0
220
220
  @media_dir = File.join(self.tmp_dir(),
221
- self.safe_message_id(@mail.message_id))
221
+ "#{self.safe_message_id(@mail.message_id)}_#{UUIDTools::UUID.random_create}")
222
222
  @media = {}
223
223
  @was_processed = false
224
224
  @number = nil
@@ -534,11 +534,16 @@ module MMS2R
534
534
  end
535
535
 
536
536
  ##
537
- # Best guess of the mobile device type. Simple heuristics thus far for
538
- # :iphone :blackberry :handset :unknown . Could be expanded for exif
539
- # probing or shifting mail header schemes
537
+ # Best guess of the mobile device type. Simple heuristics thus far by
538
+ # inspecting mail headers and jpeg/tiff exif metadata.
539
+ # Smart phone types are
540
+ # :iphone :blackberry :dash :droid
541
+ # If the message is from a carrier known to MMS2R, and not a smart phone
542
+ # its type is returned as :handset
543
+ # Otherwise device type is :unknown
540
544
 
541
545
  def device_type?
546
+
542
547
  begin
543
548
  # rely on native exif first with exifr gem if its loaded
544
549
  require 'exifr'
@@ -546,28 +551,15 @@ module MMS2R
546
551
  if file
547
552
  original = file.original_filename
548
553
  @exif = case original
549
- when /\.jpg$/i
550
- EXIFR::JPEG.new(file)
551
- when /\.jepg$/i
554
+ when /\.je?pg$/i
552
555
  EXIFR::JPEG.new(file)
553
- when /\.tif$/i
554
- EXIFR::TIFF.new(file)
555
- when /\.tiff$/i
556
+ when /\.tiff?$/i
556
557
  EXIFR::TIFF.new(file)
557
558
  end
558
559
  if @exif
559
- # TODO do something about the assortment of camera models that have
560
- # been seen:
561
- # 1.3 Megapixel, 2.0 Megapixel, BlackBerry, CU920, G'z One TYPE-S,
562
- # Hermes, iPhone, LG8700, LSI_S5K4AAFA, Micron MT9M113 1.3MP YUV,
563
- # Motorola Phone, Omni_vision-9650, Pre,
564
- # Seoul Electronics & Telecom SIM120B 1.3M, SGH-T729, SGH-T819,
565
- # SPH-M540, SPH-M800, SYSTEMLSI S5K4BAFB 2.0 MP, VX-9700
566
- case @exif.model
567
- when/iPhone/i
568
- return :iphone
569
- when/BlackBerry/i
570
- return :blackberry
560
+ models = config['device_types']['models'] rescue {}
561
+ models.each do |model, regex|
562
+ return model if @exif.model =~ regex
571
563
  end
572
564
  end
573
565
  end
data/lib/mms2r.rb CHANGED
@@ -39,7 +39,7 @@ module MMS2R
39
39
  ##
40
40
  # MMS2R library version
41
41
 
42
- VERSION = '2.3.0'
42
+ VERSION = '2.4.0'
43
43
 
44
44
  end
45
45
 
@@ -59,6 +59,7 @@ require 'fileutils'
59
59
  require 'pathname'
60
60
  require 'tmpdir'
61
61
  require 'yaml'
62
+ require 'uuidtools'
62
63
 
63
64
  require File.join(File.dirname(__FILE__), 'tmail_ext')
64
65
  require File.join(File.dirname(__FILE__), 'mms2r', 'media')
data/mms2r.gemspec CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{mms2r}
5
- s.version = "2.3.0"
5
+ s.version = "2.4.0"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Mike Mondragon"]
9
- s.date = %q{2009-08-31}
9
+ s.date = %q{2009-12-20}
10
10
  s.description = %q{== DESCRIPTION
11
11
 
12
12
  MMS2R is a library that decodes the parts of an MMS message to disk while
@@ -18,20 +18,17 @@ having to deal with the cruft from the carriers.
18
18
  If MMS2R is not aware of a particular carrier no extra processing is done to the
19
19
  MMS other than decoding and consolidating its media.
20
20
 
21
- Contact the author to add additional carriers to be processed by the library.
22
- Suggestions and patches appreciated and welcomed!
23
-
24
- Corpus of carriers currently processed by MMS2R:}
25
- s.email = %q{mikemondragon@gmail.com}
26
- s.extra_rdoc_files = ["History.txt", "Manifest.txt", "README.txt"]
27
- s.files = [".gitignore", "History.txt", "Manifest.txt", "README.txt", "Rakefile", "conf/1nbox.net.yml", "conf/aliases.yml", "conf/bellsouth.net.yml", "conf/from.yml", "conf/mediamessaging.o2.co.uk.yml", "conf/messaging.nextel.com.yml", "conf/mms.3ireland.ie.yml", "conf/mms.ae.yml", "conf/mms.alltel.com.yml", "conf/mms.att.net.yml", "conf/mms.dobson.net.yml", "conf/mms.luxgsm.lu.yml", "conf/mms.mobileiam.ma.yml", "conf/mms.mtn.co.za.yml", "conf/mms.mycricket.com.yml", "conf/mms.myhelio.com.yml", "conf/mms.netcom.no.yml", "conf/mms.o2online.de.yml", "conf/mms.three.co.uk.yml", "conf/mms.vodacom4me.co.za.yml", "conf/mms2r_media.yml", "conf/mobile.indosat.net.id.yml", "conf/msg.telus.com.yml", "conf/orangemms.net.yml", "conf/pm.sprint.com.yml", "conf/pxt.vodafone.net.nz.yml", "conf/rci.rogers.com.yml", "conf/sms.sasktel.com.yml", "conf/tmomail.net.yml", "conf/txt.bell.ca.yml", "conf/unicel.com.yml", "conf/vmpix.com.yml", "conf/vzwpix.com.yml", "conf/waw.plspictures.com.yml", "dev_tools/anonymizer.rb", "dev_tools/debug_sprint_hpricot_parsing.rb", "dev_tools/github.rb", "init.rb", "lib/mms2r.rb", "lib/mms2r/media.rb", "lib/mms2r/media/sprint.rb", "lib/tmail_ext.rb", "mms2r.gemspec", "test/fixtures/1nbox-2images-01.mail", "test/fixtures/1nbox-2images-02.mail", "test/fixtures/1nbox-2images-03.mail", "test/fixtures/1nbox-2images-04.mail", "test/fixtures/3ireland-mms-01.mail", "test/fixtures/alltel-image-01.mail", "test/fixtures/alltel-mms-01.mail", "test/fixtures/alltel-mms-03.mail", "test/fixtures/apple-double-image-01.mail", "test/fixtures/att-blackberry-02.mail", "test/fixtures/att-blackberry.mail", "test/fixtures/att-image-01.mail", "test/fixtures/att-image-02.mail", "test/fixtures/att-iphone-01.mail", "test/fixtures/att-iphone-02.mail", "test/fixtures/att-iphone-03.mail", "test/fixtures/att-text-01.mail", "test/fixtures/bell-canada-image-01.mail", "test/fixtures/cingularme-text-01.mail", "test/fixtures/cingularme-text-02.mail", "test/fixtures/dobson-image-01.mail", "test/fixtures/dot.jpg", "test/fixtures/generic.mail", "test/fixtures/helio-image-01.mail", "test/fixtures/helio-message-01.mail", "test/fixtures/iconv-fr-text-01.mail", "test/fixtures/indosat-image-01.mail", "test/fixtures/indosat-image-02.mail", "test/fixtures/info2go-image-01.mail", "test/fixtures/iphone-image-01.mail", "test/fixtures/luxgsm-image-01.mail", "test/fixtures/maroctelecom-france-mms-01.mail", "test/fixtures/mediamessaging_o2_co_uk-image-01.mail", "test/fixtures/mmode-image-01.mail", "test/fixtures/mms.ae-image-01.mail", "test/fixtures/mms.mycricket.com-pic-and-text.mail", "test/fixtures/mms.mycricket.com-pic.mail", "test/fixtures/mmsreply.t-mobile.co.uk-text-image-01.mail", "test/fixtures/mobile.mycingular.com-text-01.mail", "test/fixtures/mtn-southafrica-mms.mail", "test/fixtures/mycingular-image-01.mail", "test/fixtures/netcom-image-01.mail", "test/fixtures/nextel-image-01.mail", "test/fixtures/nextel-image-02.mail", "test/fixtures/nextel-image-03.mail", "test/fixtures/nextel-image-04.mail", "test/fixtures/o2-de-image-01.mail", "test/fixtures/orange-uk-image-01.mail", "test/fixtures/orangefrance-text-and-image.mail", "test/fixtures/orangepoland-text-01.mail", "test/fixtures/orangepoland-text-02.mail", "test/fixtures/pics.cingularme.com-image-01.mail", "test/fixtures/pxt-image-01.mail", "test/fixtures/rogers-canada-mms-01.mail", "test/fixtures/sasktel-image-01.mail", "test/fixtures/sprint-broken-image-01.mail", "test/fixtures/sprint-image-01.mail", "test/fixtures/sprint-pcs-text-01.mail", "test/fixtures/sprint-purged-image-01.mail", "test/fixtures/sprint-text-01.mail", "test/fixtures/sprint-two-images-01.mail", "test/fixtures/sprint-video-01.mail", "test/fixtures/sprint.mov", "test/fixtures/suncom-blackberry.mail", "test/fixtures/telus-image-01.mail", "test/fixtures/three-uk-image-01.mail", "test/fixtures/tmo.blackberry.net-image-01.mail", "test/fixtures/tmobile-blackberry-02.mail", "test/fixtures/tmobile-blackberry.mail", "test/fixtures/tmobile-image-01.mail", "test/fixtures/tmobile-image-02.mail", "test/fixtures/unicel-image-01.mail", "test/fixtures/verizon-blackberry.mail", "test/fixtures/verizon-image-01.mail", "test/fixtures/verizon-image-02.mail", "test/fixtures/verizon-image-03.mail", "test/fixtures/verizon-text-01.mail", "test/fixtures/verizon-video-01.mail", "test/fixtures/virgin-mobile-image-01.mail", "test/fixtures/virgin.ca-text-01.mail", "test/fixtures/vodacom4me-co-za-01.mail", "test/fixtures/vodacom4me-co-za-02.mail", "test/fixtures/vodacom4me-southafrica-mms-01.mail", "test/fixtures/vodacom4me-southafrica-mms-04.mail", "test/fixtures/vtext-text-01.mail", "test/fixtures/vzwpix.com-image-01.mail", "test/fixtures/waw.plspictures.com-image-01.mail", "test/test_1nbox_net.rb", "test/test_bell_canada.rb", "test/test_bellsouth_net.rb", "test/test_github.rb", "test/test_helper.rb", "test/test_mediamessaging_o2_co_uk.rb", "test/test_messaging_nextel_com.rb", "test/test_messaging_sprintpcs_com.rb", "test/test_mms2r_media.rb", "test/test_mms_3ireland_ie.rb", "test/test_mms_ae.rb", "test/test_mms_alltel_com.rb", "test/test_mms_att_net.rb", "test/test_mms_dobson_net.rb", "test/test_mms_luxgsm_lu.rb", "test/test_mms_mobileiam_ma.rb", "test/test_mms_mtn_co_za.rb", "test/test_mms_mycricket_com.rb", "test/test_mms_myhelio_com.rb", "test/test_mms_netcom_no.rb", "test/test_mms_o2online_de.rb", "test/test_mms_three_co_uk.rb", "test/test_mms_vodacom4me_co_za.rb", "test/test_mobile_indosat_net_id.rb", "test/test_msg_telus_com.rb", "test/test_orangemms_net.rb", "test/test_pm_sprint_com.rb", "test/test_pxt_vodafone_net_nz.rb", "test/test_rci_rogers_com.rb", "test/test_sms_sasktel_com.rb", "test/test_tmomail_net.rb", "test/test_unicel_com.rb", "test/test_vmpix_com.rb", "test/test_vzwpix_com.rb", "test/test_waw_plspictures_com.rb", "vendor/plugins/mms2r/lib/autotest/discover.rb", "vendor/plugins/mms2r/lib/autotest/mms2r.rb"]
28
- s.has_rdoc = true
21
+ MMS2R can be used to process any multipart email to conveniently access the
22
+ parts the mail is comprised of.}
23
+ s.email = ["mikemondragon@gmail.com"]
24
+ s.extra_rdoc_files = ["History.txt", "Manifest.txt", "README.txt", "email.txt"]
25
+ s.files = [".gitignore", "History.txt", "Manifest.txt", "README.txt", "Rakefile", "conf/1nbox.net.yml", "conf/aliases.yml", "conf/bellsouth.net.yml", "conf/from.yml", "conf/mediamessaging.o2.co.uk.yml", "conf/messaging.nextel.com.yml", "conf/mms.3ireland.ie.yml", "conf/mms.ae.yml", "conf/mms.alltel.com.yml", "conf/mms.att.net.yml", "conf/mms.dobson.net.yml", "conf/mms.luxgsm.lu.yml", "conf/mms.mobileiam.ma.yml", "conf/mms.mtn.co.za.yml", "conf/mms.mycricket.com.yml", "conf/mms.myhelio.com.yml", "conf/mms.netcom.no.yml", "conf/mms.o2online.de.yml", "conf/mms.three.co.uk.yml", "conf/mms.vodacom4me.co.za.yml", "conf/mms2r_media.yml", "conf/mobile.indosat.net.id.yml", "conf/msg.telus.com.yml", "conf/orangemms.net.yml", "conf/pm.sprint.com.yml", "conf/pxt.vodafone.net.nz.yml", "conf/rci.rogers.com.yml", "conf/sms.sasktel.com.yml", "conf/tmomail.net.yml", "conf/txt.bell.ca.yml", "conf/unicel.com.yml", "conf/vmpix.com.yml", "conf/vzwpix.com.yml", "conf/waw.plspictures.com.yml", "dev_tools/anonymizer.rb", "dev_tools/debug_sprint_nokogiri_parsing.rb", "dev_tools/github.rb", "email.txt", "init.rb", "lib/mms2r.rb", "lib/mms2r/media.rb", "lib/mms2r/media/sprint.rb", "lib/tmail_ext.rb", "mms2r.gemspec", "test/fixtures/1nbox-2images-01.mail", "test/fixtures/1nbox-2images-02.mail", "test/fixtures/1nbox-2images-03.mail", "test/fixtures/1nbox-2images-04.mail", "test/fixtures/3ireland-mms-01.mail", "test/fixtures/alltel-image-01.mail", "test/fixtures/alltel-mms-01.mail", "test/fixtures/alltel-mms-03.mail", "test/fixtures/apple-double-image-01.mail", "test/fixtures/att-blackberry-02.mail", "test/fixtures/att-blackberry.mail", "test/fixtures/att-image-01.mail", "test/fixtures/att-image-02.mail", "test/fixtures/att-iphone-01.mail", "test/fixtures/att-iphone-02.mail", "test/fixtures/att-iphone-03.mail", "test/fixtures/att-text-01.mail", "test/fixtures/bell-canada-image-01.mail", "test/fixtures/cingularme-text-01.mail", "test/fixtures/cingularme-text-02.mail", "test/fixtures/dobson-image-01.mail", "test/fixtures/dot.jpg", "test/fixtures/generic.mail", "test/fixtures/helio-image-01.mail", "test/fixtures/helio-message-01.mail", "test/fixtures/iconv-fr-text-01.mail", "test/fixtures/indosat-image-01.mail", "test/fixtures/indosat-image-02.mail", "test/fixtures/info2go-image-01.mail", "test/fixtures/iphone-image-01.mail", "test/fixtures/luxgsm-image-01.mail", "test/fixtures/maroctelecom-france-mms-01.mail", "test/fixtures/mediamessaging_o2_co_uk-image-01.mail", "test/fixtures/mmode-image-01.mail", "test/fixtures/mms.ae-image-01.mail", "test/fixtures/mms.mycricket.com-pic-and-text.mail", "test/fixtures/mms.mycricket.com-pic.mail", "test/fixtures/mmsreply.t-mobile.co.uk-text-image-01.mail", "test/fixtures/mobile.mycingular.com-text-01.mail", "test/fixtures/mtn-southafrica-mms.mail", "test/fixtures/mycingular-image-01.mail", "test/fixtures/netcom-image-01.mail", "test/fixtures/nextel-image-01.mail", "test/fixtures/nextel-image-02.mail", "test/fixtures/nextel-image-03.mail", "test/fixtures/nextel-image-04.mail", "test/fixtures/o2-de-image-01.mail", "test/fixtures/orange-uk-image-01.mail", "test/fixtures/orangefrance-text-and-image.mail", "test/fixtures/orangepoland-text-01.mail", "test/fixtures/orangepoland-text-02.mail", "test/fixtures/pics.cingularme.com-image-01.mail", "test/fixtures/pxt-image-01.mail", "test/fixtures/rogers-canada-mms-01.mail", "test/fixtures/sasktel-image-01.mail", "test/fixtures/sprint-broken-image-01.mail", "test/fixtures/sprint-image-01.mail", "test/fixtures/sprint-pcs-text-01.mail", "test/fixtures/sprint-purged-image-01.mail", "test/fixtures/sprint-text-01.mail", "test/fixtures/sprint-two-images-01.mail", "test/fixtures/sprint-video-01.mail", "test/fixtures/sprint.mov", "test/fixtures/suncom-blackberry.mail", "test/fixtures/telus-image-01.mail", "test/fixtures/three-uk-image-01.mail", "test/fixtures/tmo.blackberry.net-image-01.mail", "test/fixtures/tmobile-blackberry-02.mail", "test/fixtures/tmobile-blackberry.mail", "test/fixtures/tmobile-image-01.mail", "test/fixtures/tmobile-image-02.mail", "test/fixtures/unicel-image-01.mail", "test/fixtures/verizon-blackberry.mail", "test/fixtures/verizon-image-01.mail", "test/fixtures/verizon-image-02.mail", "test/fixtures/verizon-image-03.mail", "test/fixtures/verizon-text-01.mail", "test/fixtures/verizon-video-01.mail", "test/fixtures/virgin-mobile-image-01.mail", "test/fixtures/virgin.ca-text-01.mail", "test/fixtures/vodacom4me-co-za-01.mail", "test/fixtures/vodacom4me-co-za-02.mail", "test/fixtures/vodacom4me-southafrica-mms-01.mail", "test/fixtures/vodacom4me-southafrica-mms-04.mail", "test/fixtures/vtext-text-01.mail", "test/fixtures/vzwpix.com-image-01.mail", "test/fixtures/waw.plspictures.com-image-01.mail", "test/test_1nbox_net.rb", "test/test_bell_canada.rb", "test/test_bellsouth_net.rb", "test/test_github.rb", "test/test_helper.rb", "test/test_mediamessaging_o2_co_uk.rb", "test/test_messaging_nextel_com.rb", "test/test_messaging_sprintpcs_com.rb", "test/test_mms2r_media.rb", "test/test_mms_3ireland_ie.rb", "test/test_mms_ae.rb", "test/test_mms_alltel_com.rb", "test/test_mms_att_net.rb", "test/test_mms_dobson_net.rb", "test/test_mms_luxgsm_lu.rb", "test/test_mms_mobileiam_ma.rb", "test/test_mms_mtn_co_za.rb", "test/test_mms_mycricket_com.rb", "test/test_mms_myhelio_com.rb", "test/test_mms_netcom_no.rb", "test/test_mms_o2online_de.rb", "test/test_mms_three_co_uk.rb", "test/test_mms_vodacom4me_co_za.rb", "test/test_mobile_indosat_net_id.rb", "test/test_msg_telus_com.rb", "test/test_orangemms_net.rb", "test/test_pm_sprint_com.rb", "test/test_pxt_vodafone_net_nz.rb", "test/test_rci_rogers_com.rb", "test/test_sms_sasktel_com.rb", "test/test_tmomail_net.rb", "test/test_unicel_com.rb", "test/test_vmpix_com.rb", "test/test_vzwpix_com.rb", "test/test_waw_plspictures_com.rb", "vendor/plugins/mms2r/lib/autotest/discover.rb", "vendor/plugins/mms2r/lib/autotest/mms2r.rb"]
29
26
  s.homepage = %q{http://mms2r.rubyforge.org/
30
27
  }
31
28
  s.rdoc_options = ["--main", "README.txt"]
32
29
  s.require_paths = ["lib"]
33
30
  s.rubyforge_project = %q{mms2r}
34
- s.rubygems_version = %q{1.3.2}
31
+ s.rubygems_version = %q{1.3.5}
35
32
  s.summary = %q{Extract user media from MMS (and not carrier cruft)}
36
33
  s.test_files = ["test/test_mms_o2online_de.rb", "test/test_helper.rb", "test/test_pm_sprint_com.rb", "test/test_sms_sasktel_com.rb", "test/test_mms_mobileiam_ma.rb", "test/test_msg_telus_com.rb", "test/test_messaging_sprintpcs_com.rb", "test/test_mms_myhelio_com.rb", "test/test_mms_3ireland_ie.rb", "test/test_mms_ae.rb", "test/test_mms_att_net.rb", "test/test_mediamessaging_o2_co_uk.rb", "test/test_bell_canada.rb", "test/test_mms_mtn_co_za.rb", "test/test_vmpix_com.rb", "test/test_github.rb", "test/test_vzwpix_com.rb", "test/test_bellsouth_net.rb", "test/test_unicel_com.rb", "test/test_waw_plspictures_com.rb", "test/test_mms_luxgsm_lu.rb", "test/test_mms_netcom_no.rb", "test/test_mms_mycricket_com.rb", "test/test_mms2r_media.rb", "test/test_rci_rogers_com.rb", "test/test_messaging_nextel_com.rb", "test/test_mms_vodacom4me_co_za.rb", "test/test_tmomail_net.rb", "test/test_1nbox_net.rb", "test/test_pxt_vodafone_net_nz.rb", "test/test_mobile_indosat_net_id.rb", "test/test_mms_three_co_uk.rb", "test/test_mms_alltel_com.rb", "test/test_mms_dobson_net.rb", "test/test_orangemms_net.rb"]
37
34
 
@@ -40,17 +37,20 @@ Corpus of carriers currently processed by MMS2R:}
40
37
  s.specification_version = 3
41
38
 
42
39
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
43
- s.add_runtime_dependency(%q<hpricot>, [">= 0"])
40
+ s.add_runtime_dependency(%q<nokogiri>, [">= 0"])
44
41
  s.add_runtime_dependency(%q<tmail>, [">= 0"])
45
- s.add_development_dependency(%q<hoe>, [">= 1.8.2"])
42
+ s.add_runtime_dependency(%q<uuidtools>, [">= 0"])
43
+ s.add_development_dependency(%q<hoe>, [">= 2.4.0"])
46
44
  else
47
- s.add_dependency(%q<hpricot>, [">= 0"])
45
+ s.add_dependency(%q<nokogiri>, [">= 0"])
48
46
  s.add_dependency(%q<tmail>, [">= 0"])
49
- s.add_dependency(%q<hoe>, [">= 1.8.2"])
47
+ s.add_dependency(%q<uuidtools>, [">= 0"])
48
+ s.add_dependency(%q<hoe>, [">= 2.4.0"])
50
49
  end
51
50
  else
52
- s.add_dependency(%q<hpricot>, [">= 0"])
51
+ s.add_dependency(%q<nokogiri>, [">= 0"])
53
52
  s.add_dependency(%q<tmail>, [">= 0"])
54
- s.add_dependency(%q<hoe>, [">= 1.8.2"])
53
+ s.add_dependency(%q<uuidtools>, [">= 0"])
54
+ s.add_dependency(%q<hoe>, [">= 2.4.0"])
55
55
  end
56
56
  end
data/test/test_helper.rb CHANGED
@@ -2,16 +2,18 @@ require 'set'
2
2
  require 'net/http'
3
3
  require 'net/https'
4
4
  require 'pp'
5
+ require 'exifr'
6
+ begin require 'redgreen'; rescue LoadError; end
5
7
 
6
8
  module MMS2R
7
9
  module TestHelper
8
-
10
+
9
11
  def assert_file_size(file, size)
10
12
  assert_not_nil(file, "file was nil")
11
13
  assert(File::exist?(file), "file #{file} does not exist")
12
14
  assert(File::size(file) == size, "file #{file} is #{File::size(file)} bytes, not #{size} bytes")
13
15
  end
14
-
16
+
15
17
  def load_mail(file)
16
18
  IO.readlines(mail_fixture(file))
17
19
  end
@@ -19,6 +21,31 @@ module MMS2R
19
21
  def mail_fixture(file)
20
22
  "#{File.dirname(__FILE__)}/fixtures/#{file}"
21
23
  end
24
+
25
+ def smart_phone_mock(model_text = 'iPhone', jpeg = true)
26
+ mail = mock('mail')
27
+ mail.expects(:header).at_least_once.returns({'return-path' => '<joe@null.example.com>'})
28
+ mail.expects(:from).at_least_once.returns(['joe@example.com'])
29
+ mail.expects(:message_id).returns('abcd0123')
30
+ mail.expects(:multipart?).returns(true)
31
+ part = mock('part')
32
+ part.expects(:part_type?).at_least_once.returns("image/#{jpeg ? 'jpeg' : 'tiff'}")
33
+ part.expects(:sub_header).with('content-type', 'name').returns(nil)
34
+ part.expects(:sub_header).with('content-disposition', 'filename').returns(nil)
35
+ part.expects("[]".to_sym).with('content-location').at_least_once.returns("Photo_12.#{jpeg ? 'jpg' : 'tif'}")
36
+ part.expects(:main_type).with('text').returns(nil)
37
+ part.expects(:content_type).at_least_once.returns("image/#{jpeg ? 'jpeg' : 'tiff'}")
38
+ part.expects(:body).at_least_once.returns('abc')
39
+ mail.expects(:parts).returns([part])
40
+ exif = mock('exif')
41
+ exif.expects(:model).at_least_once.returns(model_text)
42
+ if jpeg
43
+ EXIFR::JPEG.expects(:new).at_least_once.returns(exif)
44
+ else
45
+ EXIFR::TIFF.expects(:new).at_least_once.returns(exif)
46
+ end
47
+ mail
48
+ end
22
49
  end
23
50
  end
24
51
 
@@ -51,6 +51,11 @@ class TestMms2rMedia < Test::Unit::TestCase
51
51
  stub('mail', attrs)
52
52
  end
53
53
 
54
+ def test_class_parse
55
+ mms = MMS2R.parse(load_mail('generic.mail').join)
56
+ assert_equal ['noreply@rubyforge.org'], mms.from
57
+ end
58
+
54
59
  def temp_text_file(text)
55
60
  tf = Tempfile.new("test" + Time.now.to_f.to_s)
56
61
  tf.puts(text)
@@ -94,7 +99,18 @@ class TestMms2rMedia < Test::Unit::TestCase
94
99
 
95
100
  def test_base_initialize_config
96
101
  config = MMS2R::Media.initialize_config(nil)
97
-
102
+
103
+ # test defaults shipped in mms2r_media.yml
104
+ assert_not_nil config
105
+ assert_equal true, config['ignore'].is_a?(Hash)
106
+ assert_equal true, config['transform'].is_a?(Hash)
107
+ assert_equal true, config['number'].is_a?(Array)
108
+ end
109
+
110
+ def test_instance_initialize_config
111
+ mms = MMS2R::Media.new(stub_mail())
112
+ config = mms.initialize_config(nil)
113
+
98
114
  # test defaults shipped in mms2r_media.yml
99
115
  assert_not_nil config
100
116
  assert_equal true, config['ignore'].is_a?(Hash)
@@ -727,7 +743,7 @@ class TestMms2rMedia < Test::Unit::TestCase
727
743
  assert_equal false, mms.is_mobile?
728
744
  end
729
745
 
730
- def test_iphone_device_type
746
+ def test_iphone_device_type_by_header
731
747
  iphones = ['att-iphone-01.mail',
732
748
  'iphone-image-01.mail']
733
749
  iphones.each do |iphone|
@@ -738,6 +754,54 @@ class TestMms2rMedia < Test::Unit::TestCase
738
754
  end
739
755
  end
740
756
 
757
+ def test_exif
758
+ mail = smart_phone_mock('iPhone')
759
+ mms = MMS2R::Media.new(mail)
760
+ assert_equal 'iPhone', mms.exif.model
761
+ end
762
+
763
+ def test_exif_load_error
764
+ mms = MMS2R::Media.new(stub_mail())
765
+ mms.expects(:require).with('exifr').raises(LoadError)
766
+
767
+ assert_equal :unknown, mms.device_type?
768
+ end
769
+
770
+ def test_iphone_device_type_by_exif
771
+ mail = smart_phone_mock('iPhone')
772
+ mms = MMS2R::Media.new(mail)
773
+ assert_equal :iphone, mms.device_type?
774
+ assert_equal true, mms.is_mobile?
775
+ end
776
+
777
+ def test_faux_tiff_iphone_device_type_by_exif
778
+ mail = smart_phone_mock('iPhone', jpeg = false)
779
+ mms = MMS2R::Media.new(mail)
780
+ assert_equal :iphone, mms.device_type?
781
+ assert_equal true, mms.is_mobile?
782
+ end
783
+
784
+ def test_blackberry_device_type_by_exif
785
+ mail = smart_phone_mock('BlackBerry')
786
+ mms = MMS2R::Media.new(mail)
787
+ assert_equal :blackberry, mms.device_type?
788
+ assert_equal true, mms.is_mobile?
789
+ end
790
+
791
+ def test_dash_device_type_by_exif
792
+ mail = smart_phone_mock('T-Mobile Dash')
793
+ mms = MMS2R::Media.new(mail)
794
+ assert_equal :dash, mms.device_type?
795
+ assert_equal true, mms.is_mobile?
796
+ end
797
+
798
+ def test_droid_device_type_by_exif
799
+ mail = smart_phone_mock('Droid')
800
+ mms = MMS2R::Media.new(mail)
801
+ assert_equal :droid, mms.device_type?
802
+ assert_equal true, mms.is_mobile?
803
+ end
804
+
741
805
  def test_blackberry_device_type
742
806
  berries = ['att-blackberry.mail',
743
807
  'suncom-blackberry.mail',
@@ -16,7 +16,7 @@ class TestPmSprintCom < Test::Unit::TestCase
16
16
  res.expects(:content_type).at_least_once.returns('image/jpeg')
17
17
  res.expects(:body).once.returns(body)
18
18
  res.expects(:code).never
19
- Net::HTTP.expects(:get_response).once.with(uri).returns res
19
+ Net::HTTP.expects(:get_response).once.returns res
20
20
  end
21
21
 
22
22
  def mock_sprint_purged_image(message_id)
@@ -26,7 +26,7 @@ class TestPmSprintCom < Test::Unit::TestCase
26
26
  res.expects(:content_type).once.returns('text/html')
27
27
  res.expects(:code).once.returns('500')
28
28
  res.expects(:body).never
29
- Net::HTTP.expects(:get_response).once.with(uri).returns res
29
+ Net::HTTP.expects(:get_response).once.returns res
30
30
  end
31
31
 
32
32
  def test_mms_should_have_text
@@ -60,7 +60,7 @@ class TestPmSprintCom < Test::Unit::TestCase
60
60
  res.expects(:content_type).at_least_once.returns('video/quicktime')
61
61
  res.expects(:body).once.returns(body)
62
62
  res.expects(:code).never
63
- Net::HTTP.expects(:get_response).once.with(uri).returns res
63
+ Net::HTTP.expects(:get_response).once.returns res
64
64
 
65
65
  mms = MMS2R::Media.new(mail)
66
66
 
@@ -127,7 +127,7 @@ class TestPmSprintCom < Test::Unit::TestCase
127
127
  res1.expects(:content_type).at_least_once.returns('image/jpeg')
128
128
  res1.expects(:body).once.returns(body1)
129
129
  res1.expects(:code).never
130
- Net::HTTP.expects(:get_response).once.with(uri1).returns res1
130
+ Net::HTTP.expects(:get_response).returns res1
131
131
 
132
132
  uri2 = URI.parse('http://pictures.sprintpcs.com/mmps/RECIPIENT/001_104058d23d79fb6a_1/3?wm=1&ext=.jpg&iconifyVideo=true&inviteToken=5E1rJSPk5hYDkUnY7op0&outquality=90')
133
133
 
@@ -136,7 +136,7 @@ class TestPmSprintCom < Test::Unit::TestCase
136
136
  res2.expects(:content_type).at_least_once.returns('image/jpeg')
137
137
  res2.expects(:body).once.returns(body2)
138
138
  res2.expects(:code).never
139
- Net::HTTP.expects(:get_response).once.with(uri2).returns res2
139
+ Net::HTTP.expects(:get_response).returns res2
140
140
  mms = MMS2R::Media.new(mail)
141
141
 
142
142
  assert_equal 1, mms.media.size
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mms2r
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.0
4
+ version: 2.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Mondragon
@@ -9,11 +9,11 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-08-31 00:00:00 -07:00
12
+ date: 2009-12-20 00:00:00 -08:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
- name: hpricot
16
+ name: nokogiri
17
17
  type: :runtime
18
18
  version_requirement:
19
19
  version_requirements: !ruby/object:Gem::Requirement
@@ -32,6 +32,16 @@ dependencies:
32
32
  - !ruby/object:Gem::Version
33
33
  version: "0"
34
34
  version:
35
+ - !ruby/object:Gem::Dependency
36
+ name: uuidtools
37
+ type: :runtime
38
+ version_requirement:
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: "0"
44
+ version:
35
45
  - !ruby/object:Gem::Dependency
36
46
  name: hoe
37
47
  type: :development
@@ -40,7 +50,7 @@ dependencies:
40
50
  requirements:
41
51
  - - ">="
42
52
  - !ruby/object:Gem::Version
43
- version: 1.8.2
53
+ version: 2.4.0
44
54
  version:
45
55
  description: |-
46
56
  == DESCRIPTION
@@ -54,46 +64,10 @@ description: |-
54
64
  If MMS2R is not aware of a particular carrier no extra processing is done to the
55
65
  MMS other than decoding and consolidating its media.
56
66
 
57
- Contact the author to add additional carriers to be processed by the library.
58
- Suggestions and patches appreciated and welcomed!
59
-
60
- Corpus of carriers currently processed by MMS2R:
61
-
62
- * 1nbox/Idea: 1nbox.net
63
- * 3 Ireland: mms.3ireland.ie
64
- * Alltel: mms.alltel.com
65
- * AT&T/Cingular/Legacy: mms.att.net, txt.att.net, mmode.com, mms.mycingular.com,
66
- cingularme.com, mobile.mycingular.com pics.cingularme.com
67
- * Bell Canada: txt.bell.ca
68
- * Bell South / Suncom: bellsouth.net
69
- * Cricket Wireless: mms.mycricket.com
70
- * Dobson/Cellular One: mms.dobson.net
71
- * Helio: mms.myhelio.com
72
- * Hutchison 3G UK Ltd: mms.three.co.uk
73
- * INDOSAT M2: mobile.indosat.net.id
74
- * LUXGSM S.A.: mms.luxgsm.lu
75
- * Maroc Telecom / mms.mobileiam.ma
76
- * MTM South Africa: mms.mtn.co.za
77
- * NetCom (Norway): mms.netcom.no
78
- * Nextel: messaging.nextel.com
79
- * O2 Germany: mms.o2online.de
80
- * O2 UK: mediamessaging.o2.co.uk
81
- * Orange & Regional Oranges: orangemms.net, mmsemail.orange.pl, orange.fr
82
- * PLSPICTURES.COM mms hosting: waw.plspictures.com
83
- * PXT New Zealand: pxt.vodafone.net.nz
84
- * Rogers of Canada: rci.rogers.com
85
- * SaskTel: sms.sasktel.com
86
- * Sprint: pm.sprint.com, messaging.sprintpcs.com, sprintpcs.com
87
- * T-Mobile: tmomail.net, mmsreply.t-mobile.co.uk, tmo.blackberry.net
88
- * TELUS Corporation (Canada): mms.telusmobility.com, msg.telus.com
89
- * UAE MMS: mms.ae
90
- * Unicel: unicel.com, info2go.com
91
- (note: mobile number is tucked away in a text/plain part for unicel.com)
92
- * Verizon: vzwpix.com, vtext.com
93
- * Virgin Mobile: vmpix.com
94
- * Virgin Mobile of Canada: vmobile.ca
95
- * Vodacom: mms.vodacom4me.co.za
96
- email: mikemondragon@gmail.com
67
+ MMS2R can be used to process any multipart email to conveniently access the
68
+ parts the mail is comprised of.
69
+ email:
70
+ - mikemondragon@gmail.com
97
71
  executables: []
98
72
 
99
73
  extensions: []
@@ -143,7 +117,7 @@ files:
143
117
  - conf/vzwpix.com.yml
144
118
  - conf/waw.plspictures.com.yml
145
119
  - dev_tools/anonymizer.rb
146
- - dev_tools/debug_sprint_hpricot_parsing.rb
120
+ - dev_tools/debug_sprint_nokogiri_parsing.rb
147
121
  - dev_tools/github.rb
148
122
  - init.rb
149
123
  - lib/mms2r.rb
@@ -302,7 +276,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
302
276
  requirements: []
303
277
 
304
278
  rubyforge_project: mms2r
305
- rubygems_version: 1.3.2
279
+ rubygems_version: 1.3.5
306
280
  signing_key:
307
281
  specification_version: 3
308
282
  summary: Extract user media from MMS (and not carrier cruft)