2011-06-15 77 views
5

我一直在努力在Haskell程序中發送電子郵件一段時間,嘗試使用HaskellMime庫或類似的東西,但失敗了。
我最近安裝了HaskellNet並嘗試使用Haskellnet.SMTP模塊。 我試着用'sendMail'命令發送郵件,並得到「用戶錯誤(sendMail錯誤)」。我想這是因爲我使用的SMTP服務器需要認證。
我看了一下'sendMail'源代碼,最後寫了這個簡單的主要代碼:http://hpaste.org/47841
我檢查了每個'sendCommand'命令,並且在AUTH命令後,我從SMTP服務器獲得了「Auth success」從其他命令,如'sendMail'源代碼中的預期。
問題是我的郵箱裏沒有郵件,所以我做錯了什麼?我唯一能想到的就是郵件是在SMTP列表中排隊的地方,我需要刷新SMTP服務器,但這不是'sendMail'代碼的一部分,所以我想知道...... 任何幫助將大大地讚賞,因爲我從來沒有想過這會很難發送電子郵件:/
PS我在手機上使用完全相同的設置來發送帶有此SMTP服務器的電子郵件,相同的「smtp.sfr.fr」,相同的ID(整個地址),相同的密碼;它的工作原理:我可以通過手機發送郵件。
在此先感謝您的幫助。我需要刷新SMTP服務器嗎?如果是的話,該怎麼做?

+0

您檢查您的垃圾郵件文件夾? – hammar 2011-06-15 22:04:26

+0

是的,我檢查了我的垃圾郵件文件夾,裏面沒有東西。 – nschoe 2011-06-18 10:44:05

回答

2

儘管我不能評論你對HaskellNet的使用,但我使用SMTPClient取得了巨大的成功,你可以從cabal install SMTPClient中從hackage中獲得。

我已經包括了包裝的給你使用的庫是什麼樣的感覺例如:

import Network.SMTP.ClientSession 
import Network.SMTP.Client 
import Network.Socket 
import System.Time 
import System.IO 
import Data.Bits 
import Data.IORef 

myDomain = "example.com" 
smtpHost = "hubert.blacksapphire.com" -- <-- Your SMTP server here 

-- This will send the author an email. I don't mind! 
main = do 
    now <- getClockTime 
    nowCT <- toCalendarTime now 
    let message = Message [ 
       From [NameAddr (Just "Mr. Nobody") "[email protected]"], 
       To [NameAddr (Just "Stephen Blackheath") "[email protected]"], 
       Subject "I'm using SMTPClient!", 
       Date nowCT 
      ] 
      ("Dear Sir,\n"++ 
      "It has come to my attention that this is an email.\n"++ 
      "Yours sincerely,\n"++ 
      "Mr. Nobody\n") 
    addrs <- getAddrInfo Nothing (Just smtpHost) Nothing 
    let SockAddrInet _ hostAddr = addrAddress (addrs !! 0) 
     sockAddr = SockAddrInet (fromIntegral 25) hostAddr 
    putStrLn $ "connecting to "++show sockAddr 
    sentRef <- newIORef [] 
    sendSMTP' (hPutStrLn stderr) (Just sentRef) myDomain 
     sockAddr [message] 
    statuses <- readIORef sentRef 
    -- If no exception was caught, statuses is guaranteed to be 
    -- the same length as the list of input messages, therefore head won't fail here. 
    case head statuses of 
     Nothing  -> putStrLn "Message successfully sent" 
     Just status -> putStrLn $ "Message send failed with status "++show status 
+0

嗯,謝謝你的回答,即使是在這裏的代碼,我也不是在問這麼多,但是謝謝你!我會研究你的代碼,但這是我到目前爲止所做的(並且它正在工作):我使用telnet連接到我想要使用的SMTP服務器。然後我發佈了發送電子郵件所需的命令,我遇到了錯誤,我糾正了它們。一旦我把它們全部改正了,我只是使用'sendCommand'來發送確切的命令,相同的順序,相同的參數,它只是工作。以下是代碼的一部分:http://hpaste.org/47929。當然這裏很簡單:我不檢查錯誤,但只是一個開始^^ – nschoe 2011-06-18 10:48:38

相關問題