I am trying to write a simple script to send a mail via my gmail account. But I am a beginner so it is not that simple. I tryed google but exept for hackage, there is no help or
I don't know exactly what's causing the problem you're having (My SMTP is a little rusty), but I believe part of the problem is that you're connecting on the wrong port. I think these are the correct parameters for using SMTP with Google.
Gmail SMTP server address: smtp.gmail.com
Gmail SMTP user name: Your full Gmail address (e.g. example@gmail.com)
Gmail SMTP password: Your Gmail password
Gmail SMTP port: 465
Gmail SMTP TLS/SSL required: yes
Edit: I did a quick search of Hackage to see if there was an SMTP package that would allow you to login with a username and password, using TLS/SSL, but I didn't see anything. (I could have overlooked something, though!) The closest I found was simplesmtpclient. I don't think it supports SSL, but perhaps you could extend that, or use it as a guide for writing your own.
You could use the connection package which simplify client connection and provide all the necessary bits for this. The following code will works to connect to smtp.gmail.com:
{-# LANGUAGE OverloadedStrings #-}
import qualified Data.ByteString as B
import Data.ByteString.Char8 ()
import Network.Connection
import Data.Default
readHeader con = do
l <- connectionGetLine 1024 con
putStrLn $ show l
if B.isPrefixOf "250 " l
then return ()
else readHeader con
main = do
ctx <- initConnectionContext
con <- connectTo ctx $ ConnectionParams
{ connectionHostname = "smtp.gmail.com"
, connectionPort = 25
, connectionUseSecure = Nothing
, connectionUseSocks = Nothing
}
-- read the server banner
connectionGetLine 1024 con >>= putStrLn . show
-- say ehlo to the smtp server
connectionPut con "EHLO\n"
-- wait for a reply and print
readHeader con
-- Tell the server to start a TLS context.
connectionPut con "STARTTLS\n"
-- wait for a reply and print
connectionGetLine 1024 con >>= putStrLn . show
-- negociate the TLS context
connectionSetSecure ctx con def
------- connection is secure now
-- send credential, passwords, ask question, etc.
-- then quit politely.
connectionPut con "QUIT\n"
connectionClose con