mms2r 1.0.7 → 1.1.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/History.txt +19 -1
- data/Manifest.txt +38 -19
- data/README.txt +40 -8
- data/Rakefile +2 -2
- data/conf/mms2r_cingular_me_media_subject.yml +3 -0
- data/conf/{mms2r_cingularmedia_transform.yml → mms2r_cingular_me_media_transform.yml} +1 -0
- data/conf/mms2r_dobson_media_ignore.yml +4 -0
- data/conf/mms2r_media_ignore.yml +4 -0
- data/conf/mms2r_media_subject.yml +3 -0
- data/conf/mms2r_my_cingular_media_subject.yml +3 -0
- data/conf/mms2r_nextel_media_ignore.yml +11 -0
- data/conf/mms2r_sprint_media_ignore.yml +5 -0
- data/conf/mms2r_sprint_media_subject.yml +3 -0
- data/conf/{mms2r_tmobilemedia_ignore.yml → mms2r_t_mobile_media_ignore.yml} +2 -5
- data/conf/mms2r_verizon_media_ignore.yml +4 -0
- data/conf/mms2r_verizon_media_transform.yml +6 -0
- data/dev_tools/debug_sprint_hpricot_parsing.rb +82 -0
- data/lib/mms2r.rb +61 -0
- data/lib/mms2r/cingular_me_media.rb +23 -0
- data/lib/mms2r/dobson_media.rb +4 -5
- data/lib/mms2r/{mmode_media.rb → m_mode_media.rb} +4 -4
- data/lib/mms2r/media.rb +283 -160
- data/lib/mms2r/my_cingular_media.rb +15 -0
- data/lib/mms2r/nextel_media.rb +9 -3
- data/lib/mms2r/sprint_media.rb +137 -29
- data/lib/mms2r/sprint_pcs_media.rb +16 -0
- data/lib/mms2r/t_mobile_media.rb +21 -0
- data/lib/mms2r/verizon_media.rb +11 -3
- data/lib/mms2r/vtext_media.rb +16 -0
- data/test/files/cingularme-text-02.mail +14 -0
- data/test/files/hello_world_empty_text.mail +6 -0
- data/test/files/hello_world_mail_multipart.mail +7 -0
- data/test/files/{cingular-image-01.mail → mycingular-image-01.mail} +0 -0
- data/test/files/simple-with-two-images-two-texts.mail +49 -0
- data/test/files/{sprint-image-02.mail → sprint-broken-image-01.mail} +1 -1
- data/test/files/sprint-image-01.mail +1 -1
- data/test/files/sprint-pcs-text-01.mail +8 -0
- data/test/files/sprint-text-01.mail +195 -8
- data/test/files/sprint-two-images-01.mail +198 -0
- data/test/files/sprint-video-01.mail +1 -1
- data/test/files/verizon-image-02.mail +1 -1
- data/test/files/vtext-text-01.mail +1 -1
- data/test/test_mms2r_cingular_me_media.rb +51 -0
- data/test/test_mms2r_dobson_media.rb +46 -0
- data/test/{test_mms2r_mmode.rb → test_mms2r_m_mode_media.rb} +1 -1
- data/test/test_mms2r_media.rb +160 -74
- data/test/test_mms2r_my_cingular_media.rb +31 -0
- data/test/test_mms2r_nextel_media.rb +100 -0
- data/test/test_mms2r_sprint_media.rb +221 -0
- data/test/test_mms2r_sprint_pcs_media.rb +27 -0
- data/test/{test_mms2r_tmobile.rb → test_mms2r_t_mobile_media.rb} +13 -13
- data/test/test_mms2r_verizon_media.rb +96 -0
- data/test/test_mms2r_vtext_media.rb +28 -0
- data/vendor/plugins/mms2r/lib/autotest/discover.rb +3 -0
- data/vendor/plugins/mms2r/lib/autotest/mms2r.rb +33 -0
- metadata +62 -37
- data/conf/mms2r_nextelmedia_ignore.yml +0 -10
- data/conf/mms2r_sprintmedia_ignore.yml +0 -10
- data/conf/mms2r_verizonmedia_ignore.yml +0 -3
- data/conf/mms2r_verizonmedia_transform.yml +0 -3
- data/lib/mms2r/cingular_media.rb +0 -11
- data/lib/mms2r/tmobile_media.rb +0 -11
- data/lib/mms2r/version.rb +0 -12
- data/test/test_mms2r_cingular.rb +0 -58
- data/test/test_mms2r_dobson.rb +0 -36
- data/test/test_mms2r_nextel.rb +0 -132
- data/test/test_mms2r_sprint.rb +0 -174
- data/test/test_mms2r_verizon.rb +0 -102
@@ -0,0 +1,15 @@
|
|
1
|
+
module MMS2R
|
2
|
+
|
3
|
+
##
|
4
|
+
# My Cingular version of MMS2R::Media
|
5
|
+
#
|
6
|
+
# The Cingular MMS messages are well formed multipart
|
7
|
+
# mails and do not contain any extra advertising or
|
8
|
+
# mark up for structure.
|
9
|
+
#
|
10
|
+
# The default subject from the carrier if the user does
|
11
|
+
# not provide one is "Multimedia message"
|
12
|
+
|
13
|
+
class MMS2R::MyCingularMedia < MMS2R::Media
|
14
|
+
end
|
15
|
+
end
|
data/lib/mms2r/nextel_media.rb
CHANGED
@@ -1,10 +1,16 @@
|
|
1
|
-
require 'mms2r'
|
2
|
-
require 'mms2r/media'
|
3
|
-
|
4
1
|
module MMS2R
|
5
2
|
|
6
3
|
##
|
7
4
|
# Nextel version of MMS2R::Media
|
5
|
+
#
|
6
|
+
# Typically these messages have two multiparts, one is the
|
7
|
+
# image attached to the MMS and the other is a multipart
|
8
|
+
# alternative. The alternative has text and html alternative
|
9
|
+
# parts announcing the fact that its a MMS message from
|
10
|
+
# Sprint Nextel and these parts can be ignored.
|
11
|
+
#
|
12
|
+
# The default subject on these messages from the carrier
|
13
|
+
# is the name of the image or video attached to the message.
|
8
14
|
|
9
15
|
class MMS2R::NextelMedia < MMS2R::Media
|
10
16
|
end
|
data/lib/mms2r/sprint_media.rb
CHANGED
@@ -1,52 +1,160 @@
|
|
1
1
|
require 'net/http'
|
2
2
|
require 'rubygems'
|
3
3
|
require 'hpricot'
|
4
|
-
require 'mms2r'
|
5
|
-
require 'mms2r/media'
|
6
4
|
|
7
5
|
module MMS2R
|
8
6
|
|
9
7
|
##
|
10
8
|
# Sprint version of MMS2R::Media
|
9
|
+
#
|
10
|
+
# Sprint is an annoying carrier because they think they
|
11
|
+
# are so important that they don't actually transmit
|
12
|
+
# user generated content (like images or videos) directly
|
13
|
+
# in the MMS message. Instead, what they do is hijack the
|
14
|
+
# media that is sent from the cellular subscriber and place
|
15
|
+
# that content on a content server. In place of the media
|
16
|
+
# the recipient receives a HTML part telling the recipient
|
17
|
+
# how great Sprint is with links back to their content server.
|
18
|
+
# Then the recipient has to click through Sprint more pages
|
19
|
+
# to view the content.
|
20
|
+
#
|
21
|
+
# The default subject on these messages from the
|
22
|
+
# carrier is "You have new Picture Mail!"
|
11
23
|
|
12
24
|
class MMS2R::SprintMedia < MMS2R::Media
|
13
25
|
|
14
26
|
##
|
15
|
-
# MMS2R::SprintMedia has to override
|
16
|
-
# doesn't attach media (images, video, etc.) to
|
27
|
+
# MMS2R::SprintMedia has to override process() because Sprint
|
28
|
+
# doesn't attach media (images, video, etc.) to its MMS. Media such
|
17
29
|
# as images and videos are hosted on a Sprint content server.
|
18
30
|
# MMS2R::SprintMedia has to pick apart an HTML attachment to find
|
19
|
-
# the URL to the media on Sprint's content server
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
31
|
+
# the URL to the media on Sprint's content server and download
|
32
|
+
# each piece of content. Any text message part of the MMS
|
33
|
+
# if it exists is embedded in the html.
|
34
|
+
|
35
|
+
def process
|
36
|
+
@logger.info("#{self.class} processing") unless @logger.nil?
|
37
|
+
#sprint MMS are multipart
|
38
|
+
parts = @mail.parts
|
39
|
+
|
40
|
+
#find the payload html
|
41
|
+
doc = nil
|
42
|
+
parts.each do |p|
|
43
|
+
next unless self.class.part_type?(p).eql?('text/html')
|
44
|
+
d = Hpricot(p.body)
|
45
|
+
title = d.at('title').inner_html
|
46
|
+
doc = d if title =~ /You have new Picture Mail!/
|
47
|
+
end
|
48
|
+
return if doc.nil? #it was a dud
|
49
|
+
|
50
|
+
# break it down
|
51
|
+
sprint_phone_number(doc)
|
52
|
+
sprint_process_text(doc)
|
53
|
+
sprint_process_media(doc)
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
private
|
58
|
+
|
59
|
+
##
|
60
|
+
# Digs out where Sprint hides the phone number
|
61
|
+
|
62
|
+
def sprint_phone_number(doc)
|
63
|
+
c = doc.search("/html/head/comment//").last
|
64
|
+
t = c.content.gsub(/\s+/m," ").strip
|
65
|
+
#@number returned in parent's get_number
|
66
|
+
@number = / name="MDN">(\d+)</.match(t)[1]
|
67
|
+
end
|
68
|
+
|
69
|
+
##
|
70
|
+
# pulls out the user text form the MMS and adds the text
|
71
|
+
# to media hash
|
72
|
+
|
73
|
+
def sprint_process_text(doc)
|
74
|
+
# there is at least one <pre> with MMS text if text has been included by
|
75
|
+
# the user. (note) we'll have to verify that if they attach multiple texts
|
76
|
+
# to the MMS then Sprint stacks it up in multiple <pre>'s. The only <pre>
|
77
|
+
# tag in the document is for text from the user.
|
78
|
+
doc.search("/html/body//pre").each do |pre|
|
79
|
+
type = 'text/plain'
|
80
|
+
text = pre.inner_html.strip
|
81
|
+
next if text.size == 0
|
82
|
+
type, text = transform_text(type, text)
|
83
|
+
type, file = sprint_write_file(type, text.strip)
|
84
|
+
add_file(type, file) unless type.nil? || file.nil?
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
##
|
89
|
+
# Fetch all the media that is referred to in the doc
|
90
|
+
|
91
|
+
def sprint_process_media(doc)
|
92
|
+
srcs = Array.new
|
93
|
+
# collect all the images in the document, even though
|
94
|
+
# they are <img> tag some might actually refer to video.
|
95
|
+
# To know the link refers to vide one must look at the
|
96
|
+
# content type on the http GET response.
|
97
|
+
imgs = doc.search("/html/body//img")
|
98
|
+
imgs.each do |i|
|
99
|
+
src = i.attributes['src']
|
100
|
+
# we don't want to double fetch content and we only
|
101
|
+
# want to fetch media from the content server, you get
|
102
|
+
# a clue about that as there is a RECIPIENT in the URI path
|
103
|
+
# of real content
|
104
|
+
next unless /mmps\/RECIPIENT\//.match(src)
|
105
|
+
next if srcs.detect{|s| s.eql?(src)}
|
106
|
+
srcs << src
|
107
|
+
end
|
108
|
+
|
109
|
+
#we've got the payload now, go fetch them
|
110
|
+
cnt = 0
|
111
|
+
srcs.each do |src|
|
32
112
|
begin
|
33
|
-
|
34
|
-
res.
|
35
|
-
|
36
|
-
|
37
|
-
|
113
|
+
url = URI.parse(src)
|
114
|
+
#res = Net::HTTP.get_response(url)
|
115
|
+
#lets be vanilla stealth
|
116
|
+
agent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322)"
|
117
|
+
res = Net::HTTP.start(url.host, url.port) do |http|
|
118
|
+
req = Net::HTTP::Get.new(url.request_uri, {'User-Agent' => agent})
|
119
|
+
http.request(req)
|
120
|
+
end
|
38
121
|
rescue
|
39
122
|
@logger.error("#{self.class} processing error, #{$!}") unless @logger.nil?
|
123
|
+
next
|
40
124
|
end
|
125
|
+
|
126
|
+
# setup the file path and file
|
127
|
+
base = /\/RECIPIENT\/([^\/]+)\//.match(src)[1]
|
128
|
+
type = res.content_type
|
129
|
+
file_name = "#{base}-#{cnt}.#{self.class.default_ext(type)}"
|
130
|
+
file = File.join(msg_tmp_dir(),File.basename(file_name))
|
131
|
+
|
132
|
+
# write it and add it to the media hash
|
133
|
+
type, file = sprint_write_file(type, res.body, file)
|
134
|
+
add_file(type, file) unless type.nil? || file.nil?
|
135
|
+
cnt = cnt + 1
|
41
136
|
end
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
137
|
+
|
138
|
+
end
|
139
|
+
|
140
|
+
##
|
141
|
+
# Creates a temporary file based on the type
|
142
|
+
|
143
|
+
def sprint_temp_file(type)
|
144
|
+
file_name = "#{Time.now.to_f}.#{self.class.default_ext(type)}"
|
145
|
+
File.join(msg_tmp_dir(),File.basename(file_name))
|
146
|
+
end
|
147
|
+
|
148
|
+
##
|
149
|
+
# Writes the content to a file and returns the type, file as a tuple.
|
150
|
+
def sprint_write_file(type, content, file = nil)
|
151
|
+
file = sprint_temp_file(type) if file.nil?
|
152
|
+
@logger.info("#{self.class} writing file #{file}") unless @logger.nil?
|
153
|
+
File.open(file,'w'){ |f|
|
154
|
+
f.write(content)
|
155
|
+
}
|
49
156
|
return type, file
|
50
157
|
end
|
158
|
+
|
51
159
|
end
|
52
160
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module MMS2R
|
2
|
+
|
3
|
+
##
|
4
|
+
# Sprint PCS version of MMS2R::Media
|
5
|
+
#
|
6
|
+
# This is a SMS message from a Sprint subscriber
|
7
|
+
# that is transformed into an MMS so it can leave the
|
8
|
+
# Sprint network. Its not a multipart email, its
|
9
|
+
# body is the message.
|
10
|
+
#
|
11
|
+
# The subject of these MMS are always the
|
12
|
+
# empty string.
|
13
|
+
|
14
|
+
class MMS2R::SprintPcsMedia < MMS2R::Media
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module MMS2R
|
2
|
+
|
3
|
+
##
|
4
|
+
# T-Mobile version of MMS2R::Media
|
5
|
+
#
|
6
|
+
# T-Mobile MMS have the user's content in them as
|
7
|
+
# a multipart but they also frame that content in
|
8
|
+
# a HTML document. They also attach a number of small
|
9
|
+
# images with the MMS that are used in the HTML so that
|
10
|
+
# if an email reader is used to view the message then
|
11
|
+
# the message is framed nicely by pretty T-Mobile
|
12
|
+
# logos. MMS2R throws out all that junk and leaves the
|
13
|
+
# the user generated content.
|
14
|
+
#
|
15
|
+
# The default subject of the MMS from the carrier
|
16
|
+
# is the empty string if the user did not set
|
17
|
+
# the subject explicitly.
|
18
|
+
|
19
|
+
class MMS2R::TMobileMedia < MMS2R::Media
|
20
|
+
end
|
21
|
+
end
|
data/lib/mms2r/verizon_media.rb
CHANGED
@@ -1,10 +1,18 @@
|
|
1
|
-
require 'mms2r'
|
2
|
-
require 'mms2r/media'
|
3
|
-
|
4
1
|
module MMS2R
|
5
2
|
|
6
3
|
##
|
7
4
|
# Verizon version of MMS2R::Media
|
5
|
+
#
|
6
|
+
# Typically there are two parts to a Verizon MMS
|
7
|
+
# if its just for a image for example. The first part
|
8
|
+
# is text with a message that says the MMS is being
|
9
|
+
# sent from a Verizon subscriber. If the MMS also
|
10
|
+
# contains a user generated message then that will be
|
11
|
+
# at the top of the text greeting from Verizon. The
|
12
|
+
# part of the MMS is the media itself.
|
13
|
+
#
|
14
|
+
# The default subject on these MMS is the empty
|
15
|
+
# string if the user has not already specified one.
|
8
16
|
|
9
17
|
class MMS2R::VerizonMedia < MMS2R::Media
|
10
18
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module MMS2R
|
2
|
+
|
3
|
+
##
|
4
|
+
# Verizon/Vtext version of MMS2R::Media
|
5
|
+
#
|
6
|
+
# Vtext is a SMS message from a Verizon subscriber
|
7
|
+
# that is transformed into an MMS so it can leave the
|
8
|
+
# Verizon network. Its not a multipart email, its
|
9
|
+
# body is the message.
|
10
|
+
#
|
11
|
+
# The subject of the message is the same as the body
|
12
|
+
# of the message.
|
13
|
+
|
14
|
+
class MMS2R::VtextMedia < MMS2R::Media
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
From: 2068675309@cingularme.com
|
2
|
+
To: tommytutone@example.com
|
3
|
+
Subject:
|
4
|
+
X-OPWV-Extra-Message-Type: MO
|
5
|
+
Message-Id: <01234567890123.ZZCD4567.foobar01.cingularme.com@cingularme.com>
|
6
|
+
Date: Wed, 7 Feb 2007 00:39:36 -0500
|
7
|
+
|
8
|
+
hello world
|
9
|
+
foo bar
|
10
|
+
|
11
|
+
--
|
12
|
+
===============================================
|
13
|
+
Brought to you by, Cingular Wireless Messaging
|
14
|
+
http://www.CingularMe.COM/
|
@@ -13,5 +13,12 @@ Content-Location: hello_world.txt
|
|
13
13
|
Content-Disposition: inline
|
14
14
|
|
15
15
|
aGVsbG8gd29ybGQ=
|
16
|
+
------=_Part_1061064_5544954.1168500502466
|
17
|
+
Content-Type: application/smil;Charset=UTF-8;Name=mms.smil.txt
|
18
|
+
content-location: mms.smil.txt
|
19
|
+
content-id: <mms.smil.txt>
|
20
|
+
Content-Transfer-Encoding: 7bit
|
21
|
+
|
22
|
+
Water
|
16
23
|
------=_Part_1061064_5544954.1168500502466--
|
17
24
|
|
File without changes
|
@@ -0,0 +1,49 @@
|
|
1
|
+
X-Priority: 3
|
2
|
+
Importance: Normal
|
3
|
+
From: 2068675309@examle.com
|
4
|
+
To: tommytutone@example.com
|
5
|
+
Subject:
|
6
|
+
Message-ID: <012345678901AAAAAF@-89012333336789012111>
|
7
|
+
Date: Tue, 2 Jan 2007 13:22:45 -0600
|
8
|
+
MIME-Version: 1.0
|
9
|
+
Content-Type: multipart/mixed;
|
10
|
+
type="application/smil";
|
11
|
+
boundary="__CONTENT_01234_PART_BOUNDARY__01234567__"
|
12
|
+
|
13
|
+
--__CONTENT_01234_PART_BOUNDARY__01234567__
|
14
|
+
content-type: text/plain
|
15
|
+
Content-Location: small.txt
|
16
|
+
|
17
|
+
small
|
18
|
+
|
19
|
+
--__CONTENT_01234_PART_BOUNDARY__01234567__
|
20
|
+
Content-Type: text/plain; charset=utf-8
|
21
|
+
Content-Transfer-Encoding: base64
|
22
|
+
Content-Location: big.txt
|
23
|
+
Content-Disposition: inline
|
24
|
+
|
25
|
+
dGhpcyBzaG91bGQgYmUgYmlnZ2VyIHRleHQ=
|
26
|
+
|
27
|
+
--__CONTENT_01234_PART_BOUNDARY__01234567__
|
28
|
+
Content-Type: image/gif; name=small.gif
|
29
|
+
Content-Transfer-Encoding: base64
|
30
|
+
Content-Disposition: attachment; filename=small.gif
|
31
|
+
Content-ID: <small.gif>
|
32
|
+
|
33
|
+
R0lGODlhAQABAIAAAP///wAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==
|
34
|
+
|
35
|
+
--__CONTENT_01234_PART_BOUNDARY__01234567__
|
36
|
+
Content-Type: image/jpeg;
|
37
|
+
name="big.jpg"
|
38
|
+
Content-Location: big.jpg
|
39
|
+
Content-Transfer-Encoding: base64
|
40
|
+
|
41
|
+
/9j/4AAQSkZJRgABAQEASABIAAD/4QAWRXhpZgAATU0AKgAAAAgAAAAAAAD//gAXQ3JlYXRl
|
42
|
+
ZCB3aXRoIFRoZSBHSU1Q/9sAQwAFAwQEBAMFBAQEBQUFBgcMCAcHBwcPCwsJDBEPEhIRDxER
|
43
|
+
ExYcFxMUGhURERghGBodHR8fHxMXIiQiHiQcHh8e/9sAQwEFBQUHBgcOCAgOHhQRFB4eHh4e
|
44
|
+
Hh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4e/8AAEQgAAQAB
|
45
|
+
AwEiAAIRAQMRAf/EABUAAQEAAAAAAAAAAAAAAAAAAAAH/8QAFBABAAAAAAAAAAAAAAAAAAAA
|
46
|
+
AP/EABUBAQEAAAAAAAAAAAAAAAAAAAcI/8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQAC
|
47
|
+
EQMRAD8AlgA6WW//2Q==
|
48
|
+
--__CONTENT_01234_PART_BOUNDARY__01234567__--
|
49
|
+
|
@@ -81,7 +81,7 @@ Content-Transfer-Encoding: 7bit
|
|
81
81
|
<table border="0" bgcolor="#ffffff" cellpadding="0" cellspacing="7" style="table-layout:fixed">
|
82
82
|
<tr>
|
83
83
|
<td align="center">
|
84
|
-
<img src="http://localhost:99163/
|
84
|
+
<img src="http://localhost:99163/mmps/RECIPIENT/000_0123a01234567890_1/2?inviteToken=helloworld0123456789&limitsize=258,258&outquality=90&squareoutput=255,255,255&ext=.jpg&iconifyVideo=true&wm=1&HACK=BROKEN"/>
|
85
85
|
</td>
|
86
86
|
</tr>
|
87
87
|
</table>
|
@@ -81,7 +81,7 @@ Content-Transfer-Encoding: 7bit
|
|
81
81
|
<table border="0" bgcolor="#ffffff" cellpadding="0" cellspacing="7" style="table-layout:fixed">
|
82
82
|
<tr>
|
83
83
|
<td align="center">
|
84
|
-
<img src="http://localhost:99163/
|
84
|
+
<img src="http://localhost:99163/mmps/RECIPIENT/000_0123a01234567890_1/2?inviteToken=helloworld0123456789&limitsize=258,258&outquality=90&squareoutput=255,255,255&ext=.jpg&iconifyVideo=true&wm=1&HACK=IMAGE"/>
|
85
85
|
</td>
|
86
86
|
</tr>
|
87
87
|
</table>
|
@@ -1,8 +1,195 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
1
|
+
Message-ID: <01234567.9876543210987.JdsafdsaMail.jkdos@adfsalal09>
|
2
|
+
From: "someuser@pm.sprint.com" <someuser@pm.sprint.com>
|
3
|
+
To: tommytutone@example.com
|
4
|
+
Subject: You have new Picture Mail!
|
5
|
+
MIME-Version: 1.0
|
6
|
+
Content-Type: multipart/alternative;
|
7
|
+
boundary="----=_Part_012345_67890123.4567890123456"
|
8
|
+
X-Priority: 3
|
9
|
+
X-MSMail-Priority: Normal
|
10
|
+
Importance: Normal
|
11
|
+
|
12
|
+
------=_Part_012345_67890123.4567890123456
|
13
|
+
Content-Type: text/plain; charset=us-ascii
|
14
|
+
Content-Transfer-Encoding: 7bit
|
15
|
+
|
16
|
+
You have new Picture Mail!
|
17
|
+
|
18
|
+
Click Go/View to see now.
|
19
|
+
http://pictures.sprintpcs.com/?mivt=helloworld0123456789&shareName=MMS
|
20
|
+
|
21
|
+
_abcedef
|
22
|
+
|
23
|
+
|
24
|
+
------=_Part_012345_67890123.4567890123456
|
25
|
+
Content-Type: text/html
|
26
|
+
Content-Transfer-Encoding: 7bit
|
27
|
+
|
28
|
+
<html>
|
29
|
+
<head><title>You have new Picture Mail!</title>
|
30
|
+
<!-- lsPictureMail-Share-helloworld0123456789-comment
|
31
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
32
|
+
<shareMessage>
|
33
|
+
<messageContents type="PICTURE">
|
34
|
+
<messageText></messageText>
|
35
|
+
<mediaItems>
|
36
|
+
<mediaItem id="1">
|
37
|
+
<title></title>
|
38
|
+
&lt;url&gt;http://pictures.sprintpcs.com/getMMBOXMessageMedia?id=Xw1004H8sLv6S3x76lVPYvc9HWuygho0mqG1a5IEKWLR8s8O0GEqXAmk5gW%2FZUWGqyw0fwJJvr7U%0AtWtQs5%2FZA7tmYNq7KKkBMqlL64JVNH%2BGkNKbb8WqPL%2FsrHZdYUVet3SRzN1GfrfUo%2BpWfjCBBg%3D%3D%0A&lt;/url&gt;
|
39
|
+
|
40
|
+
<urlExpiration>2007-03-11T21:14:27Z</urlExpiration>
|
41
|
+
</mediaItem>
|
42
|
+
</mediaItems>
|
43
|
+
</messageContents>
|
44
|
+
</shareMessage>
|
45
|
+
|
46
|
+
-->
|
47
|
+
<!-- lsPictureMail-UserInfo-helloworld0123456789-comment
|
48
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
49
|
+
<UserInfo timestamp="2007-03-04T21:14:27.96+00:00" originating_from_address="someuser@pm.sprint.com"><credential name="MDN">2068509247</credential></UserInfo>
|
50
|
+
-->
|
51
|
+
</head>
|
52
|
+
<body marginheight="0" marginwidth="0" topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0">
|
53
|
+
<table border="0" width="100%" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" >
|
54
|
+
<tr>
|
55
|
+
<td VALIGN="top" colspan="2" width="100%">
|
56
|
+
<table border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#FFE100">
|
57
|
+
<tr>
|
58
|
+
<td><a href="http://www.sprintpcs.com"><img src="http://pictures.sprintpcs.com/retailers/PCSNEXTEL/images/logos/togetherWithNextel.gif" alt="" border="0" /></a></td>
|
59
|
+
</tr>
|
60
|
+
</table>
|
61
|
+
</td>
|
62
|
+
</tr>
|
63
|
+
<tr>
|
64
|
+
<td VALIGN="top" colspan="2">
|
65
|
+
<table border="0" cellpadding="0" cellspacing="0" width="590" bgcolor="#FFFFFF">
|
66
|
+
<tr>
|
67
|
+
<td><br/><p><img src="http://pictures.sprintpcs.com/images/x.gif" border="0" width="10"/><font face="trebuchet ms, Helvetica, Arial, Verdana" size="2"><b>You have a Picture Mail from someuser@pm.sprint.com</b></font><br/><br/></p></td>
|
68
|
+
</tr>
|
69
|
+
</table>
|
70
|
+
</td>
|
71
|
+
</tr>
|
72
|
+
<tr>
|
73
|
+
<td colspan="2">
|
74
|
+
<table border="0" width="590" cellpadding="0" cellspacing="0">
|
75
|
+
<tr>
|
76
|
+
<td width="10"> </td>
|
77
|
+
<td width="280" valign="top">
|
78
|
+
<table border="0" cellpadding="0" style="border:1px solid #9C9A9C;">
|
79
|
+
<tr>
|
80
|
+
<td>
|
81
|
+
<table border="0" bgcolor="#ffffff" cellpadding="0" cellspacing="7" style="table-layout:fixed">
|
82
|
+
<tr>
|
83
|
+
<td align="center">
|
84
|
+
<img src="http://pictures.sprintpcs.com/{SHARE_ICON_URI}&limitsize=258,258&outquality=90&squareoutput=255,255,255&ext=.jpg&iconifyVideo=true&wm=1"/>
|
85
|
+
</td>
|
86
|
+
</tr>
|
87
|
+
</table>
|
88
|
+
</td>
|
89
|
+
</tr>
|
90
|
+
</table>
|
91
|
+
</td>
|
92
|
+
<td width="20"> </td>
|
93
|
+
<td VALIGN="top" align="right" width="280">
|
94
|
+
<table border="0" cellpadding="0" cellspacing="0" width="280" style="table-layout:fixed">
|
95
|
+
<tr>
|
96
|
+
<td><p><font face="trebuchet ms, Helvetica, Arial, Verdana" size="2"><b>Message:</b></font></p></td>
|
97
|
+
</tr>
|
98
|
+
<tr>
|
99
|
+
<td><pre style="overflow:auto; font:normal 10pt trebuchet ms; white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">Tea Pot</pre></td>
|
100
|
+
</tr>
|
101
|
+
<tr>
|
102
|
+
<td><img src="http://pictures.sprintpcs.com/images/x.gif" border="0" height="15"/></td>
|
103
|
+
</tr>
|
104
|
+
<tr>
|
105
|
+
<td width="280">
|
106
|
+
<div style="padding-left:10px; padding-top:4px; padding-bottom:4px; color:white; background-color:#59639C; font: bold 10pt trebuchet ms" width="280">
|
107
|
+
Options
|
108
|
+
</div>
|
109
|
+
<div style="padding:10px; background-color:#f1f1f1; font: normal 10pt trebuchet ms" width="280">
|
110
|
+
<a target="_blank" style="color: #148AB2;" href="http://pictures.sprintpcs.com/share.do?invite=helloworld0123456789&shareName=MMS&messageState=RETRIEVED">View Picture</a><br/>
|
111
|
+
<a target="_blank" style="color: #148AB2;" href="http://pictures.sprintpcs.com/share.do?invite=helloworld0123456789&shareName=PRINT">Order Prints and Gifts</a><br/>
|
112
|
+
<a target="_blank" style="color: #148AB2;" href="http://pictures.sprintpcs.com/share.do?invite=helloworld0123456789&shareName=REPLY">Reply to Sender</a><br/>
|
113
|
+
<a target="_blank" style="color: #148AB2;" href="http://pictures.sprintpcs.com/share.do?invite=helloworld0123456789&shareName=REPLYTOALL">Reply to All</a><br/>
|
114
|
+
<a target="_blank" style="color: #148AB2;" href="http://pictures.sprintpcs.com/share.do?invite=helloworld0123456789&shareName=FORWARD">Forward</a><br/><br/>
|
115
|
+
Send and receive Pictures and Videos through Picture Mail<sup>SM</sup>. For more information go to <a target="_blank" style="color: #148AB2;" href="http://www.sprint.com/picturemail">www.sprint.com/picturemail.</a>
|
116
|
+
</div>
|
117
|
+
</td>
|
118
|
+
</tr>
|
119
|
+
</table>
|
120
|
+
</td>
|
121
|
+
</tr>
|
122
|
+
</table>
|
123
|
+
</td>
|
124
|
+
</tr>
|
125
|
+
<tr>
|
126
|
+
<td colspan="2">
|
127
|
+
<img src="http://pictures.sprintpcs.com/images/x.gif" width="5" height="15"/>
|
128
|
+
</td>
|
129
|
+
</tr>
|
130
|
+
<tr>
|
131
|
+
<td align="left" colspan="2" width="590">
|
132
|
+
<table cellpadding="0" cellspacing="0" align="left" bgcolor="#FFFFFF">
|
133
|
+
<tr>
|
134
|
+
<td width="10"> </td>
|
135
|
+
<td width="580">
|
136
|
+
<table cellpadding="0" cellspacing="0" align="center" border="0" bgcolor="#FFFFFF">
|
137
|
+
<tr>
|
138
|
+
<!-- AdJuggler 5.0 request
|
139
|
+
Ad Spot: email_picture-mail-invitation_1_120x85
|
140
|
+
Channel: Undefined
|
141
|
+
Ad Dimension: 120x85
|
142
|
+
Category: Undefined
|
143
|
+
Sub-category: Undefined
|
144
|
+
-->
|
145
|
+
<td width="120"><a href="http://banners.pictures.sprintpcs.com/servlet/ajrotator/361/0/clickCGI?zone=1"><img src="http://banners.pictures.sprintpcs.com/servlet/ajrotator/361/0/viewCGI?zone=1&dim=135" border="0"/></a></td>
|
146
|
+
<td width="30"></td>
|
147
|
+
<!-- AdJuggler 5.0 request
|
148
|
+
Ad Spot: email_picture-mail-invitation_2_120x85
|
149
|
+
Channel: Undefined
|
150
|
+
Ad Dimension: 120x85
|
151
|
+
Category: Undefined
|
152
|
+
Sub-category: Undefined
|
153
|
+
-->
|
154
|
+
<td width="120"><a href="http://banners.pictures.sprintpcs.com/servlet/ajrotator/362/0/clickCGI?zone=1"><img src="http://banners.pictures.sprintpcs.com/servlet/ajrotator/362/0/viewCGI?zone=1&dim=135" border="0"/></a></td>
|
155
|
+
<td width="30"></td>
|
156
|
+
<!-- AdJuggler 5.0 request
|
157
|
+
Ad Spot: email_picture-mail-invitation_3_120x85
|
158
|
+
Channel: Undefined
|
159
|
+
Ad Dimension: 120x85
|
160
|
+
Category: Undefined
|
161
|
+
Sub-category: Undefined
|
162
|
+
-->
|
163
|
+
<td width="120"><a href="http://banners.pictures.sprintpcs.com/servlet/ajrotator/363/0/clickCGI?zone=1"><img src="http://banners.pictures.sprintpcs.com/servlet/ajrotator/363/0/viewCGI?zone=1&dim=135" border="0"/></a></td>
|
164
|
+
</tr>
|
165
|
+
</table>
|
166
|
+
</td>
|
167
|
+
</tr>
|
168
|
+
</table>
|
169
|
+
</td>
|
170
|
+
</tr>
|
171
|
+
<tr>
|
172
|
+
<td VALIGN="top" colspan="2" width="590">
|
173
|
+
<img src="http://pictures.sprintpcs.com/images/x.gif" height="5"/>
|
174
|
+
</td>
|
175
|
+
</tr>
|
176
|
+
<tr>
|
177
|
+
<td VALIGN="top" colspan="2" width="100%">
|
178
|
+
<table width="100%" border="0" cellspacing="0" cellpadding="0">
|
179
|
+
<tr>
|
180
|
+
<td bgcolor="#f1f1f1" align="left"><img src="http://pictures.sprintpcs.com/images/x.gif" border="0" width="385" height="15"/><span style="font-family:trebuchet ms, Helvetica, Arial, Verdana; Font-size: 11px; Color: #000000">© 2007 Sprint Nextel. All rights reserved.</span></td>
|
181
|
+
</tr>
|
182
|
+
<tr>
|
183
|
+
<td bgcolor="#f1f1f1" width="100%"><img src="http://pictures.sprintpcs.com/images/x.gif" border="0" width="20" height="5"/><a href="http://www.verisign.com"><img src="http://pictures.sprintpcs.com/retailers/PCSNEXTEL/images/logos/verisign.jpg" alt="VeriSign's Home Page" border="0" /></a></td>
|
184
|
+
</tr>
|
185
|
+
<tr>
|
186
|
+
<td bgcolor="#f1f1f1" width="100%"><img src="http://pictures.sprintpcs.com/images/x.gif" border="0" height="10"/></td>
|
187
|
+
</tr>
|
188
|
+
</table>
|
189
|
+
</td>
|
190
|
+
</tr>
|
191
|
+
</table>
|
192
|
+
</body>
|
193
|
+
</html><!-- picture_mail_arrived -->
|
194
|
+
|
195
|
+
------=_Part_012345_67890123.4567890123456--
|