Fixed/added workaround for followup problem with outlook emails.
This commit is contained in:
parent
3c400c703f
commit
700f96f277
1 changed files with 38 additions and 0 deletions
|
@ -380,3 +380,41 @@ class Channel::EmailParser
|
||||||
return string
|
return string
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# workaround to parse subjects with 2 different encodings correctly (e. g. quoted-printable see test/fixtures/mail9.box)
|
||||||
|
module Mail
|
||||||
|
module Encodings
|
||||||
|
def Encodings.value_decode(str)
|
||||||
|
# Optimization: If there's no encoded-words in the string, just return it
|
||||||
|
return str unless str.index("=?")
|
||||||
|
|
||||||
|
str = str.gsub(/\?=(\s*)=\?/, '?==?') # Remove whitespaces between 'encoded-word's
|
||||||
|
|
||||||
|
# Split on white-space boundaries with capture, so we capture the white-space as well
|
||||||
|
str.split(/([ \t])/).map do |text|
|
||||||
|
if text.index('=?') .nil?
|
||||||
|
text
|
||||||
|
else
|
||||||
|
# Join QP encoded-words that are adjacent to avoid decoding partial chars
|
||||||
|
# text.gsub!(/\?\=\=\?.+?\?[Qq]\?/m, '') if text =~ /\?==\?/
|
||||||
|
|
||||||
|
# Search for occurences of quoted strings or plain strings
|
||||||
|
text.scan(/( # Group around entire regex to include it in matches
|
||||||
|
\=\?[^?]+\?([QB])\?[^?]+?\?\= # Quoted String with subgroup for encoding method
|
||||||
|
| # or
|
||||||
|
.+?(?=\=\?|$) # Plain String
|
||||||
|
)/xmi).map do |matches|
|
||||||
|
string, method = *matches
|
||||||
|
if method == 'b' || method == 'B'
|
||||||
|
b_value_decode(string)
|
||||||
|
elsif method == 'q' || method == 'Q'
|
||||||
|
q_value_decode(string)
|
||||||
|
else
|
||||||
|
string
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end.join("")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in a new issue