diff --git a/src/Data/Email/Header.hs b/src/Data/Email/Header.hs index 58f6a50..2651757 100644 --- a/src/Data/Email/Header.hs +++ b/src/Data/Email/Header.hs @@ -38,13 +38,13 @@ decode = parseOnly parseHeader bracketEmail :: Parser Text bracketEmail = do _ <- manyTill anyChar (char '<') - T.pack <$> manyTill anyChar (char '>') + email email :: Parser Text email = do _ <- many' space - name <- T.pack <$> many' (notChar '@') + name <- T.pack <$> many' (satisfy (\c -> not (isSpace c) && c /= '@')) _ <- char '@' - rest <- T.pack <$> many' (satisfy (\c -> not (isSpace c) && c /= ',')) + rest <- T.pack <$> many' (satisfy (\c -> not (isSpace c) && c /= ',' && c /= '>')) _ <- many' (notChar ',') pure (name <> "@" <> rest) diff --git a/test/Test/Data/Email.hs b/test/Test/Data/Email.hs index a5edecf..09fa95f 100644 --- a/test/Test/Data/Email.hs +++ b/test/Test/Data/Email.hs @@ -17,9 +17,11 @@ sample :: ByteString sample = "Subject: Hello worldddd\n\ \From: me@example.com\n\ + \Dkim: asd\n\ \To: you \n\ - \ \n\n \ - \foo" + \\n\n\ + \From: foo bar \n\ + \asd\n" parseToList :: ByteString -> IO [Header] parseToList _ = runConduit (CB.sourceLbs sample .| parseEmail .| CL.consume)