Safe Haskell | None |
---|---|
Language | Haskell2010 |
Network.HaskellNet.SMTP
Description
This module provides functions for working with the SMTP protocol in the client side, including opening and closing connections, sending commands to the server, authenticate and sending mails.
Here's a basic usage example:
import Network.HaskellNet.SMTP import Network.HaskellNet.Auth import qualified Data.Text.Lazy as T main = doSMTP "your.smtp.server.com" $ \conn -> authSucceed <- authenticate PLAIN "username" "password" conn if authSucceed then sendPlainTextMail "receiver@server.com" "sender@server.com" "subject" (T.pack "Hello! This is the mail body!") conn else print "Authentication failed."
Notes for the above example:
- First the
SMTPConnection
is opened with thedoSMTP
function. The connection should also be established with functions such asconnectSMTP
,connectSMTPPort
anddoSMTPPort
. With thedoSMTP*
functions the connection is opened, then executed an action with it and then closed automatically. If the connection is opened with theconnectSMTP*
functions you may want to close it with thecloseSMTP
function after using it. It is also possible to create aSMTPConnection
from an already opened connection stream (BSStream
) using theconnectStream
ordoSMTPStream
functions.
NOTE: For SSL/TLS support you may establish the connection using
the functions (such as connectSMTPSSL
) provided in the
Network.HaskellNet.SMTP.SSL
module of the
HaskellNet-SSL
package.
- The
authenticate
function authenticates to the server with the specifiedAuthType
.PLAIN
,LOGIN
andCRAM_MD5
AuthType
s are available. It returns aBool
indicating either the authentication succeed or not. - To send a mail you can use
sendPlainTextMail
for plain text mail, orsendMimeMail
for mime mail.
Synopsis
- data Command
- data Response
- = Ok
- | SystemStatus
- | HelpMessage
- | ServiceReady
- | ServiceClosing
- | UserNotLocal
- | CannotVerify
- | StartMailInput
- | ServiceNotAvailable
- | MailboxUnavailable
- | ErrorInProcessing
- | InsufficientSystemStorage
- | SyntaxError
- | ParameterError
- | CommandNotImplemented
- | BadSequence
- | ParameterNotImplemented
- | MailboxUnavailableError
- | UserNotLocalError
- | ExceededStorage
- | MailboxNotAllowed
- | TransactionFailed
- data AuthType
- data SMTPConnection
- connectSMTPPort :: String -> PortNumber -> IO SMTPConnection
- connectSMTP :: String -> IO SMTPConnection
- connectStream :: BSStream -> IO SMTPConnection
- sendCommand :: SMTPConnection -> Command -> IO (ReplyCode, ByteString)
- closeSMTP :: SMTPConnection -> IO ()
- authenticate :: AuthType -> UserName -> Password -> SMTPConnection -> IO Bool
- sendMail :: String -> [String] -> ByteString -> SMTPConnection -> IO ()
- doSMTPPort :: String -> PortNumber -> (SMTPConnection -> IO a) -> IO a
- doSMTP :: String -> (SMTPConnection -> IO a) -> IO a
- doSMTPStream :: BSStream -> (SMTPConnection -> IO a) -> IO a
- sendPlainTextMail :: String -> String -> String -> Text -> SMTPConnection -> IO ()
- sendMimeMail :: String -> String -> String -> Text -> Text -> [(Text, FilePath)] -> SMTPConnection -> IO ()
- sendMimeMail' :: String -> String -> String -> Text -> Text -> [(Text, Text, ByteString)] -> SMTPConnection -> IO ()
- sendMimeMail2 :: Mail -> SMTPConnection -> IO ()
Types
Constructors
HELO String | |
EHLO String | |
MAIL String | |
RCPT String | |
DATA ByteString | |
EXPN String | |
VRFY String | |
HELP String | |
AUTH AuthType UserName Password | |
NOOP | |
RSET | |
QUIT |
Instances
Constructors
data SMTPConnection Source #
Establishing Connection
Arguments
:: String | name of the server |
-> PortNumber | port number |
-> IO SMTPConnection |
connecting SMTP server with the specified name and port number.
Arguments
:: String | name of the server |
-> IO SMTPConnection |
connecting SMTP server with the specified name and port 25.
connectStream :: BSStream -> IO SMTPConnection Source #
create SMTPConnection from already connected Stream
Operation to a Connection
sendCommand :: SMTPConnection -> Command -> IO (ReplyCode, ByteString) Source #
send a method to a server
closeSMTP :: SMTPConnection -> IO () Source #
close the connection. This function send the QUIT method, so you do not have to QUIT method explicitly.
Other Useful Operations
authenticate :: AuthType -> UserName -> Password -> SMTPConnection -> IO Bool Source #
This function will return True
if the authentication succeeds.
Here's an example of sending a mail with a server that requires
authentication:
authSucceed <- authenticate PLAIN "username" "password" conn if authSucceed then sendPlainTextMail "receiver@server.com" "sender@server.com" "subject" (T.pack "Hello!") conn else print "Authentication failed."
Arguments
:: String | sender mail |
-> [String] | receivers |
-> ByteString | data |
-> SMTPConnection | |
-> IO () |
sending a mail to a server. This is achieved by sendMessage. If something is wrong, it raises an IOexception.
doSMTPPort :: String -> PortNumber -> (SMTPConnection -> IO a) -> IO a Source #
doSMTPPort open a connection, and do an IO action with the connection, and then close it.
doSMTP :: String -> (SMTPConnection -> IO a) -> IO a Source #
doSMTP is similar to doSMTPPort, except that it does not require port number but connects to the server with port 25.
doSMTPStream :: BSStream -> (SMTPConnection -> IO a) -> IO a Source #
doSMTPStream is similar to doSMTPPort, except that its argument is a Stream data instead of hostname and port number.
Arguments
:: String | receiver |
-> String | sender |
-> String | subject |
-> Text | body |
-> SMTPConnection | the connection |
-> IO () |
Send a plain text mail.
Arguments
:: String | receiver |
-> String | sender |
-> String | subject |
-> Text | plain text body |
-> Text | html body |
-> [(Text, FilePath)] | attachments: [(content_type, path)] |
-> SMTPConnection | |
-> IO () |
Send a mime mail. The attachments are included with the file path.
Arguments
:: String | receiver |
-> String | sender |
-> String | subject |
-> Text | plain text body |
-> Text | html body |
-> [(Text, Text, ByteString)] | attachments: [(content_type, file_name, content)] |
-> SMTPConnection | |
-> IO () |
Send a mime mail. The attachments are included with in-memory ByteString
.
sendMimeMail2 :: Mail -> SMTPConnection -> IO () Source #