Korjaa sähköpostien lukeminen väärin tyypitetystä liitteestä

Windows saattaa raportoida csv-tiedoston MIME-tyypiksi
application/vnd.ms-excel, jolloin tiedote.md jätti sen tyystin
lukematta, koska se ei osaa lukea Excel-tiedostoja oikein.

Tällä muutoksella tiedote.md yrittää lukea kaikki viestin osat
utf-8-koodauksella, jos muuta ei voi päätellä, ja etsii osoitteita
niistä. Väärästä liitteestä pitäisi olla niin epätodennäköistä löytää
eniten kelvollisia osoitteita nätisti omilla riveillään, että tämä
tuskin aiheuttaa virhetulkintoja.
This commit is contained in:
Saku Laesvuori 2026-08-25 19:19:46 +03:00
parent b49e77de8a
commit 53a84b4c93
Signed by: slaesvuo
GPG Key ID: 257D284A2A1D3A32

View File

@ -103,8 +103,11 @@ parseEmail = first (EmailParseError . T.pack) . parse (message mime)
getEmailsFromMessage :: MIMEMessage -> [Email] getEmailsFromMessage :: MIMEMessage -> [Email]
getEmailsFromMessage = readEmails . toListOf getEmailsFromMessage = readEmails . toListOf
(entities . filtered isText . transferDecoded' . _Right . charsetText' defaultCharsets . _Right) (entities . transferDecoded' . _Right . charsetText' defaultCharsets . _Right)
where isText = matchContentType "text" Nothing . view contentType -- Windows is broken and reports text/csv as application/vnd.ms-excel...
-- Purebred-email tries to decode non-text entities as utf-8 which should
-- work in this case. It is unlikely that any entity would accidentally
-- contain enough valid addresses on their own lines to fool readEmails.
readEmails :: [T.Text] -> [Email] readEmails :: [T.Text] -> [Email]
readEmails = fromMaybe [] . listToMaybe . reverse . sortBy (comparing length) . readEmails = fromMaybe [] . listToMaybe . reverse . sortBy (comparing length) .