smtp-mail-ng: An SMTP client EDSL

This is a package candidate release! Here you can preview how this package release will appear once published to the main package index (which can be accomplished via the 'maintain' link below). Please note that once a package has been published to the main package index it cannot be undone! Please consult the package uploading documentation for more information.

[maintain] [Publish]

An SMTP client EDSL


[Skip to Readme]

Properties

Versions 0.1.0.0, 0.1.0.0, 0.1.0.1, 0.1.0.2
Change log None available
Dependencies attoparsec (>=0.12 && <0.13), base (>=4.7 && <4.8), base16-bytestring (>=0.1 && <0.2), base64-bytestring (>=1.0 && <1.1), bytestring (>=0.10 && <0.11), crypto-random (>=0.0 && <0.1), cryptohash (>=0.11 && <0.12), filepath (>=1.3 && <1.4), haskeline (>=0.7 && <0.8), mime-mail (>=0.4 && <0.5), mtl (>=2.2 && <2.3), network (>=2.6 && <2.7), stringsearch (>=0.3.6.5), text (>=1.2 && <1.3), tls (>=1.2 && <1.3), transformers (>=0.4 && <0.5), x509-store (>=1.5 && <1.6), x509-system (>=1.5 && <1.6) [details]
License BSD-3-Clause
Author Alexander Vieth
Maintainer aovieth@gmail.com
Category Network
Home page https://github.com/avieth/smtp-mail-ng
Source repo head: git clone git@github.com:avieth/smtp-mail-ng.git
Uploaded by alexvieth at 2015-01-28T01:18:35Z

Modules

[Index]

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees


Readme for smtp-mail-ng-0.1.0.0

[back to package description]

SMTP-MAIL-NG

An SMTP client EDSL. If you want to interact with an SMTP server, this library may be able to help you. It even supports STARTTLS!

The star is the SMTP monad, terms of which (thanks to do notation) often resemble an SMTP session.

Sending with an SMTP server

{-# LANGUAGE OverloadedStrings #-}

import Network.BSD (getHostName)
import Network.Mail.SMTP.SMTP
import Network.Mail.SMTP.SMTPParameters
import Network.Mail.SMTP.Types
import Network.Mail.SMTP.Auth
import Network.Mail.SMTP.Send
import Network.Mail.Mime
import Control.Monad.IO.Class (liftIO)
import Data.ByteString.Char8 (pack)

main = smtp smtpParameters $ do
  hostname <- liftIO getHostName
  -- Send EHLO and expect a 250
  command $ EHLO (pack hostname)
  expectCode 250
  -- Upgrade the connection to TLS
  -- This is a kind of utility term that takes care of sending STARTTLS,
  -- expecting a 220, and then upgrading the underlying connection to TLS.
  startTLS
  -- Authenticate with LOGIN scheme
  authLogin "jarndyce@gmail.com" "mySuperSecretPassword"
  -- Send the message
  send message
  -- End the session.
  -- Closing the connection is handled automatically by the function smtp
  command QUIT

-- We use datatypes from the mime-mail package to describe Mail.
message :: Mail
message = simpleMail' to from subject body
  where
    from = Address (Just "John Jarndyce") "jarndyce@gmail.com"
    to = Address (Just "Harold Skimpole") "harold@skimpole.com"
    subject = "Hey!"
    body = "It works!"

smtpParameters :: SMTPParameters
smtpParameters = (defaultSMTPParameters "smtp.googlemail.com") {
    smtpVerbose = True
  }

Moving forward

We must implement support for more AUTH schemes. Right now all that we facilitate is LOGIN, although other methods are possible via the bytes term.

There is an orphan datatype, Response, from before the fork. It may be good to use this instead of bare Ints.

It would be nice to give a convenient interface for simply sending some messages, in which the user must supply only a list of Mail values, an SMTPParameters, and a description of the authentication and encryption parameters of the mail server.

Thanks

This library is forked from Jason Hickner's smtp-mail, but it has diverged significantly and bears little resemblance.