jpmobile 1.0.10 → 1.0.11
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/VERSION.yml +3 -3
- data/jpmobile.gemspec +1 -1
- data/lib/jpmobile/mail.rb +45 -26
- data/lib/jpmobile/mobile/abstract_mobile.rb +3 -2
- data/lib/jpmobile/util.rb +44 -0
- data/spec/unit/email-fixtures/bounce_with_utf8_part.eml +42 -0
- data/spec/unit/email-fixtures/iphone-mail3.eml +56 -0
- data/spec/unit/email-fixtures/iphone-message.eml +27 -0
- data/spec/unit/mail_spec.rb +86 -0
- data/spec/unit/receive_mail_spec.rb +46 -0
- data/spec/unit/util_spec.rb +14 -0
- data/test/rails/overrides/spec/fixtures/mobile_mailer/bounced-jp.eml +72 -0
- data/test/rails/overrides/spec/mailers/mobile_mailer_spec.rb +9 -0
- metadata +241 -245
data/VERSION.yml
CHANGED
data/jpmobile.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{jpmobile}
|
8
|
-
s.version = "1.0.
|
8
|
+
s.version = "1.0.11"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Yoji Shidara", "Shin-ichiro OGAWA"]
|
data/lib/jpmobile/mail.rb
CHANGED
@@ -18,7 +18,7 @@ module Mail
|
|
18
18
|
|
19
19
|
# change encoding
|
20
20
|
def self.b_value_encode(str, encoding)
|
21
|
-
str = Jpmobile::Util.encode(str, encoding)
|
21
|
+
str = Jpmobile::Util.encode(str, encoding.to_s)
|
22
22
|
[Ruby19.encode_base64(str), encoding]
|
23
23
|
end
|
24
24
|
end
|
@@ -48,9 +48,10 @@ module Mail
|
|
48
48
|
if @mobile = m
|
49
49
|
@charset = m.mail_charset(@charset)
|
50
50
|
|
51
|
-
if
|
52
|
-
|
53
|
-
|
51
|
+
if self.body
|
52
|
+
self.body.content_type_with_jpmobile = self.content_type
|
53
|
+
self.body.charset = @charset
|
54
|
+
self.body.mobile = m
|
54
55
|
end
|
55
56
|
end
|
56
57
|
end
|
@@ -60,7 +61,7 @@ module Mail
|
|
60
61
|
header['subject'].mobile = @mobile if header['subject']
|
61
62
|
header['from'].mobile = @mobile if header['from']
|
62
63
|
header['to'].mobile = @mobile if header['to']
|
63
|
-
self.charset = @mobile.mail_charset
|
64
|
+
self.charset = @mobile.mail_charset
|
64
65
|
|
65
66
|
ready_to_send!
|
66
67
|
|
@@ -115,17 +116,18 @@ module Mail
|
|
115
116
|
if @mobile
|
116
117
|
@body.charset = @charset
|
117
118
|
@body.mobile = @mobile
|
119
|
+
@body.content_type_with_jpmobile = self.content_type
|
118
120
|
|
119
121
|
if has_content_transfer_encoding? and
|
120
|
-
["base64", "quoted-printable"].include?(content_transfer_encoding) and
|
122
|
+
["base64", "quoted-printable"].include?(self.content_transfer_encoding) and
|
121
123
|
["text"].include?(@mobile_main_type)
|
122
124
|
@body.decode_transfer_encoding
|
123
125
|
end
|
124
126
|
|
125
127
|
if @body.multipart?
|
126
128
|
@body.parts.each do |p|
|
127
|
-
p.charset = @charset
|
128
|
-
p.mobile
|
129
|
+
p.charset = @mobile.mail_charset(p.charset)
|
130
|
+
p.mobile = @mobile
|
129
131
|
end
|
130
132
|
end
|
131
133
|
end
|
@@ -277,7 +279,16 @@ module Mail
|
|
277
279
|
end
|
278
280
|
end
|
279
281
|
|
280
|
-
if @body_part_jpmobile and @mobile
|
282
|
+
if @body_part_jpmobile and @mobile and !@charset.blank?
|
283
|
+
if ["base64", "quoted-printable"].include?(self.content_transfer_encoding) and
|
284
|
+
self.content_type.match(/text/)
|
285
|
+
@body_part_jpmobile = Jpmobile::Util.decode(@body_part_jpmobile, self.content_transfer_encoding, @charset)
|
286
|
+
self.content_transfer_encoding = @mobile.class::MAIL_CONTENT_TRANSFER_ENCODING
|
287
|
+
end
|
288
|
+
unless Jpmobile::Util.check_charset(@body_part_jpmobile, @charset)
|
289
|
+
@body_part_jpmobile = Jpmobile::Util.correct_encoding(@body_part_jpmobile)
|
290
|
+
@charset = @body_part_jpmobile.encoding.to_s
|
291
|
+
end
|
281
292
|
@body_part_jpmobile = @mobile.decode_transfer_encoding(@body_part_jpmobile, @charset)
|
282
293
|
end
|
283
294
|
end
|
@@ -311,7 +322,7 @@ module Mail
|
|
311
322
|
end
|
312
323
|
|
313
324
|
class Body
|
314
|
-
attr_accessor :mobile
|
325
|
+
attr_accessor :mobile, :content_type_with_jpmobile
|
315
326
|
|
316
327
|
# convert encoding
|
317
328
|
def encoded_with_jpmobile(transfer_encoding = '8bit')
|
@@ -319,10 +330,16 @@ module Mail
|
|
319
330
|
if @mobile.to_mail_body_encoded?(@raw_source)
|
320
331
|
@raw_source
|
321
332
|
elsif Jpmobile::Util.ascii_8bit?(@raw_source)
|
322
|
-
|
323
|
-
|
333
|
+
_raw_source = if transfer_encoding == encoding
|
334
|
+
@raw_source
|
335
|
+
else
|
336
|
+
enc = Mail::Encodings::get_encoding(get_best_encoding(transfer_encoding))
|
337
|
+
enc.encode(@raw_source)
|
338
|
+
end
|
339
|
+
Jpmobile::Util.force_encode(_raw_source, nil, @charset)
|
324
340
|
else
|
325
|
-
|
341
|
+
case transfer_encoding
|
342
|
+
when /quoted-printable/
|
326
343
|
# [str].pack("M").gsub(/\n/, "\r\n")
|
327
344
|
Jpmobile::Util.force_encode([@mobile.to_mail_body(Jpmobile::Util.force_encode(@raw_source, @charset, Jpmobile::Util::UTF8))].pack("M").gsub(/\n/, "\r\n"), Jpmobile::Util::BINARY, @charset)
|
328
345
|
# @mobile.to_mail_body(Jpmobile::Util.force_encode(@raw_source, @charset, Jpmobile::Util::UTF8))
|
@@ -347,23 +364,25 @@ module Mail
|
|
347
364
|
def mobile=(m)
|
348
365
|
@mobile = m
|
349
366
|
|
367
|
+
if ["base64", "quoted-printable"].include?(self.encoding) and
|
368
|
+
/text/.match(self.content_type_with_jpmobile)
|
369
|
+
self.decode_transfer_encoding
|
370
|
+
end
|
371
|
+
|
350
372
|
if self.multipart? and @mobile
|
351
373
|
self.parts.each do |part|
|
352
|
-
part.charset = @charset
|
374
|
+
part.charset = @mobile.mail_charset(part.charset)
|
353
375
|
part.mobile = @mobile
|
354
|
-
part.body.charset =
|
376
|
+
part.body.charset = part.charset
|
355
377
|
part.body.mobile = @mobile
|
356
378
|
end
|
357
379
|
end
|
358
380
|
end
|
359
381
|
|
360
382
|
def decode_transfer_encoding
|
361
|
-
_raw_source =
|
362
|
-
unless Jpmobile::Util.extract_charset(_raw_source) == @charset
|
363
|
-
@charset = Jpmobile::Util.extract_charset(_raw_source)
|
364
|
-
end
|
365
|
-
_raw_source = Jpmobile::Util.set_encoding(_raw_source, @charset)
|
383
|
+
_raw_source = Jpmobile::Util.decode(@raw_source, self.encoding, @charset)
|
366
384
|
@raw_source = @mobile.decode_transfer_encoding(_raw_source, @charset)
|
385
|
+
self.encoding = 'text'
|
367
386
|
end
|
368
387
|
|
369
388
|
def preamble_with_jpmobile
|
@@ -458,15 +477,15 @@ module Mail
|
|
458
477
|
|
459
478
|
def mobile=(m)
|
460
479
|
if @mobile = m
|
461
|
-
self.charset = @mobile.mail_charset
|
462
|
-
self.value
|
480
|
+
self.charset = @mobile.mail_charset
|
481
|
+
self.value = @jpmobile_raw_text
|
463
482
|
self.parse
|
464
483
|
end
|
465
484
|
end
|
466
485
|
|
467
486
|
def encoded_with_jpmobile
|
468
487
|
if @mobile
|
469
|
-
self.charset = @mobile.mail_charset
|
488
|
+
self.charset = @mobile.mail_charset
|
470
489
|
end
|
471
490
|
|
472
491
|
encoded_without_jpmobile
|
@@ -487,15 +506,15 @@ module Mail
|
|
487
506
|
|
488
507
|
def mobile=(m)
|
489
508
|
if @mobile = m
|
490
|
-
self.charset = @mobile.mail_charset
|
491
|
-
self.value
|
509
|
+
self.charset = @mobile.mail_charset
|
510
|
+
self.value = @jpmobile_raw_text
|
492
511
|
self.parse
|
493
512
|
end
|
494
513
|
end
|
495
514
|
|
496
515
|
def encoded_with_jpmobile
|
497
516
|
if @mobile
|
498
|
-
self.charset = @mobile.mail_charset
|
517
|
+
self.charset = @mobile.mail_charset
|
499
518
|
end
|
500
519
|
|
501
520
|
encoded_without_jpmobile
|
@@ -105,7 +105,7 @@ module Jpmobile::Mobile
|
|
105
105
|
# メール送信用
|
106
106
|
def to_mail_subject(str)
|
107
107
|
Jpmobile::Util.fold_text(Jpmobile::Emoticon.unicodecr_to_utf8(str)).
|
108
|
-
map{|text| "=?#{mail_charset}?B?" + [to_mail_encoding(text)].pack('m').
|
108
|
+
map{|text| "=?#{mail_charset}?B?" + [to_mail_encoding(text)].pack('m').gsub(/\n/, '') + "?=" }.
|
109
109
|
join("\n\s")
|
110
110
|
end
|
111
111
|
def to_mail_body(str)
|
@@ -113,7 +113,8 @@ module Jpmobile::Mobile
|
|
113
113
|
end
|
114
114
|
def mail_charset(charset = nil)
|
115
115
|
# (charset.nil? or charset == "") ? self.class::MAIL_CHARSET : charset
|
116
|
-
self.class::MAIL_CHARSET
|
116
|
+
# self.class::MAIL_CHARSET
|
117
|
+
charset.nil? || charset == '' || charset =~ /US-ASCII/i ? self.class::MAIL_CHARSET : charset
|
117
118
|
end
|
118
119
|
def content_transfer_encoding(headers)
|
119
120
|
transfer_encoding = headers['Content-Transfer-Encoding']
|
data/lib/jpmobile/util.rb
CHANGED
@@ -393,5 +393,49 @@ module Jpmobile
|
|
393
393
|
end
|
394
394
|
result
|
395
395
|
end
|
396
|
+
|
397
|
+
def decode(str, encoding, charset)
|
398
|
+
_str = case encoding
|
399
|
+
when /quoted-printable/i
|
400
|
+
str.unpack('M').first.strip
|
401
|
+
when /base64/i
|
402
|
+
str.unpack('m').first.strip
|
403
|
+
else
|
404
|
+
str
|
405
|
+
end
|
406
|
+
|
407
|
+
_extract_charset = Jpmobile::Util.extract_charset(_str)
|
408
|
+
charset = _extract_charset unless _extract_charset.blank? or _extract_charset == charset
|
409
|
+
Jpmobile::Util.set_encoding(_str, charset)
|
410
|
+
end
|
411
|
+
|
412
|
+
def check_charset(str, charset)
|
413
|
+
if Object.const_defined?(:Encoding)
|
414
|
+
# use NKF.guess
|
415
|
+
::Encoding.compatible?(NKF.guess(str), ::Encoding.find(charset))
|
416
|
+
else
|
417
|
+
true
|
418
|
+
end
|
419
|
+
end
|
420
|
+
|
421
|
+
def correct_encoding(str)
|
422
|
+
if Object.const_defined?(:Encoding)
|
423
|
+
if str.encoding != ::Encoding::ASCII_8BIT and NKF.guess(str) != str.encoding
|
424
|
+
str.force_encoding(NKF.guess(str))
|
425
|
+
end
|
426
|
+
else
|
427
|
+
str = case NKF.guess(str)
|
428
|
+
when NKF::UTF8
|
429
|
+
NKF.nkf('-w', str)
|
430
|
+
when NKF::JIS
|
431
|
+
pp '1'
|
432
|
+
NKF.nkf('-j', str)
|
433
|
+
when NKF::SJIS
|
434
|
+
NKF.nkf("-s", str)
|
435
|
+
end
|
436
|
+
end
|
437
|
+
|
438
|
+
str
|
439
|
+
end
|
396
440
|
end
|
397
441
|
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
Return-Path: <au@ezweb.ne.jp>
|
2
|
+
Delivered-To: ogawa@jpmobile-info.co.jp
|
3
|
+
Subject: =?iso-2022-jp?B?RndkOiAbJEIhWhsoQk51cnNlcnlNYWlsGyRCIVtGfEZ8GyhC?=
|
4
|
+
From: au@ezweb.ne.jp
|
5
|
+
Content-Type: multipart/alternative;
|
6
|
+
boundary=Apple-Mail-453BF7C8-E087-4CEB-A163-18A4B0CBB56C
|
7
|
+
Message-Id: <5C2DBDE0-7AE2-4BD2-B932-97B59EAFED85@ezweb.ne.jp>
|
8
|
+
Date: Tue, 31 Jul 2012 10:44:23 +0900 (JST)
|
9
|
+
To: test@jpmobile-info.org
|
10
|
+
Content-Transfer-Encoding: 7bit
|
11
|
+
MIME-Version: 1.0
|
12
|
+
|
13
|
+
--Apple-Mail-453BF7C8-E087-4CEB-A163-18A4B0CBB56C
|
14
|
+
Content-Transfer-Encoding: quoted-printable
|
15
|
+
Content-Type: text/plain;
|
16
|
+
charset=iso-2022-jp
|
17
|
+
|
18
|
+
|
19
|
+
|
20
|
+
iPhone=1B$B$+$iAw?.=1B(B
|
21
|
+
|
22
|
+
Begin forwarded message:
|
23
|
+
|
24
|
+
> =1B$B$H$j$"$($:#H#T#M#L$NK\J8$G=1B(B
|
25
|
+
> =1B$B$"$l$P$$$$2DG=3D@-$r9MN8$7$F$O=1B(B
|
26
|
+
> =1B$B8+$?$,$d$O$j$Y!<$9$m$/$h$s!J>P!K$G=1B(B
|
27
|
+
> =1B$B$"$l$P$$$$$h$&$J5$$,=1B(B
|
28
|
+
> =1B$B$7$?$N$G%@%_!<$NJ8;zNs$r=1B(B
|
29
|
+
> =1B$B9M$($F8+$kD+!#=1B(B=
|
30
|
+
|
31
|
+
--Apple-Mail-453BF7C8-E087-4CEB-A163-18A4B0CBB56C
|
32
|
+
Content-Transfer-Encoding: base64
|
33
|
+
Content-Type: text/html;
|
34
|
+
charset=utf-8
|
35
|
+
|
36
|
+
44Go44KK44GC44GI44Ga77yo77y077yt77ys44Gu5pys5paH44Gn44GC44KM
|
37
|
+
44Gw44GE44GE5Y+v6IO95oCn44KS6ICD5oWu44GX44Gm44Gv6KaL44Gf44GM
|
38
|
+
44KE44Gv44KK44G544O844GZ44KN44GP44KI44KT77yI56yR77yJ44Gn44GC
|
39
|
+
44KM44Gw44GE44GE44KI44GG44Gq5rCX44GM44GX44Gf44Gu44Gn44OA44Of
|
40
|
+
44O844Gu5paH5a2X5YiX44KS6ICD44GI44Gm6KaL44KL5pyd44CC
|
41
|
+
--Apple-Mail-453BF7C8-E087-4CEB-A163-18A4B0CBB56C--
|
42
|
+
|
@@ -0,0 +1,56 @@
|
|
1
|
+
X-Mozilla-Status: 0011
|
2
|
+
X-Mozilla-Status2: 00000000
|
3
|
+
X-Mozilla-Keys:
|
4
|
+
Return-Path: <au@ezweb.ne.jp>
|
5
|
+
Delivered-To: au@ezweb.ne.jp
|
6
|
+
References: <503ef27994050_75cf4344bfe77fe@jpmobile.jp.mail>
|
7
|
+
In-Reply-To: <503ef27994050_75cf4344bfe77fe@jpmobile.jp.mail>
|
8
|
+
Mime-Version: 1.0 (1.0)
|
9
|
+
Content-Transfer-Encoding: base64
|
10
|
+
Content-Type: text/plain;
|
11
|
+
charset=utf-8
|
12
|
+
Message-Id: <6D015993-FD10-4EE9-8B60-A4588D554649@ezweb.ne.jp>
|
13
|
+
X-Mailer: iPhone Mail (9B206)
|
14
|
+
From: "au@ezweb.ne.jp" <au@ezweb.ne.jp>
|
15
|
+
Subject: =?iso-2022-jp?B?UmU6IBskQiFaGyhCTktTQxskQiFbGyhCdGVzdA==?=
|
16
|
+
Date: Thu, 30 Aug 2012 14:49:20 +0900
|
17
|
+
To: "info@jpmobile.jp" <info@jpmobile.jp>
|
18
|
+
|
19
|
+
DQoNCmlQaG9uZeOBi+OCiemAgeS/oeKXi+KXjg0KDQpPbiAyMDEyLzA4LzMw
|
20
|
+
LCBhdCAxMzo1NiwgaW5mb0BqcG1vYmlsZS5qcCB3cm90ZToNCg0KPiDmnKzm
|
21
|
+
lofmlLnooYzjgarjgZfvvL/vvJXvvJHvvJLmloflrZfvvL/jgYLjgYLjgYLj
|
22
|
+
gYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLj
|
23
|
+
gYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLj
|
24
|
+
gYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLj
|
25
|
+
gYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLj
|
26
|
+
gYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLj
|
27
|
+
gYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLj
|
28
|
+
gYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLj
|
29
|
+
gYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLj
|
30
|
+
gYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLj
|
31
|
+
gYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLj
|
32
|
+
gYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLj
|
33
|
+
gYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLj
|
34
|
+
gYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLj
|
35
|
+
gYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLj
|
36
|
+
gYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLj
|
37
|
+
gYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLj
|
38
|
+
gYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLj
|
39
|
+
gYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLj
|
40
|
+
gYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLj
|
41
|
+
gYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLj
|
42
|
+
gYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLj
|
43
|
+
gYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLj
|
44
|
+
gYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLj
|
45
|
+
gYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLj
|
46
|
+
gYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLj
|
47
|
+
gYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLj
|
48
|
+
gYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLj
|
49
|
+
gYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLj
|
50
|
+
gYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLj
|
51
|
+
gYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLj
|
52
|
+
gYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLj
|
53
|
+
gYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLjgYLvv73vv73ilrPi
|
54
|
+
lrPilrPilrPilrPilrPilrPilrPilrPilrPilrPilrPilrPilrPilrPilrPi
|
55
|
+
lrPilrPvv70NCg==
|
56
|
+
|
@@ -0,0 +1,27 @@
|
|
1
|
+
X-Account-Key: account2
|
2
|
+
X-UIDL: 1345598846.M744553P8903V000000000000FD00I00000000C0120BDF_0.jpjp.jp,S=1186.000031434a023554
|
3
|
+
X-Mozilla-Status: 0001
|
4
|
+
X-Mozilla-Status2: 00000000
|
5
|
+
X-Mozilla-Keys:
|
6
|
+
Return-Path: <au@ezweb.ne.jp>
|
7
|
+
Delivered-To: ogawa@jpmobile.jp
|
8
|
+
Received: (qmail 8893 invoked by SAV 20120821.022 by uid 0); 22 Aug 2012 10:27:26 +0900
|
9
|
+
Received: from unknown (HELO mmsmta08.ezweb.ne.jp) (59.135.39.241)
|
10
|
+
by dc6.etius.jp (124.146.201.109) with ESMTPS (DHE-RSA-AES256-SHA encrypted); 22 Aug 2012 10:27:26 +0900
|
11
|
+
Received-SPF: pass (dc6.etius.jp: SPF record at spf-nm.ezweb.ne.jp designates 59.135.39.241 as permitted sender)
|
12
|
+
Received: from cm (pl0_4-mms [172.22.116.39])
|
13
|
+
by mmsmta08.ezweb.ne.jp (Sentrion-MTA-4.1.0/Switch-3.3.4) with SMTP id q7M1RQgt001822
|
14
|
+
for <info@jpmobile.jp>; Wed, 22 Aug 2012 10:27:26 +0900
|
15
|
+
From:au@ezweb.ne.jp
|
16
|
+
To:ogawa@jpmobile.jp
|
17
|
+
Subject:=?UTF-8?B?aVBob25lIGF1IOODoeODg+OCu+ODvOOCuA==?=
|
18
|
+
Message-ID: <212212358846052174@-212212358846052175>
|
19
|
+
Date: Tue, 22 Aug 2012 01:27:26 +0000
|
20
|
+
MIME-Version:1.0
|
21
|
+
Content-Type: text/plain; charset=utf-8
|
22
|
+
Content-Transfer-Encoding: base64
|
23
|
+
|
24
|
+
JVvlnJLlhZDlkI1dJeOBriVb5L+d6K236ICF5ZCNXSUg5qeYCgrmlr3oqK3jgavpgIHkv6HjgIIK
|
25
|
+
6YG45oqeMeOBryVb44Ki44OJ44Os44K5MV0l44G4CumBuOaKnjLjga8lW+OCouODieODrOOCuTJd
|
26
|
+
JeOBuArov5Tkv6HjgZfjgabkuIvjgZXjgYTjgIIKCmlQaG9uZSBhdSDjg6Hjg4Pjgrvjg7zjgrg=
|
27
|
+
|
data/spec/unit/mail_spec.rb
CHANGED
@@ -255,6 +255,31 @@ describe "Jpmobile::Mail" do
|
|
255
255
|
end
|
256
256
|
end
|
257
257
|
|
258
|
+
describe "long subject with half-characters" do
|
259
|
+
before(:each) do
|
260
|
+
@mail = Mail.new
|
261
|
+
@mail.subject = "西暦2012年09月03日は今日になるわけだが10時16分現在のこの時間ではどうかな"
|
262
|
+
@mail.body = "株式会社・・"
|
263
|
+
@mail.from = "info@jpmobile-rails.org"
|
264
|
+
end
|
265
|
+
|
266
|
+
describe "AbstractMobile" do
|
267
|
+
before(:each) do
|
268
|
+
@mobile = Jpmobile::Mobile::AbstractMobile.new(nil, nil)
|
269
|
+
@mail.mobile = @mobile
|
270
|
+
@mail.to = "むすめふさほせ <info+to@jpmobile-rails.org>"
|
271
|
+
end
|
272
|
+
|
273
|
+
context "to_s" do
|
274
|
+
it "should contain encoded subject" do
|
275
|
+
ascii_8bit(@mail.to_s).should match(Regexp.compile(Regexp.escape("=?ISO-2022-JP?B?GyRCQD5OcRsoQjIwMTIbJEJHLxsoQjA5GyRCN24bKEIwMxskQkZ8JE86IxsoQg==?=")))
|
276
|
+
ascii_8bit(@mail.to_s).should match(Regexp.compile(Regexp.escape("=?ISO-2022-JP?B?GyRCRnwkSyRKJGskbyQxJEAkLBsoQjEwGyRCO34bKEIxNhskQkosOD0bKEI=?=")))
|
277
|
+
ascii_8bit(@mail.to_s).should match(Regexp.compile(Regexp.escape("=?ISO-2022-JP?B?GyRCOl8kTiQzJE47fjRWJEckTyRJJCYkKyRKGyhC?=")))
|
278
|
+
end
|
279
|
+
end
|
280
|
+
end
|
281
|
+
end
|
282
|
+
|
258
283
|
context "with attachments" do
|
259
284
|
before(:each) do
|
260
285
|
@mobile = Jpmobile::Mobile::AbstractMobile.new(nil, nil)
|
@@ -278,6 +303,14 @@ describe "Jpmobile::Mail" do
|
|
278
303
|
@mail.to_s
|
279
304
|
}.should_not raise_error
|
280
305
|
end
|
306
|
+
|
307
|
+
it "should encodes itself successfully with an UTF-8 filename attachment" do
|
308
|
+
@mail.attachments.inline['日本語のファイル名です.jpg'] = @photo
|
309
|
+
|
310
|
+
lambda {
|
311
|
+
@mail.to_s
|
312
|
+
}.should_not raise_error
|
313
|
+
end
|
281
314
|
end
|
282
315
|
|
283
316
|
context "encoding conversion" do
|
@@ -300,4 +333,57 @@ describe "Jpmobile::Mail" do
|
|
300
333
|
ascii_8bit(@mail.to_s).should match(Regexp.compile(Regexp.escape(ascii_8bit("\x31\x30\x3a\x30\x30\x1b\x24\x42\x21\x41\x1b\x28\x42\x31\x32\x3a\x30\x30"))))
|
301
334
|
end
|
302
335
|
end
|
336
|
+
|
337
|
+
context "delivering" do
|
338
|
+
before(:each) do
|
339
|
+
@mobile = Jpmobile::Mobile::AbstractMobile.new(nil, nil)
|
340
|
+
@mail.mobile = @mobile
|
341
|
+
@mail.to = "むすめふさほせ <info+to@jpmobile-rails.org>"
|
342
|
+
end
|
343
|
+
|
344
|
+
it "delivers through SMTP" do
|
345
|
+
@mail.delivery_method :smtp, {:enable_starttls_auto => false}
|
346
|
+
lambda {
|
347
|
+
@mail.deliver
|
348
|
+
}.should_not raise_error
|
349
|
+
|
350
|
+
Mail::TestMailer.deliveries.size
|
351
|
+
end
|
352
|
+
end
|
353
|
+
|
354
|
+
context 'sending with carrier from' do
|
355
|
+
before do
|
356
|
+
@mail = Mail.new
|
357
|
+
@mail.subject = "万葉"
|
358
|
+
@mail.to = "ちはやふる <info@jpmobile-rails.org>"
|
359
|
+
end
|
360
|
+
|
361
|
+
it 'should convert content-transfer-encoding' do
|
362
|
+
mobile = Jpmobile::Mobile::Au.new(nil, nil)
|
363
|
+
@mail.content_transfer_encoding = 'base64'
|
364
|
+
@mail.body = ['ほげ'].pack('m')
|
365
|
+
@mail.charset = 'UTF-8'
|
366
|
+
|
367
|
+
@mail.mobile = mobile
|
368
|
+
@mail.from = '<えーゆー> au@ezweb.ne.jp'
|
369
|
+
|
370
|
+
@mail.encoded.should match(/content-transfer-encoding: 7bit/i)
|
371
|
+
end
|
372
|
+
|
373
|
+
it 'should not convert content-transfer-encoding with BINARY' do
|
374
|
+
mobile = Jpmobile::Mobile::Au.new(nil, nil)
|
375
|
+
data = ['ほげ'].pack('m').strip
|
376
|
+
|
377
|
+
@mail.content_transfer_encoding = 'base64'
|
378
|
+
@mail.content_type = 'image/jpeg'
|
379
|
+
@mail.body = data
|
380
|
+
@mail.charset = 'UTF-8'
|
381
|
+
|
382
|
+
@mail.mobile = mobile
|
383
|
+
@mail.from = '<えーゆー> au@ezweb.ne.jp'
|
384
|
+
|
385
|
+
@mail.encoded.should match(/content-transfer-encoding: base64/i)
|
386
|
+
@mail.encoded.should match(data)
|
387
|
+
end
|
388
|
+
end
|
303
389
|
end
|
@@ -148,6 +148,14 @@ describe "Jpmobile::Mail#receive" do
|
|
148
148
|
end
|
149
149
|
end
|
150
150
|
end
|
151
|
+
|
152
|
+
context 'bounced mail' do
|
153
|
+
it 'should parse sub-part charset correctly' do
|
154
|
+
@mail = Mail.new(open(File.join(File.expand_path(File.dirname(__FILE__)), "email-fixtures/bounce_with_utf8_part.eml")).read)
|
155
|
+
@mail.parts.first.charset.should match(/iso-2022-jp/i)
|
156
|
+
@mail.parts.last.charset.should match(/utf-8/i)
|
157
|
+
end
|
158
|
+
end
|
151
159
|
end
|
152
160
|
|
153
161
|
describe "Docomo" do
|
@@ -220,6 +228,32 @@ describe "Jpmobile::Mail#receive" do
|
|
220
228
|
ascii_8bit(@mail.to_s).should match(Regexp.compile(Regexp.escape(ascii_8bit("\x1b\x24\x42\x32\x71\x35\x44\x24\x2C\x33\x2B\x3A\x45\x75\x48\x1b\x28\x42"))))
|
221
229
|
end
|
222
230
|
end
|
231
|
+
|
232
|
+
context 'From au iPhone' do
|
233
|
+
it 'charset should be UTF-8' do
|
234
|
+
@mail = Mail.new(open(File.join(File.expand_path(File.dirname(__FILE__)), "email-fixtures/iphone-message.eml")).read)
|
235
|
+
@mail.mobile.should be_a(Jpmobile::Mobile::Au)
|
236
|
+
@mail.charset.should match(/utf-8/i)
|
237
|
+
end
|
238
|
+
|
239
|
+
it 'should be encoded correctly' do
|
240
|
+
@mail = Mail.new(open(File.join(File.expand_path(File.dirname(__FILE__)), "email-fixtures/iphone-message.eml")).read)
|
241
|
+
@mail.encoded
|
242
|
+
end
|
243
|
+
end
|
244
|
+
|
245
|
+
context 'From iPad' do
|
246
|
+
it 'charset should be UTF-8' do
|
247
|
+
@mail = Mail.new(open(File.join(File.expand_path(File.dirname(__FILE__)), "email-fixtures/iphone-mail3.eml")).read)
|
248
|
+
@mail.mobile.should be_a(Jpmobile::Mobile::AbstractMobile)
|
249
|
+
@mail.charset.should match(/utf-8/i)
|
250
|
+
end
|
251
|
+
|
252
|
+
it 'should be encoded correctly' do
|
253
|
+
@mail = Mail.new(open(File.join(File.expand_path(File.dirname(__FILE__)), "email-fixtures/iphone-mail3.eml")).read)
|
254
|
+
@mail.encoded
|
255
|
+
end
|
256
|
+
end
|
223
257
|
end
|
224
258
|
|
225
259
|
describe "Softbank" do
|
@@ -288,6 +322,18 @@ describe "Jpmobile::Mail#receive" do
|
|
288
322
|
end
|
289
323
|
end
|
290
324
|
|
325
|
+
describe 'bounced mail' do
|
326
|
+
context "has jp address" do
|
327
|
+
before(:each) do
|
328
|
+
@mail = Mail.new(open(File.join(File.expand_path(File.dirname(__FILE__)), "../../test/rails/overrides/spec/fixtures/mobile_mailer/bounced-jp.eml")).read)
|
329
|
+
end
|
330
|
+
|
331
|
+
it "mobile should abstract mobile" do
|
332
|
+
@mail.mobile.should be_a Jpmobile::Mobile::AbstractMobile
|
333
|
+
end
|
334
|
+
end
|
335
|
+
end
|
336
|
+
|
291
337
|
describe "non-Japanese mail" do
|
292
338
|
context "us-ascii" do
|
293
339
|
before(:each) do
|
data/spec/unit/util_spec.rb
CHANGED
@@ -132,4 +132,18 @@ describe Jpmobile::Util do
|
|
132
132
|
hash[0xE6FB].should == 0x1F526
|
133
133
|
end
|
134
134
|
end
|
135
|
+
|
136
|
+
describe 'check_charset' do
|
137
|
+
it 'returns true if compatible' do
|
138
|
+
str = ascii_8bit('ABC')
|
139
|
+
check_charset(str, 'UTF-8').should be_true
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
describe 'correct_encoding' do
|
144
|
+
it 'updates encoding correctly' do
|
145
|
+
str = jis('再現')
|
146
|
+
utf8?(correct_encoding(str)).should be_true
|
147
|
+
end
|
148
|
+
end
|
135
149
|
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
Return-Path: <>
|
2
|
+
X-Original-To: info@example.jp
|
3
|
+
Delivered-To: info@example.jp
|
4
|
+
Received: by localhost (Postfix)
|
5
|
+
id 081F8161D92; Fri, 17 Aug 2012 23:05:01 +0900 (JST)
|
6
|
+
Date: Fri, 17 Aug 2012 23:05:01 +0900 (JST)
|
7
|
+
From: MAILER-DAEMON@example.jp (Mail Delivery System)
|
8
|
+
Subject: Undelivered Mail Returned to Sender
|
9
|
+
To: info@example.jp
|
10
|
+
Auto-Submitted: auto-replied
|
11
|
+
MIME-Version: 1.0
|
12
|
+
Content-Type: multipart/report; report-type=delivery-status;
|
13
|
+
boundary="EAE03161D91.1345212301/localhost"
|
14
|
+
Message-Id: <20120817140501.081F8161D92@localhost>
|
15
|
+
|
16
|
+
This is a MIME-encapsulated message.
|
17
|
+
|
18
|
+
--EAE03161D91.1345212301/localhost
|
19
|
+
Content-Description: Notification
|
20
|
+
Content-Type: text/plain; charset=us-ascii
|
21
|
+
|
22
|
+
This is the mail system at host localhost.
|
23
|
+
|
24
|
+
I'm sorry to have to inform you that your message could not
|
25
|
+
be delivered to one or more recipients. It's attached below.
|
26
|
+
|
27
|
+
For further assistance, please send mail to postmaster.
|
28
|
+
|
29
|
+
If you do so, please include this problem report. You can
|
30
|
+
delete your own text from the attached returned message.
|
31
|
+
|
32
|
+
The mail system
|
33
|
+
|
34
|
+
<unknown@docomo.ne.jp>: host mfsmax.docomo.ne.jp[203.138.181.112] said: 550
|
35
|
+
Unknown user unknown@docomo.ne.jp (in reply to end of DATA command)
|
36
|
+
|
37
|
+
--EAE03161D91.1345212301/localhost
|
38
|
+
Content-Description: Delivery report
|
39
|
+
Content-Type: message/delivery-status
|
40
|
+
|
41
|
+
Reporting-MTA: dns; localhost
|
42
|
+
X-Postfix-Queue-ID: EAE03161D91
|
43
|
+
X-Postfix-Sender: rfc822; info@example.jp
|
44
|
+
Arrival-Date: Fri, 17 Aug 2012 23:05:00 +0900 (JST)
|
45
|
+
|
46
|
+
Final-Recipient: rfc822; unknown@docomo.ne.jp
|
47
|
+
Action: failed
|
48
|
+
Status: 5.0.0
|
49
|
+
Remote-MTA: dns; mfsmax.docomo.ne.jp
|
50
|
+
Diagnostic-Code: smtp; 550 Unknown user unknown@docomo.ne.jp
|
51
|
+
|
52
|
+
--EAE03161D91.1345212301/localhost
|
53
|
+
Content-Description: Undelivered Message
|
54
|
+
Content-Type: message/rfc822
|
55
|
+
|
56
|
+
Return-Path: <info@example.jp>
|
57
|
+
Received: by localhost (Postfix, from userid 1004)
|
58
|
+
id EAE03161D91; Fri, 17 Aug 2012 23:05:00 +0900 (JST)
|
59
|
+
Date: Fri, 17 Aug 2012 23:05:00 +0900
|
60
|
+
From: info@example.jp
|
61
|
+
To: unknown@docomo.ne.jp
|
62
|
+
Message-ID: <502e4f8c8dc0a_1ed1cbf30467885@mail>
|
63
|
+
Subject: =?Shift_JIS?B?dGVzdA==?=
|
64
|
+
Mime-Version: 1.0
|
65
|
+
Content-Type: text/plain;
|
66
|
+
charset=Shift_JIS
|
67
|
+
Content-Transfer-Encoding: 7bit
|
68
|
+
|
69
|
+
test
|
70
|
+
|
71
|
+
--EAE03161D91.1345212301/localhost--
|
72
|
+
|
@@ -663,6 +663,15 @@ describe MobileMailer, "receiving" do
|
|
663
663
|
parts.first.body.should match(/テストです/)
|
664
664
|
parts.last.body.raw_source.should match(/テストです/)
|
665
665
|
end
|
666
|
+
|
667
|
+
context 'iPhone' do
|
668
|
+
it 'should parse correctly' do
|
669
|
+
lambda {
|
670
|
+
@mail = MobileMailer.receive(open(File.join(Rails.root, "../../../spec/unit/email-fixtures/iphone-message.eml")).read)
|
671
|
+
@mail.encoded
|
672
|
+
}.should_not raise_error
|
673
|
+
end
|
674
|
+
end
|
666
675
|
end
|
667
676
|
|
668
677
|
describe "softbank(sjis) の場合" do
|
metadata
CHANGED
@@ -1,295 +1,297 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: jpmobile
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.11
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 1
|
8
|
-
- 0
|
9
|
-
- 10
|
10
|
-
version: 1.0.10
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Yoji Shidara
|
14
9
|
- Shin-ichiro OGAWA
|
15
10
|
autorequire:
|
16
11
|
bindir: bin
|
17
12
|
cert_chain: []
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
- !ruby/object:Gem::Dependency
|
22
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
23
|
-
none: false
|
24
|
-
requirements:
|
25
|
-
- - ">="
|
26
|
-
- !ruby/object:Gem::Version
|
27
|
-
hash: 3
|
28
|
-
segments:
|
29
|
-
- 0
|
30
|
-
version: "0"
|
31
|
-
prerelease: false
|
13
|
+
date: 2012-10-09 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
32
16
|
name: jeweler
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
|
+
none: false
|
19
|
+
requirements:
|
20
|
+
- - ! '>='
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '0'
|
33
23
|
type: :development
|
34
|
-
|
35
|
-
|
36
|
-
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
27
|
+
requirements:
|
28
|
+
- - ! '>='
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: '0'
|
31
|
+
- !ruby/object:Gem::Dependency
|
32
|
+
name: rails
|
33
|
+
requirement: !ruby/object:Gem::Requirement
|
37
34
|
none: false
|
38
|
-
requirements:
|
35
|
+
requirements:
|
39
36
|
- - ~>
|
40
|
-
- !ruby/object:Gem::Version
|
41
|
-
hash: 37
|
42
|
-
segments:
|
43
|
-
- 3
|
44
|
-
- 0
|
45
|
-
- 17
|
37
|
+
- !ruby/object:Gem::Version
|
46
38
|
version: 3.0.17
|
47
|
-
prerelease: false
|
48
|
-
name: rails
|
49
39
|
type: :development
|
50
|
-
|
51
|
-
|
52
|
-
requirement: &id003 !ruby/object:Gem::Requirement
|
40
|
+
prerelease: false
|
41
|
+
version_requirements: !ruby/object:Gem::Requirement
|
53
42
|
none: false
|
54
|
-
requirements:
|
43
|
+
requirements:
|
55
44
|
- - ~>
|
56
|
-
- !ruby/object:Gem::Version
|
57
|
-
|
58
|
-
|
59
|
-
- 2
|
60
|
-
- 6
|
61
|
-
- 0
|
62
|
-
version: 2.6.0
|
63
|
-
prerelease: false
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: 3.0.17
|
47
|
+
- !ruby/object:Gem::Dependency
|
64
48
|
name: rspec
|
65
|
-
|
66
|
-
version_requirements: *id003
|
67
|
-
- !ruby/object:Gem::Dependency
|
68
|
-
requirement: &id004 !ruby/object:Gem::Requirement
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
69
50
|
none: false
|
70
|
-
requirements:
|
51
|
+
requirements:
|
71
52
|
- - ~>
|
72
|
-
- !ruby/object:Gem::Version
|
73
|
-
hash: 23
|
74
|
-
segments:
|
75
|
-
- 2
|
76
|
-
- 6
|
77
|
-
- 0
|
53
|
+
- !ruby/object:Gem::Version
|
78
54
|
version: 2.6.0
|
55
|
+
type: :development
|
79
56
|
prerelease: false
|
57
|
+
version_requirements: !ruby/object:Gem::Requirement
|
58
|
+
none: false
|
59
|
+
requirements:
|
60
|
+
- - ~>
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: 2.6.0
|
63
|
+
- !ruby/object:Gem::Dependency
|
80
64
|
name: rspec-rails
|
65
|
+
requirement: !ruby/object:Gem::Requirement
|
66
|
+
none: false
|
67
|
+
requirements:
|
68
|
+
- - ~>
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: 2.6.0
|
81
71
|
type: :development
|
82
|
-
version_requirements: *id004
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
requirement: &id005 !ruby/object:Gem::Requirement
|
85
|
-
none: false
|
86
|
-
requirements:
|
87
|
-
- - ">="
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
hash: 3
|
90
|
-
segments:
|
91
|
-
- 0
|
92
|
-
version: "0"
|
93
72
|
prerelease: false
|
73
|
+
version_requirements: !ruby/object:Gem::Requirement
|
74
|
+
none: false
|
75
|
+
requirements:
|
76
|
+
- - ~>
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: 2.6.0
|
79
|
+
- !ruby/object:Gem::Dependency
|
94
80
|
name: webrat
|
81
|
+
requirement: !ruby/object:Gem::Requirement
|
82
|
+
none: false
|
83
|
+
requirements:
|
84
|
+
- - ! '>='
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: '0'
|
95
87
|
type: :development
|
96
|
-
version_requirements: *id005
|
97
|
-
- !ruby/object:Gem::Dependency
|
98
|
-
requirement: &id006 !ruby/object:Gem::Requirement
|
99
|
-
none: false
|
100
|
-
requirements:
|
101
|
-
- - ">="
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
hash: 3
|
104
|
-
segments:
|
105
|
-
- 0
|
106
|
-
version: "0"
|
107
88
|
prerelease: false
|
89
|
+
version_requirements: !ruby/object:Gem::Requirement
|
90
|
+
none: false
|
91
|
+
requirements:
|
92
|
+
- - ! '>='
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '0'
|
95
|
+
- !ruby/object:Gem::Dependency
|
108
96
|
name: geokit
|
97
|
+
requirement: !ruby/object:Gem::Requirement
|
98
|
+
none: false
|
99
|
+
requirements:
|
100
|
+
- - ! '>='
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '0'
|
109
103
|
type: :development
|
110
|
-
version_requirements: *id006
|
111
|
-
- !ruby/object:Gem::Dependency
|
112
|
-
requirement: &id007 !ruby/object:Gem::Requirement
|
113
|
-
none: false
|
114
|
-
requirements:
|
115
|
-
- - ">="
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
hash: 3
|
118
|
-
segments:
|
119
|
-
- 0
|
120
|
-
version: "0"
|
121
104
|
prerelease: false
|
105
|
+
version_requirements: !ruby/object:Gem::Requirement
|
106
|
+
none: false
|
107
|
+
requirements:
|
108
|
+
- - ! '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
122
112
|
name: sqlite3-ruby
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
none: false
|
115
|
+
requirements:
|
116
|
+
- - ! '>='
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '0'
|
123
119
|
type: :development
|
124
|
-
version_requirements: *id007
|
125
|
-
- !ruby/object:Gem::Dependency
|
126
|
-
requirement: &id008 !ruby/object:Gem::Requirement
|
127
|
-
none: false
|
128
|
-
requirements:
|
129
|
-
- - ">="
|
130
|
-
- !ruby/object:Gem::Version
|
131
|
-
hash: 3
|
132
|
-
segments:
|
133
|
-
- 0
|
134
|
-
version: "0"
|
135
120
|
prerelease: false
|
121
|
+
version_requirements: !ruby/object:Gem::Requirement
|
122
|
+
none: false
|
123
|
+
requirements:
|
124
|
+
- - ! '>='
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
version: '0'
|
127
|
+
- !ruby/object:Gem::Dependency
|
136
128
|
name: hpricot
|
129
|
+
requirement: !ruby/object:Gem::Requirement
|
130
|
+
none: false
|
131
|
+
requirements:
|
132
|
+
- - ! '>='
|
133
|
+
- !ruby/object:Gem::Version
|
134
|
+
version: '0'
|
137
135
|
type: :development
|
138
|
-
version_requirements: *id008
|
139
|
-
- !ruby/object:Gem::Dependency
|
140
|
-
requirement: &id009 !ruby/object:Gem::Requirement
|
141
|
-
none: false
|
142
|
-
requirements:
|
143
|
-
- - ">="
|
144
|
-
- !ruby/object:Gem::Version
|
145
|
-
hash: 1
|
146
|
-
segments:
|
147
|
-
- 1
|
148
|
-
- 5
|
149
|
-
- 1
|
150
|
-
version: 1.5.1
|
151
136
|
prerelease: false
|
137
|
+
version_requirements: !ruby/object:Gem::Requirement
|
138
|
+
none: false
|
139
|
+
requirements:
|
140
|
+
- - ! '>='
|
141
|
+
- !ruby/object:Gem::Version
|
142
|
+
version: '0'
|
143
|
+
- !ruby/object:Gem::Dependency
|
152
144
|
name: jeweler
|
145
|
+
requirement: !ruby/object:Gem::Requirement
|
146
|
+
none: false
|
147
|
+
requirements:
|
148
|
+
- - ! '>='
|
149
|
+
- !ruby/object:Gem::Version
|
150
|
+
version: 1.5.1
|
153
151
|
type: :development
|
154
|
-
version_requirements: *id009
|
155
|
-
- !ruby/object:Gem::Dependency
|
156
|
-
requirement: &id010 !ruby/object:Gem::Requirement
|
157
|
-
none: false
|
158
|
-
requirements:
|
159
|
-
- - ">="
|
160
|
-
- !ruby/object:Gem::Version
|
161
|
-
hash: 3
|
162
|
-
segments:
|
163
|
-
- 2
|
164
|
-
- 3
|
165
|
-
- 0
|
166
|
-
version: 2.3.0
|
167
152
|
prerelease: false
|
153
|
+
version_requirements: !ruby/object:Gem::Requirement
|
154
|
+
none: false
|
155
|
+
requirements:
|
156
|
+
- - ! '>='
|
157
|
+
- !ruby/object:Gem::Version
|
158
|
+
version: 1.5.1
|
159
|
+
- !ruby/object:Gem::Dependency
|
168
160
|
name: rspec
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
requirements:
|
175
|
-
- - ">="
|
176
|
-
- !ruby/object:Gem::Version
|
177
|
-
hash: 3
|
178
|
-
segments:
|
179
|
-
- 2
|
180
|
-
- 3
|
181
|
-
- 0
|
161
|
+
requirement: !ruby/object:Gem::Requirement
|
162
|
+
none: false
|
163
|
+
requirements:
|
164
|
+
- - ! '>='
|
165
|
+
- !ruby/object:Gem::Version
|
182
166
|
version: 2.3.0
|
167
|
+
type: :development
|
183
168
|
prerelease: false
|
169
|
+
version_requirements: !ruby/object:Gem::Requirement
|
170
|
+
none: false
|
171
|
+
requirements:
|
172
|
+
- - ! '>='
|
173
|
+
- !ruby/object:Gem::Version
|
174
|
+
version: 2.3.0
|
175
|
+
- !ruby/object:Gem::Dependency
|
184
176
|
name: rspec-rails
|
177
|
+
requirement: !ruby/object:Gem::Requirement
|
178
|
+
none: false
|
179
|
+
requirements:
|
180
|
+
- - ! '>='
|
181
|
+
- !ruby/object:Gem::Version
|
182
|
+
version: 2.3.0
|
185
183
|
type: :development
|
186
|
-
version_requirements: *id011
|
187
|
-
- !ruby/object:Gem::Dependency
|
188
|
-
requirement: &id012 !ruby/object:Gem::Requirement
|
189
|
-
none: false
|
190
|
-
requirements:
|
191
|
-
- - ">="
|
192
|
-
- !ruby/object:Gem::Version
|
193
|
-
hash: 7
|
194
|
-
segments:
|
195
|
-
- 0
|
196
|
-
- 7
|
197
|
-
- 2
|
198
|
-
version: 0.7.2
|
199
184
|
prerelease: false
|
185
|
+
version_requirements: !ruby/object:Gem::Requirement
|
186
|
+
none: false
|
187
|
+
requirements:
|
188
|
+
- - ! '>='
|
189
|
+
- !ruby/object:Gem::Version
|
190
|
+
version: 2.3.0
|
191
|
+
- !ruby/object:Gem::Dependency
|
200
192
|
name: webrat
|
193
|
+
requirement: !ruby/object:Gem::Requirement
|
194
|
+
none: false
|
195
|
+
requirements:
|
196
|
+
- - ! '>='
|
197
|
+
- !ruby/object:Gem::Version
|
198
|
+
version: 0.7.2
|
201
199
|
type: :development
|
202
|
-
version_requirements: *id012
|
203
|
-
- !ruby/object:Gem::Dependency
|
204
|
-
requirement: &id013 !ruby/object:Gem::Requirement
|
205
|
-
none: false
|
206
|
-
requirements:
|
207
|
-
- - ">="
|
208
|
-
- !ruby/object:Gem::Version
|
209
|
-
hash: 3
|
210
|
-
segments:
|
211
|
-
- 1
|
212
|
-
- 5
|
213
|
-
- 0
|
214
|
-
version: 1.5.0
|
215
200
|
prerelease: false
|
201
|
+
version_requirements: !ruby/object:Gem::Requirement
|
202
|
+
none: false
|
203
|
+
requirements:
|
204
|
+
- - ! '>='
|
205
|
+
- !ruby/object:Gem::Version
|
206
|
+
version: 0.7.2
|
207
|
+
- !ruby/object:Gem::Dependency
|
216
208
|
name: geokit
|
209
|
+
requirement: !ruby/object:Gem::Requirement
|
210
|
+
none: false
|
211
|
+
requirements:
|
212
|
+
- - ! '>='
|
213
|
+
- !ruby/object:Gem::Version
|
214
|
+
version: 1.5.0
|
217
215
|
type: :development
|
218
|
-
version_requirements: *id013
|
219
|
-
- !ruby/object:Gem::Dependency
|
220
|
-
requirement: &id014 !ruby/object:Gem::Requirement
|
221
|
-
none: false
|
222
|
-
requirements:
|
223
|
-
- - ">="
|
224
|
-
- !ruby/object:Gem::Version
|
225
|
-
hash: 31
|
226
|
-
segments:
|
227
|
-
- 1
|
228
|
-
- 3
|
229
|
-
- 2
|
230
|
-
version: 1.3.2
|
231
216
|
prerelease: false
|
217
|
+
version_requirements: !ruby/object:Gem::Requirement
|
218
|
+
none: false
|
219
|
+
requirements:
|
220
|
+
- - ! '>='
|
221
|
+
- !ruby/object:Gem::Version
|
222
|
+
version: 1.5.0
|
223
|
+
- !ruby/object:Gem::Dependency
|
232
224
|
name: sqlite3-ruby
|
225
|
+
requirement: !ruby/object:Gem::Requirement
|
226
|
+
none: false
|
227
|
+
requirements:
|
228
|
+
- - ! '>='
|
229
|
+
- !ruby/object:Gem::Version
|
230
|
+
version: 1.3.2
|
233
231
|
type: :development
|
234
|
-
version_requirements: *id014
|
235
|
-
- !ruby/object:Gem::Dependency
|
236
|
-
requirement: &id015 !ruby/object:Gem::Requirement
|
237
|
-
none: false
|
238
|
-
requirements:
|
239
|
-
- - ">="
|
240
|
-
- !ruby/object:Gem::Version
|
241
|
-
hash: 57
|
242
|
-
segments:
|
243
|
-
- 0
|
244
|
-
- 8
|
245
|
-
- 3
|
246
|
-
version: 0.8.3
|
247
232
|
prerelease: false
|
233
|
+
version_requirements: !ruby/object:Gem::Requirement
|
234
|
+
none: false
|
235
|
+
requirements:
|
236
|
+
- - ! '>='
|
237
|
+
- !ruby/object:Gem::Version
|
238
|
+
version: 1.3.2
|
239
|
+
- !ruby/object:Gem::Dependency
|
248
240
|
name: hpricot
|
241
|
+
requirement: !ruby/object:Gem::Requirement
|
242
|
+
none: false
|
243
|
+
requirements:
|
244
|
+
- - ! '>='
|
245
|
+
- !ruby/object:Gem::Version
|
246
|
+
version: 0.8.3
|
249
247
|
type: :development
|
250
|
-
version_requirements: *id015
|
251
|
-
- !ruby/object:Gem::Dependency
|
252
|
-
requirement: &id016 !ruby/object:Gem::Requirement
|
253
|
-
none: false
|
254
|
-
requirements:
|
255
|
-
- - ">="
|
256
|
-
- !ruby/object:Gem::Version
|
257
|
-
hash: 21
|
258
|
-
segments:
|
259
|
-
- 1
|
260
|
-
- 2
|
261
|
-
- 5
|
262
|
-
version: 1.2.5
|
263
248
|
prerelease: false
|
249
|
+
version_requirements: !ruby/object:Gem::Requirement
|
250
|
+
none: false
|
251
|
+
requirements:
|
252
|
+
- - ! '>='
|
253
|
+
- !ruby/object:Gem::Version
|
254
|
+
version: 0.8.3
|
255
|
+
- !ruby/object:Gem::Dependency
|
264
256
|
name: git
|
257
|
+
requirement: !ruby/object:Gem::Requirement
|
258
|
+
none: false
|
259
|
+
requirements:
|
260
|
+
- - ! '>='
|
261
|
+
- !ruby/object:Gem::Version
|
262
|
+
version: 1.2.5
|
265
263
|
type: :development
|
266
|
-
version_requirements: *id016
|
267
|
-
- !ruby/object:Gem::Dependency
|
268
|
-
requirement: &id017 !ruby/object:Gem::Requirement
|
269
|
-
none: false
|
270
|
-
requirements:
|
271
|
-
- - ">="
|
272
|
-
- !ruby/object:Gem::Version
|
273
|
-
hash: 1
|
274
|
-
segments:
|
275
|
-
- 3
|
276
|
-
- 0
|
277
|
-
- 3
|
278
|
-
version: 3.0.3
|
279
264
|
prerelease: false
|
265
|
+
version_requirements: !ruby/object:Gem::Requirement
|
266
|
+
none: false
|
267
|
+
requirements:
|
268
|
+
- - ! '>='
|
269
|
+
- !ruby/object:Gem::Version
|
270
|
+
version: 1.2.5
|
271
|
+
- !ruby/object:Gem::Dependency
|
280
272
|
name: rails
|
273
|
+
requirement: !ruby/object:Gem::Requirement
|
274
|
+
none: false
|
275
|
+
requirements:
|
276
|
+
- - ! '>='
|
277
|
+
- !ruby/object:Gem::Version
|
278
|
+
version: 3.0.3
|
281
279
|
type: :development
|
282
|
-
|
280
|
+
prerelease: false
|
281
|
+
version_requirements: !ruby/object:Gem::Requirement
|
282
|
+
none: false
|
283
|
+
requirements:
|
284
|
+
- - ! '>='
|
285
|
+
- !ruby/object:Gem::Version
|
286
|
+
version: 3.0.3
|
283
287
|
description: A Rails plugin for Japanese mobile-phones
|
284
288
|
email: dara@shidara.net
|
285
289
|
executables: []
|
286
|
-
|
287
290
|
extensions: []
|
288
|
-
|
289
|
-
extra_rdoc_files:
|
291
|
+
extra_rdoc_files:
|
290
292
|
- README
|
291
293
|
- README.rdoc
|
292
|
-
files:
|
294
|
+
files:
|
293
295
|
- .rspec
|
294
296
|
- CHANGELOG
|
295
297
|
- Gemfile
|
@@ -374,9 +376,12 @@ files:
|
|
374
376
|
- spec/unit/email-fixtures/au-emoji.eml
|
375
377
|
- spec/unit/email-fixtures/au-emoji2.eml
|
376
378
|
- spec/unit/email-fixtures/au-emoji5.eml
|
379
|
+
- spec/unit/email-fixtures/bounce_with_utf8_part.eml
|
377
380
|
- spec/unit/email-fixtures/docomo-emoji.eml
|
378
381
|
- spec/unit/email-fixtures/docomo-gmail-sjis.eml
|
379
382
|
- spec/unit/email-fixtures/docomo-jis.eml
|
383
|
+
- spec/unit/email-fixtures/iphone-mail3.eml
|
384
|
+
- spec/unit/email-fixtures/iphone-message.eml
|
380
385
|
- spec/unit/email-fixtures/pc-mail-multi.eml
|
381
386
|
- spec/unit/email-fixtures/pc-mail-single.eml
|
382
387
|
- spec/unit/email-fixtures/photo.jpg
|
@@ -480,6 +485,7 @@ files:
|
|
480
485
|
- test/rails/overrides/spec/fixtures/mobile_mailer/au-emoji.eml
|
481
486
|
- test/rails/overrides/spec/fixtures/mobile_mailer/au-emoji2.eml
|
482
487
|
- test/rails/overrides/spec/fixtures/mobile_mailer/au-emoji5.eml
|
488
|
+
- test/rails/overrides/spec/fixtures/mobile_mailer/bounced-jp.eml
|
483
489
|
- test/rails/overrides/spec/fixtures/mobile_mailer/docomo-emoji.eml
|
484
490
|
- test/rails/overrides/spec/fixtures/mobile_mailer/docomo-gmail-sjis.eml
|
485
491
|
- test/rails/overrides/spec/fixtures/mobile_mailer/docomo-jis.eml
|
@@ -520,36 +526,26 @@ files:
|
|
520
526
|
- tools/list_gps_unsupported_au.rb
|
521
527
|
homepage: http://jpmobile-rails.org
|
522
528
|
licenses: []
|
523
|
-
|
524
529
|
post_install_message:
|
525
530
|
rdoc_options: []
|
526
|
-
|
527
|
-
require_paths:
|
531
|
+
require_paths:
|
528
532
|
- lib
|
529
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
533
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
530
534
|
none: false
|
531
|
-
requirements:
|
532
|
-
- -
|
533
|
-
- !ruby/object:Gem::Version
|
534
|
-
|
535
|
-
|
536
|
-
- 0
|
537
|
-
version: "0"
|
538
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
535
|
+
requirements:
|
536
|
+
- - ! '>='
|
537
|
+
- !ruby/object:Gem::Version
|
538
|
+
version: '0'
|
539
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
539
540
|
none: false
|
540
|
-
requirements:
|
541
|
-
- -
|
542
|
-
- !ruby/object:Gem::Version
|
543
|
-
|
544
|
-
segments:
|
545
|
-
- 0
|
546
|
-
version: "0"
|
541
|
+
requirements:
|
542
|
+
- - ! '>='
|
543
|
+
- !ruby/object:Gem::Version
|
544
|
+
version: '0'
|
547
545
|
requirements: []
|
548
|
-
|
549
546
|
rubyforge_project:
|
550
547
|
rubygems_version: 1.8.24
|
551
548
|
signing_key:
|
552
549
|
specification_version: 3
|
553
550
|
summary: A Rails plugin for Japanese mobile-phones
|
554
551
|
test_files: []
|
555
|
-
|