mail-jenc 1.0.7 → 1.0.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/mail/jenc/attachments_list_patch.rb +3 -4
- data/lib/mail/jenc/b_encoder.rb +35 -0
- data/lib/mail/jenc/fields/address_field_patch.rb +1 -3
- data/lib/mail/jenc/fields/unstructured_field_patch.rb +1 -3
- data/lib/mail/jenc/percent_encoder.rb +15 -0
- data/lib/mail/jenc/{encoder.rb → rfc2231_encoder.rb} +7 -17
- data/lib/mail/jenc/version.rb +1 -1
- data/lib/mail/jenc.rb +2 -0
- metadata +6 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dfee35d6df629f80ba43bf19452f290442843ca98012c672d60077efd6e21834
|
4
|
+
data.tar.gz: 39712976e5b7dcf560fe7c969176243a540f8080cb3b17e0cd82878bba312aa5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 00c777f94d40b33f15f1effe417674639002db244af18f1e19f08577d1b4e1b80dc036241acc96bc1c396fc7984c40e9cb0ad936a7afe767c4030724875e6aa4
|
7
|
+
data.tar.gz: fc6e89e2d1fe3293d3f82631eaa15e1f4093feceb0a677b413e7af447d71ee0c31cacf3f999d6860c8a813c1c1e4ea1c8f5fbf30894defb6c1b1f1740ae5efaf
|
@@ -5,14 +5,13 @@ module Mail
|
|
5
5
|
if Jenc.enabled?
|
6
6
|
if name && !name.ascii_only? && name.encoding == Encoding::UTF_8 && value.is_a?(Hash) && (charset = value.delete(:header_charset))
|
7
7
|
mime_type = set_mime_type(name)
|
8
|
-
transcoded = Mail::Encodings.transcode_charset(name, name.encoding, charset)
|
9
8
|
if (value.key?(:rfc2231) ? value.delete(:rfc2231) : Jenc.rfc2231)
|
10
|
-
encoded = RFC2231Encoder.encode(
|
9
|
+
encoded = RFC2231Encoder.encode(name, charset)
|
11
10
|
value[:content_disposition] ||= %Q|#{@content_disposition_type}; #{encoded}|
|
12
|
-
encoded =
|
11
|
+
encoded = BEncoder.encode(name, charset)
|
13
12
|
value[:content_type] ||= %Q|#{mime_type}; name="#{encoded}"|
|
14
13
|
else
|
15
|
-
encoded =
|
14
|
+
encoded = BEncoder.encode(name, charset)
|
16
15
|
value[:content_disposition] ||= %Q|#{@content_disposition_type}; filename="#{encoded}"|
|
17
16
|
value[:content_type] ||= %Q|#{mime_type}; name="#{encoded}"|
|
18
17
|
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Mail
|
2
|
+
module Jenc
|
3
|
+
class BEncoder
|
4
|
+
class << self
|
5
|
+
def encode(str, charset)
|
6
|
+
if Jenc.escape_sequence_charsets.include?(charset.to_s.downcase)
|
7
|
+
split(str).map { |s| transcode_and_encode(s, charset) }.join(' ')
|
8
|
+
else
|
9
|
+
transcode_and_encode(str, charset)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def transcode_and_encode(str, charset)
|
16
|
+
Mail::Encodings.b_value_encode(Mail::Encodings.transcode_charset(str, str.encoding, charset))
|
17
|
+
end
|
18
|
+
|
19
|
+
def split(str, max: 40)
|
20
|
+
results = []
|
21
|
+
work = ''
|
22
|
+
str.chars.each do |char|
|
23
|
+
if work.bytesize + char.bytesize >= max
|
24
|
+
results << work
|
25
|
+
work = ''
|
26
|
+
end
|
27
|
+
work += char
|
28
|
+
end
|
29
|
+
results << work unless work.empty?
|
30
|
+
results
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -7,9 +7,7 @@ module Mail
|
|
7
7
|
list = Mail::AddressList.new(value)
|
8
8
|
list.addresses.each do |addr|
|
9
9
|
if addr.display_name && !addr.display_name.ascii_only?
|
10
|
-
addr.display_name =
|
11
|
-
Mail::Encodings.transcode_charset(addr.display_name, addr.display_name.encoding, charset)
|
12
|
-
)
|
10
|
+
addr.display_name = BEncoder.encode(addr.display_name, charset)
|
13
11
|
end
|
14
12
|
end
|
15
13
|
value = list.addresses.map(&:encoded).join(', ')
|
@@ -5,9 +5,7 @@ module Mail
|
|
5
5
|
if Jenc.enabled?
|
6
6
|
if value.is_a?(String) && value.encoding == Encoding::UTF_8 && charset && charset.downcase != 'utf-8'
|
7
7
|
if !value.ascii_only?
|
8
|
-
value =
|
9
|
-
Mail::Encodings.transcode_charset(value, value.encoding, charset)
|
10
|
-
)
|
8
|
+
value = BEncoder.encode(value, charset)
|
11
9
|
elsif value !~ Mail::Encodings::ENCODED_VALUE
|
12
10
|
charset = 'us-ascii'
|
13
11
|
end
|
@@ -1,25 +1,15 @@
|
|
1
1
|
module Mail
|
2
2
|
module Jenc
|
3
|
-
|
3
|
+
class RFC2231Encoder
|
4
4
|
class << self
|
5
|
-
def encode(
|
6
|
-
|
5
|
+
def encode(name, charset, **options)
|
6
|
+
encode_to_hash(name, charset, **options).map { |k, v| "#{k}=#{v}" }.join(";\r\n\s")
|
7
7
|
end
|
8
8
|
|
9
|
-
def
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
end
|
14
|
-
|
15
|
-
module RFC2231Encoder
|
16
|
-
class << self
|
17
|
-
def encode(name, options = {})
|
18
|
-
encode_to_hash(name, **options).map { |k, v| "#{k}=#{v}" }.join(";\r\n\s")
|
19
|
-
end
|
20
|
-
|
21
|
-
def encode_to_hash(name, key: 'filename', charset: 'utf-8')
|
22
|
-
hexes = name.unpack('H*')[0].scan(/.{2}/).map { |hex| "%#{hex.upcase}" }
|
9
|
+
def encode_to_hash(name, charset, key: 'filename')
|
10
|
+
hexes = PercentEncoder.encode_to_array(
|
11
|
+
Mail::Encodings.transcode_charset(name, name.encoding, charset)
|
12
|
+
)
|
23
13
|
|
24
14
|
first_hex_num = hex_num(charset.size + key.size + 3)
|
25
15
|
if hexes.size <= first_hex_num
|
data/lib/mail/jenc/version.rb
CHANGED
data/lib/mail/jenc.rb
CHANGED
@@ -9,6 +9,7 @@ module Mail
|
|
9
9
|
class << self
|
10
10
|
attr_reader :enabled
|
11
11
|
attr_accessor :rfc2231
|
12
|
+
attr_accessor :escape_sequence_charsets
|
12
13
|
attr_accessor :preferred_charsets
|
13
14
|
|
14
15
|
def enabled?
|
@@ -26,6 +27,7 @@ module Mail
|
|
26
27
|
|
27
28
|
self.enable
|
28
29
|
self.rfc2231 = false
|
30
|
+
self.escape_sequence_charsets = ['iso-2022-jp']
|
29
31
|
self.preferred_charsets = {
|
30
32
|
'iso-2022-jp' => 'cp50221',
|
31
33
|
'shift_jis' => 'cp932'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mail-jenc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yoshikazu Kaneta
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-12-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mail
|
@@ -77,10 +77,12 @@ files:
|
|
77
77
|
- Rakefile
|
78
78
|
- lib/mail/jenc.rb
|
79
79
|
- lib/mail/jenc/attachments_list_patch.rb
|
80
|
-
- lib/mail/jenc/
|
80
|
+
- lib/mail/jenc/b_encoder.rb
|
81
81
|
- lib/mail/jenc/fields/address_field_patch.rb
|
82
82
|
- lib/mail/jenc/fields/unstructured_field_patch.rb
|
83
83
|
- lib/mail/jenc/message_patch.rb
|
84
|
+
- lib/mail/jenc/percent_encoder.rb
|
85
|
+
- lib/mail/jenc/rfc2231_encoder.rb
|
84
86
|
- lib/mail/jenc/ruby_1_9_patch.rb
|
85
87
|
- lib/mail/jenc/version.rb
|
86
88
|
homepage: https://github.com/kanety/mail-jenc
|
@@ -102,7 +104,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
102
104
|
- !ruby/object:Gem::Version
|
103
105
|
version: '0'
|
104
106
|
requirements: []
|
105
|
-
rubygems_version: 3.
|
107
|
+
rubygems_version: 3.0.3
|
106
108
|
signing_key:
|
107
109
|
specification_version: 4
|
108
110
|
summary: A mail patch for encoding conventional mail
|