diff options
author | tv <tv@krebsco.de> | 2017-04-30 15:26:42 +0200 |
---|---|---|
committer | tv <tv@krebsco.de> | 2017-04-30 15:46:32 +0200 |
commit | b926f842b25e6f85fb4e21c25f8cfe317e7d0274 (patch) | |
tree | 669d19c05d51ba2acbc0b0f74c50fdf6d86d9f6c | |
parent | f5eb629cc93920cec9b48d13c5600cf64c8e5b85 (diff) |
ParseMail.parseAddress: return Maybe Address
-rw-r--r-- | ParseMail.hs | 19 |
1 files changed, 8 insertions, 11 deletions
diff --git a/ParseMail.hs b/ParseMail.hs index 4a6c218..497af0f 100644 --- a/ParseMail.hs +++ b/ParseMail.hs @@ -61,15 +61,12 @@ fromMIMEValue val0 = --f :: H.Header -> M.Mail -> M.Mail f (k, v) m = case k of "from" -> - m { M.mailFrom = - (\case - Mailbox a -> a - Group _ _ -> - error "cannot use group in from header" - ) $ - either error id $ - parseAddress $ - LBS.toStrict v + m { M.mailFrom = case parseAddress (LBS.toStrict v) of + Left msg -> error msg + Right Nothing -> M.mailFrom m + Right (Just (Mailbox a)) -> a + Right (Just (Group _ _)) -> + error "cannot use group in from header" } "to" -> m { M.mailTo = @@ -116,9 +113,9 @@ fromMIMEValue val0 = } -parseAddress :: BS.ByteString -> Either String Address +parseAddress :: BS.ByteString -> Either String (Maybe Address) parseAddress = - A8.parseOnly (P.cfws *> address <* A8.endOfInput) + A8.parseOnly (P.cfws *> (Just <$> address <|> return Nothing) <* A8.endOfInput) parseAddresses :: BS.ByteString -> Either String [Address] |