-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Compose MIME email messages.
--   
--   Hackage documentation generation is not reliable. For up to date
--   documentation, please see:
--   <a>http://www.stackage.org/package/mime-mail</a>.
@package mime-mail
@version 0.4.9

module Network.Mail.Mime

-- | MIME boundary between parts of a message.
newtype Boundary
Boundary :: Text -> Boundary
unBoundary :: Boundary -> Text

-- | An entire mail message.
data Mail
Mail :: Address -> [Address] -> [Address] -> [Address] -> Headers -> [Alternatives] -> Mail
mailFrom :: Mail -> Address
mailTo :: Mail -> [Address]
mailCc :: Mail -> [Address]
mailBcc :: Mail -> [Address]

-- | Other headers, excluding from, to, cc and bcc.
mailHeaders :: Mail -> Headers

-- | A list of different sets of alternatives. As a concrete example:
--   
--   <pre>
--   mailParts = [ [textVersion, htmlVersion], [attachment1], [attachment1]]
--   </pre>
--   
--   Make sure when specifying alternatives to place the most preferred
--   version last.
mailParts :: Mail -> [Alternatives]

-- | A mail message with the provided <tt>from</tt> address and no other
--   fields filled in.
emptyMail :: Address -> Mail
data Address
Address :: Maybe Text -> Text -> Address
addressName :: Address -> Maybe Text
addressEmail :: Address -> Text

-- | Multiple alternative representations of the same data. For example,
--   you could provide a plain-text and HTML version of a message.
type Alternatives = [Part]

-- | A single part of a multipart message.
data Part
Part :: Text -> Encoding -> Maybe Text -> Headers -> ByteString -> Part

-- | content type
partType :: Part -> Text
partEncoding :: Part -> Encoding

-- | The filename for this part, if it is to be sent with an attachemnt
--   disposition.
partFilename :: Part -> Maybe Text
partHeaders :: Part -> Headers
partContent :: Part -> ByteString

-- | How to encode a single part. You should use <a>Base64</a> for binary
--   data.
data Encoding
None :: Encoding
Base64 :: Encoding
QuotedPrintableText :: Encoding
QuotedPrintableBinary :: Encoding
type Headers = [(ByteString, Text)]

-- | Render a <a>Mail</a> with a given <a>RandomGen</a> for producing
--   boundaries.
renderMail :: RandomGen g => g -> Mail -> (ByteString, g)

-- | Like <a>renderMail</a>, but generates a random boundary.
renderMail' :: Mail -> IO ByteString

-- | Send a fully-formed email message via the default sendmail executable
--   with default options.
sendmail :: ByteString -> IO ()

-- | Send a fully-formed email message via the specified sendmail
--   executable with specified options.
sendmailCustom :: FilePath -> [String] -> ByteString -> IO ()

-- | Like <a>sendmailCustom</a>, but also returns sendmail's output to
--   stderr and stdout as strict ByteStrings.
--   
--   Since 0.4.9
sendmailCustomCaptureOutput :: FilePath -> [String] -> ByteString -> IO (ByteString, ByteString)

-- | Render an email message and send via the default sendmail executable
--   with default options.
renderSendMail :: Mail -> IO ()

-- | Render an email message and send via the specified sendmail executable
--   with specified options.
renderSendMailCustom :: FilePath -> [String] -> Mail -> IO ()

-- | A simple interface for generating an email with HTML and plain-text
--   alternatives and some file attachments.
--   
--   Note that we use lazy IO for reading in the attachment contents.
simpleMail :: Address -> Address -> Text -> Text -> Text -> [(Text, FilePath)] -> IO Mail

-- | A simple interface for generating an email with only plain-text body.
simpleMail' :: Address -> Address -> Text -> Text -> Mail

-- | A simple interface for generating an email with HTML and plain-text
--   alternatives and some <tt>ByteString</tt> attachments.
--   
--   Since 0.4.7
simpleMailInMemory :: Address -> Address -> Text -> Text -> Text -> [(Text, Text, ByteString)] -> Mail

-- | Add an <tt>Alternative</tt> to the <a>Mail</a>s parts.
--   
--   To e.g. add a plain text body use &gt; addPart [plainPart body]
--   (emptyMail from)
addPart :: Alternatives -> Mail -> Mail

-- | Add an attachment from a file and construct a <a>Part</a>.
addAttachment :: Text -> FilePath -> Mail -> IO Mail
addAttachments :: [(Text, FilePath)] -> Mail -> IO Mail

-- | Add an attachment from a <tt>ByteString</tt> and construct a
--   <a>Part</a>.
--   
--   Since 0.4.7
addAttachmentBS :: Text -> Text -> ByteString -> Mail -> Mail

-- | Since 0.4.7
addAttachmentsBS :: [(Text, Text, ByteString)] -> Mail -> Mail

-- | Construct a UTF-8-encoded html <a>Part</a>.
htmlPart :: Text -> Part

-- | Construct a UTF-8-encoded plain-text <a>Part</a>.
plainPart :: Text -> Part

-- | Generates a random sequence of alphanumerics of the given length.
randomString :: RandomGen d => Int -> d -> (String, d)

-- | The first parameter denotes whether the input should be treated as
--   text. If treated as text, then CRs will be stripped and LFs output as
--   CRLFs. If binary, then CRs and LFs will be escaped.
quotedPrintable :: Bool -> ByteString -> Builder
instance Eq Boundary
instance Show Boundary
instance Eq Address
instance Show Address
instance Eq Encoding
instance Show Encoding
instance Eq Part
instance Show Part
instance Show Mail
instance Eq QPC
instance Random Boundary
