[Haskell-cafe] Amazon SES email issues

Vlatko Basic vlatko.basic at gmail.com
Sat Apr 30 08:48:40 UTC 2016


Hi,

Just saw a note in my code about one more thing. Actually very important.

The From: email address, "*sesFrom = C8.pack "de at somewhere.com 
<mailto:de at somewhere.com>"*", has to be verified at Amazon.

For "sesFrom" you can't use any email address, but can in "mailFrom".


Since your Ruby and Rust code are not SES-specific, maybe you can try a more 
general library, like Network.HaskellNet.SMTP.

I'm using it for local SMTP, but haven't tried it with SES.

If you'll try it and have success, let us know.


br,

vlatko


> -------- Original Message --------
> Subject: Re: [Haskell-cafe] Amazon SES email issues
> From: David Escobar <davidescobar at ieee.org>
> To: vlatko.basic at gmail.com, Haskell Cafe <haskell-cafe at haskell.org>
> Date: 30/04/16 10:31
>
>
> Hi Vlatko,
> Yes, I've double checked the keys. I'm using the same ones in a Rails app as 
> well as a small Rust CLI program and they both work (on the same machine too). 
> So it's definitely something I'm missing on the Haskell side.
>
> I checked my package versions, and I have:
> mime-mail 0.4.11
> mime-mail-ses 0.3.2.2
> mime-types 0.1.0.6
>
> So it looks like we're using the same versions. I'm not sure about the E2 
> instance. I'll have to check with my DevOps colleague at work to make sure. If 
> it's still SES email, I would imagine that it shouldn't matter, especially 
> since both the Ruby (ActionMailer) and Rust (lettre) email libraries I'm using 
> are general email libraries and not SES-specific and they both work fine, but 
> at this point, who knows? I've tried everything else without success, but the 
> fact that you're using it ok tells me I'm probably close and just missing a 
> small detail or so.
>
> Kind of surprised how difficult it's been actually. I was expecting the Rust 
> library to be the one that gave me problems. :)
>
> On Sat, Apr 30, 2016 at 12:39 AM, Vlatko Basic <vlatko.basic at gmail.com 
> <mailto:vlatko.basic at gmail.com>> wrote:
>
>     Hi David,
>
>     I'm using almost exact function as you wrote below and it works without
>     problems. Using mime-mail-ses-0.3.2.2.
>
>     However, it works on E2 instance. Don't know if that matters.
>
>     Stupid question, but have you double checked keys?
>
>     I received similar errors when keys were not correct (they were not
>     hardcoded, but fetched).
>
>
>     br,
>
>     vlatko
>
>
>>     -------- Original Message --------
>>     Subject: Re: [Haskell-cafe] Amazon SES email issues
>>     From: David Escobar <davidescobar at ieee.org> <mailto:davidescobar at ieee.org>
>>     To: David Johnson <djohnson.m at gmail.com> <mailto:djohnson.m at gmail.com>
>>     Cc: Haskell Cafe <haskell-cafe at haskell.org> <mailto:haskell-cafe at haskell.org>
>>     Date: 30/04/16 09:10
>>
>>
>>     David, thanks for the suggestion. Are there any examples on how to send
>>     an email? I've looked through several of the Haskell email packages and
>>     have been able to figure out their APIs easily enough, but this one seems
>>     incredibly complex - almost seem to have to know the internals of SES to
>>     use it effectively and the documentation / examples are scant.
>>
>>     On Fri, Apr 29, 2016 at 7:07 AM, David Johnson <djohnson.m at gmail.com
>>     <mailto:djohnson.m at gmail.com>> wrote:
>>
>>         I think that package is using an outdated version of the AWS Signing
>>         algorithm.
>>
>>         "AWS3-HTTPS" I think AWS is migrating most of their APIs (who have
>>         domains / services created after a certain date) to require using the
>>         V4 Signature algorithm for all API requests. The amazonka-ses would
>>         probably work better.
>>
>>
>>         On Fri, Apr 29, 2016 at 1:45 AM, David Escobar <davidescobar at ieee.org
>>         <mailto:davidescobar at ieee.org>> wrote:
>>
>>             Hi everyone,
>>             I'm having issues with sending email through Amazon SES. I'm
>>             using the *Network.Mail.Mime.SES* package. The error I get is:
>>
>>             *email-test-exe: SESException {seStatus = Status {statusCode =
>>             403, statusMessage = "Forbidden"}, seCode =
>>             "SignatureDoesNotMatch", seMessage = "The request signature we
>>             calculated does not match the signature you provided. Check your
>>             AWS Secret Access Key and signing method. Consult the service
>>             documentation for details.", seRequestId =
>>             "8ceb250a-0dd3-11e6-892c-4fb1a14d4732"}*
>>
>>             What's confusing is that I'm using the same SES settings in a
>>             Rails app as well as a small Rust console program without any
>>             issues (it works from the same machine too). The only thing I can
>>             think of is that with this Haskell package, I haven't found where
>>             to set certain things like the port number (587) and so maybe
>>             it's that? Here is a small sample app that illustrates the
>>             problem. What am I missing? Thanks.
>>
>>
>>             *{-# LANGUAGE OverloadedStrings #-}
>>             {-# LANGUAGE QuasiQuotes #-}*
>>
>>             *module Main where*
>>             *
>>             import Data.Function ((&))
>>             import GHC.Generics
>>             import Network.HTTP.Client
>>             import Network.HTTP.Client.TLS
>>             import Network.Mail.Mime
>>             import Network.Mail.Mime.SES
>>             import Text.Hamlet (shamlet)
>>             import Text.Blaze.Html.Renderer.String (renderHtml)
>>
>>             import qualified Data.ByteString.Char8 as C8
>>             import qualified Data.Text as T
>>             import qualified Data.Text.Lazy as LT
>>
>>             main :: IO ()
>>             main = do
>>               manager <- newManager tlsManagerSettings
>>               let sesConfig = SES { sesFrom = C8.pack "de at somewhere.com
>>             <mailto:de at somewhere.com>",
>>             sesTo = [ C8.pack "someone.else at somewhereelse.com
>>             <mailto:someone.else at somewhereelse.com>" ],
>>             sesAccessKey = "SOMEAWSACCESSKEY",
>>             sesSecretKey = "ANEVENLONGERAWSSECRETKEY1234567890",
>>             sesRegion = usEast1 }
>>                   email = Mail { mailFrom = Address (Just "David Escobar")
>>             "de at somewhere.com <mailto:de at somewhere.com>",
>>                                  mailTo = [ Address (Just "Someone Else")
>>             "someone.else at somewhereelse.com
>>             <mailto:someone.else at somewhereelse.com>" ],
>>              mailParts = [ [ htmlPart testEmail ] ],
>>                                  mailCc = [],
>>                                  mailBcc = [],
>>              mailHeaders = [ ("subject", "Some Test Email"),
>>                      ("Content-Type", "text/html; charset=ISO-8859-1") ] }
>>               renderSendMailSES manager sesConfig email
>>
>>
>>             testEmail :: LT.Text
>>             testEmail =
>>               let rows = [ [ "1", "2", "3" ], [ "4", "5", "6" ]]
>>               in
>>                 renderHtml [shamlet|
>>                   $doctype 5
>>                   <html>
>>                     <body>
>>                       <table style="border: 1px solid black; border-collapse:
>>             collapse; margin: 25px 0; width: 100%;">
>>                         <tr>
>>                           <th style="background-color: #072a2d; color: white;
>>             font-weight: bold; border-right: 1px solid white; padding: 5px
>>             10px; width: 33%;">
>>                             Column 1
>>                           <th style="background-color: #072a2d; color: white;
>>             font-weight: bold; border-right: 1px solid white; padding: 5px
>>             10px; width: 33%;">
>>                             Column 2
>>                           <th style="background-color: #072a2d; color: white;
>>             font-weight: bold; border-right: 1px solid white; padding: 5px
>>             10px; width: 33%;">
>>                             Column 3
>>                         $forall row <- rows
>>                           <tr style="background-color: #f8f9ee;">
>>                             <td style="border: 1px solid black; padding: 5px
>>             10px; text-align: left; width: 33%;">
>>                               #{T.pack $ row !! 0}
>>                             <td style="border: 1px solid black; padding: 5px
>>             10px; text-align: left; width: 33%;">
>>                               #{T.pack $ row !! 1}
>>                             <td style="border: 1px solid black; padding: 5px
>>             10px; text-align: left; width: 33%;">
>>                               #{T.pack $ row !! 2}
>>                 |] & LT.pack*
>>
>>
>>             _______________________________________________
>>             Haskell-Cafe mailing list
>>             Haskell-Cafe at haskell.org <mailto:Haskell-Cafe at haskell.org>
>>             http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
>>
>>
>>
>>
>>         -- 
>>         Cell: 1.630.740.8204 <tel:1.630.740.8204>
>>
>>
>>
>>
>>     _______________________________________________
>>     Haskell-Cafe mailing list
>>     Haskell-Cafe at haskell.org <mailto:Haskell-Cafe at haskell.org>
>>     http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20160430/124de51b/attachment-0001.html>


More information about the Haskell-Cafe mailing list