2014-10-03 52 views
3

我試着下載一些電子郵件的主題取出由電子郵件主題的時候,但我得到了以下錯誤消息:錯誤使用HaskellNet的IMAP

000004:2:1: expecting either "* " or "000004" 

下面的代碼應該重現該問題(當用戶名和密碼正確更換):

main = do 
     conn <- connectIMAPSSL "imap.gmail.com" 
     login conn "username" "password" 
     boxes <- list conn 
     let box = "INBOX" 
     select conn box 
     uids <- search conn [UNFLAG Seen] 
     forM uids $ \uid -> do 
      putStrLn "Fetching" 
      fetchByString conn uid "BODY[HEADER.FIELDS (SUBJECT)]" 
      putStrLn "Fetched" 

的主要問題是,我不能確定它是否是我的代碼,HaskellNet或Gmail的問題。

+1

請向我們顯示IMAP連接的日誌。 – 2014-10-03 18:33:19

+0

我不完全確定如何獲取IMAP連接的日誌。 – tailcalled 2014-10-03 18:35:30

+0

將密碼更改爲「猜測」(九個字母,不含引號),然後重試。 – arnt 2014-10-04 08:38:17

回答

3

這確實是HaskellNet內部的解析器錯誤。我已經提交了一個請求,你可以看到here,根據我的經驗,jtdaugherty對這些事情做出了很快的迴應,所以希望它很快能夠進入主線HaskellNet。

正如JanKundrát所建議的,IMAP連接的日誌在確定問題時非常有用。就原始的HaskellNet而言,答案是「你如何獲得日誌?」是「定義你自己的BSStream」,但是因爲你使用HaskellNet-SSL來訪問Gmail,所以BSStream已經爲你定義了。

我已經爲HaskellNet-SSL添加了一個名爲「sslLogToConsole」的參數,它將IMAP會話日誌內聯吐出到STDOUT,前綴爲「HaskellNet-SSL」標記以幫助您將它們分開。該功能在0.2.5版本中提供,因此如果您還有其他問題,希望這有助於調試它們!

編輯:jtdaugherty事實上是如此之快,以至於在我設法輸入這個響應之前,他已經合併了更改!

0

一些線索......我可以重現錯誤。

在下面的行中用UID替換SUBJECT不會產生錯誤。

fetchByString conn uid "BODY[HEADER.FIELDS (SUBJECT)]" 

該工程..

fetch conn uid 

看着它看起來像它應該是指與此相同的源...

fetchByString conn uid "BODY[] " 

,但它產生同樣的錯誤如上。我懷疑這個問題不是Gmail。