diff --git a/lib/email/receiver.rb b/lib/email/receiver.rb index 5c184cecf68..3f33e3a38c6 100644 --- a/lib/email/receiver.rb +++ b/lib/email/receiver.rb @@ -32,7 +32,7 @@ module Email def initialize(mail_string) raise EmptyEmailError if mail_string.blank? @staged_users_created = 0 - @raw_email = mail_string + @raw_email = try_to_encode(mail_string, "UTF-8") || try_to_encode(mail_string, "ISO-8859-1") || mail_string @mail = Mail.new(@raw_email) @message_id = @mail.message_id.presence || Digest::MD5.hexdigest(mail_string) end @@ -236,14 +236,16 @@ module Email return nil if string.blank? - # 1) use the charset provided - if mail_part.charset.present? - fixed = try_to_encode(string, mail_part.charset) + # common encodings + encodings = ["UTF-8", "ISO-8859-1"] + encodings.unshift(mail_part.charset) if mail_part.charset.present? + + encodings.uniq.each do |encoding| + fixed = try_to_encode(string, encoding) return fixed if fixed.present? end - # 2) try most used encodings - try_to_encode(string, "UTF-8") || try_to_encode(string, "ISO-8859-1") + nil end def try_to_encode(string, encoding)