mailcvt 0.2.29 → 0.2.30
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/lib/encoded_word.rb +34 -10
- data/lib/mailcvt/version.rb +1 -1
- metadata +1 -1
    
        data/lib/encoded_word.rb
    CHANGED
    
    | @@ -63,6 +63,12 @@ class EncodedWord | |
| 63 63 | 
             
                    end
         | 
| 64 64 | 
             
                end
         | 
| 65 65 |  | 
| 66 | 
            +
                def concat_one_line(words)
         | 
| 67 | 
            +
                    line = words.join('')
         | 
| 68 | 
            +
                    parts = mysplit(line, "\n")
         | 
| 69 | 
            +
                    parts.join('')
         | 
| 70 | 
            +
                end
         | 
| 71 | 
            +
             | 
| 66 72 | 
             
                def mysplit(line, sep = "\t")
         | 
| 67 73 | 
             
                    return [] unless line
         | 
| 68 74 | 
             
                    return [] unless line.length > 0
         | 
| @@ -72,7 +78,7 @@ class EncodedWord | |
| 72 78 | 
             
                    pos1 = -1
         | 
| 73 79 | 
             
                    while true do
         | 
| 74 80 | 
             
                        pos1 += 1
         | 
| 75 | 
            -
                        pos2 = line.index( | 
| 81 | 
            +
                        pos2 = line.index(sep, pos1)
         | 
| 76 82 | 
             
                        if pos2
         | 
| 77 83 | 
             
                            parts << line[pos1...pos2]
         | 
| 78 84 | 
             
                            pos1 = pos2
         | 
| @@ -94,9 +100,13 @@ class EncodedWord | |
| 94 100 |  | 
| 95 101 | 
             
                def decode_subject(sub)
         | 
| 96 102 | 
             
                    return '' unless sub and sub.length > 0
         | 
| 97 | 
            -
                     | 
| 98 | 
            -
                     | 
| 99 | 
            -
                     | 
| 103 | 
            +
                    parts = mysplit(sub, "\a")
         | 
| 104 | 
            +
                    words = []
         | 
| 105 | 
            +
                    parts.each do |p|
         | 
| 106 | 
            +
                        wd = word_decode(p) 
         | 
| 107 | 
            +
                        words << wd
         | 
| 108 | 
            +
                    end
         | 
| 109 | 
            +
                    concat_one_line(words)
         | 
| 100 110 | 
             
                end
         | 
| 101 111 |  | 
| 102 112 | 
             
                def trim_emails(emails)
         | 
| @@ -136,18 +146,31 @@ class EncodedWord | |
| 136 146 | 
             
                        attaches << decode_attach(parts[i])
         | 
| 137 147 | 
             
                    end
         | 
| 138 148 | 
             
                    return '' unless attaches.length > 0
         | 
| 139 | 
            -
                    attaches.join("\a") | 
| 149 | 
            +
                    attaches.join("\a")
         | 
| 140 150 | 
             
                end
         | 
| 141 151 |  | 
| 142 152 | 
             
                def decode_attach(attach)
         | 
| 143 153 | 
             
                    return '' unless attach and attach.length > 0
         | 
| 144 | 
            -
                    attach = attach.encode('utf-8', @input_enc, :undef=>:replace, :invalid=>:replace)
         | 
| 145 154 | 
             
                    parts = mysplit(attach, "\a")
         | 
| 146 | 
            -
                     | 
| 155 | 
            +
                    words = []
         | 
| 147 156 | 
             
                    parts.each do |p|
         | 
| 148 | 
            -
                         | 
| 157 | 
            +
                        wd = word_decode(p) 
         | 
| 158 | 
            +
                        words << wd
         | 
| 149 159 | 
             
                    end
         | 
| 150 | 
            -
                     | 
| 160 | 
            +
                    concat_one_line(words)
         | 
| 161 | 
            +
                end
         | 
| 162 | 
            +
             | 
| 163 | 
            +
                def word_decode(input, out_charset = 'utf-8')
         | 
| 164 | 
            +
                    u8 = input.encode('utf-8', @u8_enc, :undef=>:replace, :invalid=>:replace)
         | 
| 165 | 
            +
                    pos1 = u8.index('=?')
         | 
| 166 | 
            +
                    return input unless pos1
         | 
| 167 | 
            +
                    pos2 = u8.index('?=', pos1+1)
         | 
| 168 | 
            +
                    trim = u8[pos1..pos2+1]
         | 
| 169 | 
            +
                    parts = trim.scan(/=\?([A-Za-z0-9_-]+)\?([BQbq])\?([^\?]+)\?=/).first
         | 
| 170 | 
            +
                    charset = parts[0]
         | 
| 171 | 
            +
                    enc = parts[1].upcase
         | 
| 172 | 
            +
                    wd = parts[2].unpack({ "B"=>"m*", "Q"=>"M*" }[enc]).first
         | 
| 173 | 
            +
                    wd.encode(out_charset, charset, :undef=>:replace, :invalid=>:replace)
         | 
| 151 174 | 
             
                end
         | 
| 152 175 |  | 
| 153 176 | 
             
                def mime_decode(input, out_charset = 'utf-8')
         | 
| @@ -161,7 +184,8 @@ class EncodedWord | |
| 161 184 | 
             
                            word.encode(out_charset, charset, :undef=>:replace, :invalid=>:replace)
         | 
| 162 185 | 
             
                        }
         | 
| 163 186 | 
             
                        return ret ? mime_decode(input) : input
         | 
| 164 | 
            -
                    rescue
         | 
| 187 | 
            +
                    rescue => e
         | 
| 188 | 
            +
                        puts e
         | 
| 165 189 | 
             
                        return input
         | 
| 166 190 | 
             
                    end
         | 
| 167 191 | 
             
               end
         | 
    
        data/lib/mailcvt/version.rb
    CHANGED