mms2r 1.0.7 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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--
|