hailgun 0.4.3 → 0.5.0
raw patch · 5 files changed
+41/−18 lines, 5 filesdep +attoparsecPVP ok
version bump matches the API change (PVP)
Dependencies added: attoparsec
API changes (from Hackage documentation)
- Mail.Hailgun.Internal: HailgunMessage :: MessageSubject -> MessageContent -> EmailAddress -> [EmailAddress] -> [EmailAddress] -> [EmailAddress] -> [SpecificAttachment] -> HailgunMessage
+ Mail.Hailgun.Internal: HailgunMessage :: MessageSubject -> MessageContent -> VerifiedEmailAddress -> [VerifiedEmailAddress] -> [VerifiedEmailAddress] -> [VerifiedEmailAddress] -> [SpecificAttachment] -> HailgunMessage
- Mail.Hailgun.Internal: [messageBCC] :: HailgunMessage -> [EmailAddress]
+ Mail.Hailgun.Internal: [messageBCC] :: HailgunMessage -> [VerifiedEmailAddress]
- Mail.Hailgun.Internal: [messageCC] :: HailgunMessage -> [EmailAddress]
+ Mail.Hailgun.Internal: [messageCC] :: HailgunMessage -> [VerifiedEmailAddress]
- Mail.Hailgun.Internal: [messageFrom] :: HailgunMessage -> EmailAddress
+ Mail.Hailgun.Internal: [messageFrom] :: HailgunMessage -> VerifiedEmailAddress
- Mail.Hailgun.Internal: [messageTo] :: HailgunMessage -> [EmailAddress]
+ Mail.Hailgun.Internal: [messageTo] :: HailgunMessage -> [VerifiedEmailAddress]
Files
- Changelog.md +6/−2
- Mail/Hailgun/Internal/Data.hs +6/−4
- Mail/Hailgun/Message.hs +21/−6
- Mail/Hailgun/SendEmail.hs +3/−3
- hailgun.cabal +5/−3
Changelog.md view
@@ -1,7 +1,11 @@+## 0.5.0++- [PR #26](https://bitbucket.org/echo_rm/hailgun/pull-requests/26/) Support named emails+ ## 0.4.3 -Fix build for lts-15.1 and time-1.9.3+- Fix build for lts-15.1 and time-1.9.3 ## 0.4.2 -Adds `Mail.Hailgun.Internal` module, which exposes private APIs for constructing a `HailgunMessage`.+- Adds `Mail.Hailgun.Internal` module, which exposes private APIs for constructing a `HailgunMessage`.
Mail/Hailgun/Internal/Data.hs view
@@ -5,6 +5,7 @@ , MessageSubject , MessageContent(..) , UnverifiedEmailAddress+ , VerifiedEmailAddress , MessageRecipients(..) , emptyMessageRecipients , HailgunErrorMessage@@ -36,6 +37,7 @@ #endif type UnverifiedEmailAddress = B.ByteString -- ^ Represents an email address that is not yet verified.+type VerifiedEmailAddress = B.ByteString -- ^ Represents an email address that has been verified. type MessageSubject = T.Text -- ^ Represents a message subject. -- | A generic error message that is returned by the Hailgun library.@@ -82,10 +84,10 @@ data HailgunMessage = HailgunMessage { messageSubject :: MessageSubject , messageContent :: MessageContent- , messageFrom :: TEV.EmailAddress- , messageTo :: [TEV.EmailAddress]- , messageCC :: [TEV.EmailAddress]- , messageBCC :: [TEV.EmailAddress]+ , messageFrom :: VerifiedEmailAddress+ , messageTo :: [VerifiedEmailAddress]+ , messageCC :: [VerifiedEmailAddress]+ , messageBCC :: [VerifiedEmailAddress] , messageAttachments :: [SpecificAttachment] } deriving (Show)
Mail/Hailgun/Message.hs view
@@ -3,12 +3,16 @@ ) where import Control.Applicative-import qualified Data.ByteString.Char8 as BC-import Data.List (find)+import Data.Either (either)+import qualified Data.ByteString.Char8 as BC+import qualified Data.Text as T+import Data.Text.Encoding (encodeUtf8, decodeUtf8)+import Data.List (find) import Mail.Hailgun.Attachment.Internal import Mail.Hailgun.AttachmentsSearch import Mail.Hailgun.Internal.Data import Text.Email.Validate+import Data.Attoparsec.Text -- | A method to construct a HailgunMessage. You require a subject, content, From address and people -- to send the email to and it will give you back a valid Hailgun email message. Or it will error@@ -21,10 +25,10 @@ -> [Attachment] -- ^ The attachments that you want to attach to the email; standard or inline. -> Either HailgunErrorMessage HailgunMessage -- ^ Either an error while trying to create a valid message or a valid message. hailgunMessage subject content sender recipients simpleAttachments = do- from <- validate sender- to <- mapM validate (recipientsTo recipients)- cc <- mapM validate (recipientsCC recipients)- bcc <- mapM validate (recipientsBCC recipients)+ from <- validateRecipient sender+ to <- mapM validateRecipient (recipientsTo recipients)+ cc <- mapM validateRecipient (recipientsCC recipients)+ bcc <- mapM validateRecipient (recipientsBCC recipients) attachments <- attachmentsInferredFromMessage content cleanAttachments return HailgunMessage { messageSubject = subject@@ -37,6 +41,17 @@ } where cleanAttachments = fmap cleanAttachmentFilePath simpleAttachments++extractEmail :: T.Text -> Either String T.Text+extractEmail = parseOnly+ $ many (satisfy (/= '<')) *> char '<' *> (T.pack <$> many (satisfy (/= '>')) <* char '>')+ <|> T.pack <$> many anyChar++validateEmail :: T.Text -> Either String EmailAddress+validateEmail e = validate . encodeUtf8 =<< extractEmail e++validateRecipient :: UnverifiedEmailAddress -> Either String VerifiedEmailAddress+validateRecipient ue = ue <$ validateEmail (decodeUtf8 ue) attachmentsInferredFromMessage :: MessageContent -> [Attachment] -> Either String [SpecificAttachment] attachmentsInferredFromMessage mContent simpleAttachments =
Mail/Hailgun/SendEmail.hs view
@@ -41,7 +41,7 @@ toSimpleEmailParts :: HailgunMessage -> [(BC.ByteString, BC.ByteString)] toSimpleEmailParts message =- [ (BC.pack "from", toByteString . messageFrom $ message)+ [ (BC.pack "from", messageFrom message) , (BC.pack "subject", T.encodeUtf8 $ messageSubject message) ] ++ to ++ cc@@ -56,8 +56,8 @@ fromContent t@(TextOnly _) = [ (BC.pack "text", textContent t) ] fromContent th@(TextAndHTML {}) = (BC.pack "html", htmlContent th) : fromContent (TextOnly . textContent $ th) - convertEmails :: BC.ByteString -> [EmailAddress] -> [(BC.ByteString, BC.ByteString)]- convertEmails prefix = fmap ((,) prefix . toByteString)+ convertEmails :: BC.ByteString -> [VerifiedEmailAddress] -> [(BC.ByteString, BC.ByteString)]+ convertEmails prefix = fmap ((,) prefix) -- TODO replace with MailgunSendResponse -- | The response to an email being accepted by the Mailgun API.
hailgun.cabal view
@@ -10,7 +10,7 @@ -- PVP summary: +-+------- breaking API changes -- | | +----- non-breaking API additions -- | | | +--- code changes with no API change-version: 0.4.3+version: 0.5.0 -- A short (one-line) description of the package. synopsis: Mailgun REST api interface for Haskell.@@ -27,11 +27,11 @@ license-file: LICENSE -- The package author(s).-author: Robert Massaioli+author: Robert Massaioli <robertmassaioli@gmail.com> -- An email address to which users can send suggestions, bug reports, and -- patches.-maintainer: robertmassaioli@gmail.com+maintainer: Konstantine Rybnikov <k-bx@k-bx.com> -- A copyright notice. copyright: (c) 2014-2018 Robert Massaioli@@ -84,6 +84,8 @@ , tagsoup >= 0.13 && < 0.15 , text == 1.2.* , transformers >= 0.3 && < 0.6+ , filepath >= 1 && < 2+ , attoparsec >= 0.13 && < 0.14 if flag(newtime) Build-Depends: time >= 1.5