2011-06-15 7 views
5

Bir süre için Haskell programında e-posta formu göndermek için uğraşıyorum, HaskellMime kütüphanesini veya bunun gibi bir şeyi kullanmayı denedim ama başarısız oldu.
HaskellNet'i yakın zamanda kurdum ve Haskellnet.SMTP modülünü kullanmayı deneyin. 'SendMail' komutuyla bir e-posta göndermeyi denedim ve "kullanıcı hatası (sendMail hatası)" mesajını aldım. Sanırım, kullandığım SMTP sunucusunun kimlik doğrulaması gerekiyordu.
'SendMail' kaynak koduna bir göz attım ve bu basit ana yazmayı bitirdim: http://hpaste.org/47841
Her 'sendCommand' komutunu kontrol ettim ve AUTH komutundan sonra SMTP sunucusundan bir "Auth success" aldım ve 250 code 'sendMail' kaynak kodunda beklendiği gibi diğer komutlardan.
Sorun şu ki posta kutumda hiç posta yok, ne yapıyorum yanlış yapıyorum? Düşünebildiğim tek şey, postanın SMTP giden listesinde sıraya alınmış olması ve SMTP sunucusunu temizlemem gerekiyor, fakat bu 'sendMail' kodunun bir parçası değil, bu yüzden merak ediyorum ... Herhangi bir yardım büyük takdir olurdu, çünkü bir e-posta göndermek için çok zor olacağını hiç düşünmemiştim:/
PS Ben aynı SMTP sunucusu, aynı "smtp.sfr.fr", aynı ID (tüm adres), aynı şifre ile e-posta göndermek için telefonumda aynı ayarları kullanın; ve çalışıyor: Telefonumdan posta gönderebilirim.
Yardım için şimdiden teşekkür ederiz.SMTP sunucusunu yıkamalı mıyım? Evet ise nasıl yapılır?

+0

Eğer spam klasörüne kontrol ettiniz:

Sana kütüphane kullanmak gibidir hakkında bir fikir vermek için paketin örneğini de bulabilirsiniz? – hammar

+0

Evet Spam klasörleri kontrol ettim, orada hiçbir şey yoktu. – nschoe

cevap

2

HaskellNet kullanımınızı yorumlayamamam da, cabal install SMTPClient numaralı telefondan hackage üzerinden yakalayabileceğiniz SMTPClient numaralı telefonu kullanarak büyük başarılar elde ettik.

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

Evet, cevabınız için teşekkürler, burada bir kod bile, çok fazla şey istemiyordum, ama teşekkürler! Kodunuza bakacağım, ama şu ana kadar yaptığım iş (ve çalışıyor): Kullanmak istediğim SMTP sunucusuna bağlanmak için telnet kullanmıştım. Sonra bir e-posta göndermek için gereken komutları verdim, hatalara girdim, onları düzelttim. Onları doğru bir kez yaptım, sadece komutları, aynı düzeni, aynı argümanları göndermek için sendCommand'ları kullandım ve işe yaradı. İşte kodun bir kısmı: http://hpaste.org/47929. Tabii ki burada çok minimalisitc: Hataları kontrol etmiyorum, ama sadece bir başlangıç ​​^^ – nschoe