2017-09-01 130 views
2

我一直在閱讀Network.Mail.SMTP的文檔以發送電子郵件。我的問題而來的代碼開始運行,我得到一個消息,說以後無法用Network.Mail.SMTP發送電子郵件

插座11:文件

的Data.ByteString.hGetLine結束當我檢查收件人的電子郵件地址和發送的收件箱文件夾發送電子郵件的文件夾,沒有消息正在發送。我能做些什麼來使這些代碼能夠完成工作。我發佈了代碼並省略了一些敏感部分。

import Network.Mail.Mime 

import Network.Mail.SMTP 

import qualified Data.Text as T 

import qualified Data.ByteString as B 

import qualified Data.ByteString.Lazy as BL 

mFrom = Address (Just $ T.pack "FirstName LastName") (T.pack "Sender's Email") 

mTo = [Address Nothing (T.pack "Recipient Email")] 

mCC = [] 

mBCC = [] 

mHeader = [(B.empty, (T.pack "Test Header"))] 

pType = T.empty 

pEncoding = None 

pFilename = Nothing 

pHeader = [(B.empty, T.pack "Test Part Header")] 

pContent = BL.empty 

pPart = Part pType pEncoding pFilename pHeader pContent 

alternative =[pPart] 

mParts = [alternative] 

mMail = Mail mFrom mTo mCC mBCC mHeader mParts 

a = sendMailWithLogin' "smtp.gmail.com" 465 "Sender Email" "Sender Password" mMail 

main = a 
+0

您是否嘗試過使用空列表,而不是當前定義的'mParts' – epsilonhalbe

+0

剛剛嘗試過,結果沒有改變。 –

+0

你嘗試過使用'simpleMail'嗎? – epsilonhalbe

回答

0

我能重現錯誤,但老實說,我不知道爲什麼會這樣,也許它與加密該怎麼辦,我想谷歌禁止不具有(但是,這只是一個猜測)。

但因爲我想起了已經發送一些電子郵件,在過去的Haskell - 我翻出了一些舊代碼:注意這個使用HaskellNet

{-# LANGUAGE OverloadedStrings #-} 
module Main where 

import Control.Monad (when) 
import Control.Exception (bracket) 
import Network.HaskellNet.SMTP.SSL 

main :: IO() 
main = bracket 
     (connectSMTPSSL "smtp.gmail.com") 
     closeSMTP $ \conn -> 
      do success <- authenticate LOGIN 
             "[email protected]" 
             "password" 
             conn 
       when success 
        $ sendPlainTextMail "to" "from" "Test" "test" conn 

的使用是非常簡單的建立一個連接,驗證了它送你電子郵件,如果你有附件使用sendMimeMailsendMimeMail'或者如果你想使用現有的Mail類型,你已經建立使用sendMimeMail2

如果你還沒有看到bracket這是(相當優雅的)haskell變種try..finally - 它只是確保連接關閉。

+0

所以我複製/粘貼到我的編輯器中,並用它的真實值代替所有東西並運行它。它運行時沒有錯誤,但沒有發送電子郵件。有什麼我可能做錯了嗎? –

+0

你可以改變'if success then..else..'並檢查驗證是否失敗 – epsilonhalbe