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?
cevap
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
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
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
Evet Spam klasörleri kontrol ettim, orada hiçbir şey yoktu. – nschoe