HaskellNet 0.4.5 → 0.5
raw patch · 5 files changed
+44/−6 lines, 5 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
- Network.HaskellNet.Auth: instance Eq AuthType
- Network.HaskellNet.Auth: instance Show AuthType
- Network.HaskellNet.BSStream: bsClose :: BSStream -> IO ()
- Network.HaskellNet.BSStream: bsFlush :: BSStream -> IO ()
- Network.HaskellNet.BSStream: bsGet :: BSStream -> Int -> IO ByteString
- Network.HaskellNet.BSStream: bsGetLine :: BSStream -> IO ByteString
- Network.HaskellNet.BSStream: bsIsOpen :: BSStream -> IO Bool
- Network.HaskellNet.BSStream: bsPut :: BSStream -> ByteString -> IO ()
- Network.HaskellNet.IMAP: instance Show SearchQuery
- Network.HaskellNet.IMAP.Types: _exists :: MailboxInfo -> Integer
- Network.HaskellNet.IMAP.Types: _flags :: MailboxInfo -> [Flag]
- Network.HaskellNet.IMAP.Types: _isFlagWritable :: MailboxInfo -> Bool
- Network.HaskellNet.IMAP.Types: _isWritable :: MailboxInfo -> Bool
- Network.HaskellNet.IMAP.Types: _mailbox :: MailboxInfo -> MailboxName
- Network.HaskellNet.IMAP.Types: _permanentFlags :: MailboxInfo -> [Flag]
- Network.HaskellNet.IMAP.Types: _recent :: MailboxInfo -> Integer
- Network.HaskellNet.IMAP.Types: _uidNext :: MailboxInfo -> UID
- Network.HaskellNet.IMAP.Types: _uidValidity :: MailboxInfo -> UID
- Network.HaskellNet.IMAP.Types: advChar :: RespDerivs -> Result RespDerivs Char
- Network.HaskellNet.IMAP.Types: advPos :: RespDerivs -> Pos
- Network.HaskellNet.IMAP.Types: advTag :: RespDerivs -> Result RespDerivs String
- Network.HaskellNet.IMAP.Types: dvFlags :: RespDerivs -> Result RespDerivs [Flag]
- Network.HaskellNet.IMAP.Types: exists :: MboxUpdate -> Maybe Integer
- Network.HaskellNet.IMAP.Types: instance Derivs RespDerivs
- Network.HaskellNet.IMAP.Types: instance Eq Attribute
- Network.HaskellNet.IMAP.Types: instance Eq Flag
- Network.HaskellNet.IMAP.Types: instance Eq MailboxInfo
- Network.HaskellNet.IMAP.Types: instance Eq MailboxStatus
- Network.HaskellNet.IMAP.Types: instance Eq MboxUpdate
- Network.HaskellNet.IMAP.Types: instance Eq ServerResponse
- Network.HaskellNet.IMAP.Types: instance Eq StatusCode
- Network.HaskellNet.IMAP.Types: instance Read MailboxStatus
- Network.HaskellNet.IMAP.Types: instance Show Attribute
- Network.HaskellNet.IMAP.Types: instance Show Flag
- Network.HaskellNet.IMAP.Types: instance Show MailboxInfo
- Network.HaskellNet.IMAP.Types: instance Show MailboxStatus
- Network.HaskellNet.IMAP.Types: instance Show MboxUpdate
- Network.HaskellNet.IMAP.Types: instance Show ServerResponse
- Network.HaskellNet.IMAP.Types: instance Show StatusCode
- Network.HaskellNet.IMAP.Types: recent :: MboxUpdate -> Maybe Integer
- Network.HaskellNet.POP3.Types: instance Eq Response
- Network.HaskellNet.POP3.Types: instance Show Response
- Network.HaskellNet.SMTP: instance Eq Command
- Network.HaskellNet.SMTP: instance Eq Response
- Network.HaskellNet.SMTP: instance Show Command
- Network.HaskellNet.SMTP: instance Show Response
+ Network.HaskellNet.Auth: instance GHC.Classes.Eq Network.HaskellNet.Auth.AuthType
+ Network.HaskellNet.Auth: instance GHC.Show.Show Network.HaskellNet.Auth.AuthType
+ Network.HaskellNet.BSStream: [bsClose] :: BSStream -> IO ()
+ Network.HaskellNet.BSStream: [bsFlush] :: BSStream -> IO ()
+ Network.HaskellNet.BSStream: [bsGetLine] :: BSStream -> IO ByteString
+ Network.HaskellNet.BSStream: [bsGet] :: BSStream -> Int -> IO ByteString
+ Network.HaskellNet.BSStream: [bsIsOpen] :: BSStream -> IO Bool
+ Network.HaskellNet.BSStream: [bsPut] :: BSStream -> ByteString -> IO ()
+ Network.HaskellNet.BSStream: [bsWaitForInput] :: BSStream -> Int -> IO Bool
+ Network.HaskellNet.IMAP: idle :: IMAPConnection -> Int -> IO ()
+ Network.HaskellNet.IMAP: instance GHC.Show.Show Network.HaskellNet.IMAP.SearchQuery
+ Network.HaskellNet.IMAP.Types: [_exists] :: MailboxInfo -> Integer
+ Network.HaskellNet.IMAP.Types: [_flags] :: MailboxInfo -> [Flag]
+ Network.HaskellNet.IMAP.Types: [_isFlagWritable] :: MailboxInfo -> Bool
+ Network.HaskellNet.IMAP.Types: [_isWritable] :: MailboxInfo -> Bool
+ Network.HaskellNet.IMAP.Types: [_mailbox] :: MailboxInfo -> MailboxName
+ Network.HaskellNet.IMAP.Types: [_permanentFlags] :: MailboxInfo -> [Flag]
+ Network.HaskellNet.IMAP.Types: [_recent] :: MailboxInfo -> Integer
+ Network.HaskellNet.IMAP.Types: [_uidNext] :: MailboxInfo -> UID
+ Network.HaskellNet.IMAP.Types: [_uidValidity] :: MailboxInfo -> UID
+ Network.HaskellNet.IMAP.Types: [advChar] :: RespDerivs -> Result RespDerivs Char
+ Network.HaskellNet.IMAP.Types: [advPos] :: RespDerivs -> Pos
+ Network.HaskellNet.IMAP.Types: [advTag] :: RespDerivs -> Result RespDerivs String
+ Network.HaskellNet.IMAP.Types: [dvFlags] :: RespDerivs -> Result RespDerivs [Flag]
+ Network.HaskellNet.IMAP.Types: [exists] :: MboxUpdate -> Maybe Integer
+ Network.HaskellNet.IMAP.Types: [recent] :: MboxUpdate -> Maybe Integer
+ Network.HaskellNet.IMAP.Types: instance GHC.Classes.Eq Network.HaskellNet.IMAP.Types.Attribute
+ Network.HaskellNet.IMAP.Types: instance GHC.Classes.Eq Network.HaskellNet.IMAP.Types.Flag
+ Network.HaskellNet.IMAP.Types: instance GHC.Classes.Eq Network.HaskellNet.IMAP.Types.MailboxInfo
+ Network.HaskellNet.IMAP.Types: instance GHC.Classes.Eq Network.HaskellNet.IMAP.Types.MailboxStatus
+ Network.HaskellNet.IMAP.Types: instance GHC.Classes.Eq Network.HaskellNet.IMAP.Types.MboxUpdate
+ Network.HaskellNet.IMAP.Types: instance GHC.Classes.Eq Network.HaskellNet.IMAP.Types.ServerResponse
+ Network.HaskellNet.IMAP.Types: instance GHC.Classes.Eq Network.HaskellNet.IMAP.Types.StatusCode
+ Network.HaskellNet.IMAP.Types: instance GHC.Read.Read Network.HaskellNet.IMAP.Types.MailboxStatus
+ Network.HaskellNet.IMAP.Types: instance GHC.Show.Show Network.HaskellNet.IMAP.Types.Attribute
+ Network.HaskellNet.IMAP.Types: instance GHC.Show.Show Network.HaskellNet.IMAP.Types.Flag
+ Network.HaskellNet.IMAP.Types: instance GHC.Show.Show Network.HaskellNet.IMAP.Types.MailboxInfo
+ Network.HaskellNet.IMAP.Types: instance GHC.Show.Show Network.HaskellNet.IMAP.Types.MailboxStatus
+ Network.HaskellNet.IMAP.Types: instance GHC.Show.Show Network.HaskellNet.IMAP.Types.MboxUpdate
+ Network.HaskellNet.IMAP.Types: instance GHC.Show.Show Network.HaskellNet.IMAP.Types.ServerResponse
+ Network.HaskellNet.IMAP.Types: instance GHC.Show.Show Network.HaskellNet.IMAP.Types.StatusCode
+ Network.HaskellNet.IMAP.Types: instance Text.Packrat.Parse.Derivs Network.HaskellNet.IMAP.Types.RespDerivs
+ Network.HaskellNet.POP3.Types: instance GHC.Classes.Eq Network.HaskellNet.POP3.Types.Response
+ Network.HaskellNet.POP3.Types: instance GHC.Show.Show Network.HaskellNet.POP3.Types.Response
+ Network.HaskellNet.SMTP: instance GHC.Classes.Eq Network.HaskellNet.SMTP.Command
+ Network.HaskellNet.SMTP: instance GHC.Classes.Eq Network.HaskellNet.SMTP.Response
+ Network.HaskellNet.SMTP: instance GHC.Show.Show Network.HaskellNet.SMTP.Command
+ Network.HaskellNet.SMTP: instance GHC.Show.Show Network.HaskellNet.SMTP.Response
- Network.HaskellNet.BSStream: BSStream :: IO ByteString -> (Int -> IO ByteString) -> (ByteString -> IO ()) -> IO () -> IO () -> IO Bool -> BSStream
+ Network.HaskellNet.BSStream: BSStream :: IO ByteString -> (Int -> IO ByteString) -> (ByteString -> IO ()) -> IO () -> IO () -> IO Bool -> (Int -> IO Bool) -> BSStream
Files
- CHANGELOG +14/−1
- HaskellNet.cabal +1/−1
- src/Network/HaskellNet/BSStream.hs +3/−0
- src/Network/HaskellNet/IMAP.hs +21/−0
- src/Network/HaskellNet/SMTP.hs +5/−4
CHANGELOG view
@@ -1,10 +1,23 @@+0.5 (2015-11-5)+---------------++ - No longer render Bcc field when rendering messages (thanks Dan Aloni+ <alonid@gmail.com>)+ - Implemented IDLE command (thanks Alexander Inyukhin+ <shurick@sectorb.msk.ru>)+ - Added stream wait function (bsWaitForInput field of type BSStream)+ (thanks Alexander Inyukhin <shurick@sectorb.msk.ru>)+ - SMTP: RCPT also includes Cc and Bcc lists rather than just To list+ (thanks Author: Dan Aloni <alonid@gmail.com>)+ 0.4.4 -> 0.4.5 (2015-06-18)+--------------------------- - IMAP: select command must quote the mailbox name (see https://github.com/jtdaugherty/HaskellNet/issues/35) 0.4.3 -> 0.4.4 (2015-04-11)---------------+--------------------------- - Fix a bug in IMAP Parser for listing Mboxes (see https://github.com/jtdaugherty/HaskellNet/issues/34)
HaskellNet.cabal view
@@ -4,7 +4,7 @@ SMTP, and IMAP protocols. NOTE: this package will be split into smaller, protocol-specific packages in the future.-Version: 0.4.5+Version: 0.5 Copyright: (c) 2006 Jun Mukai Author: Jun Mukai Maintainer: Jonathan Daugherty <cygnus@foobox.com>,
src/Network/HaskellNet/BSStream.hs view
@@ -28,6 +28,8 @@ -- ^Close the stream. , bsIsOpen :: IO Bool -- ^Is the stream open?+ , bsWaitForInput :: Int -> IO Bool+ -- ^Is data available? } -- |Build a byte string stream which operates on a 'Handle'.@@ -41,4 +43,5 @@ op <- hIsOpen h if op then (hClose h) else return () , bsIsOpen = hIsOpen h+ , bsWaitForInput = hWaitForInput h }
src/Network/HaskellNet/IMAP.hs view
@@ -12,6 +12,7 @@ -- ** selected state commands , check, close, expunge , search, store, copy+ , idle -- * fetch commands , fetch, fetchHeader, fetchSize, fetchHeaderFields, fetchHeaderFieldsNot , fetchFlags, fetchR, fetchByString, fetchByStringR@@ -193,6 +194,26 @@ ---------------------------------------------------------------------- -- IMAP commands --++idle :: IMAPConnection -> Int -> IO ()+idle conn timeout =+ do+ (buf',num) <- sendCommand' conn "IDLE"+ buf <-+ if BS.take 2 buf' == BS.pack "+ "+ then do+ _ <- bsWaitForInput (stream conn) timeout+ bsPutCrLf (stream conn) $ BS.pack "DONE"+ getResponse $ stream conn+ else+ return buf'+ let (resp, mboxUp, value) = eval pNone (show6 num) buf+ case resp of+ OK _ _ -> do mboxUpdate conn mboxUp+ return value+ NO _ msg -> fail ("NO: " ++ msg)+ BAD _ msg -> fail ("BAD: " ++ msg)+ PREAUTH _ msg -> fail ("preauth: " ++ msg) noop :: IMAPConnection -> IO () noop conn = sendCommand conn "NOOP" pNone
src/Network/HaskellNet/SMTP.hs view
@@ -347,10 +347,11 @@ sendMimeMail2 :: Mail -> SMTPConnection -> IO () sendMimeMail2 mail con = do let (Address _ from) = mailFrom mail- tos = map (T.unpack . addressEmail) $ mailTo mail- when (null tos) $ fail "no receiver specified."- renderedMail <- renderMail' mail- sendMail (T.unpack from) tos (lazyToStrict renderedMail) con+ recps = map (T.unpack . addressEmail)+ $ (mailTo mail ++ mailCc mail ++ mailBcc mail)+ when (null recps) $ fail "no receiver specified."+ renderedMail <- renderMail' $ mail { mailBcc = [] }+ sendMail (T.unpack from) recps (lazyToStrict renderedMail) con -- haskellNet uses strict bytestrings -- TODO: look at making haskellnet lazy