From 59b8bb982d33b14a01133819c375884a8a7f7ce9 Mon Sep 17 00:00:00 2001 From: Gregor Kleen Date: Sun, 20 Oct 2019 13:54:15 +0200 Subject: [PATCH] fix(mail): use only RFC822-timezones --- src/Mail.hs | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/Mail.hs b/src/Mail.hs index 53b0e6611..5a308636c 100644 --- a/src/Mail.hs +++ b/src/Mail.hs @@ -89,7 +89,7 @@ import qualified Data.Binary as Binary import "network-bsd" Network.BSD (getHostName) import Data.Time.Zones (TZ, utcTZ, utcToLocalTimeTZ, timeZoneForUTCTime) -import Data.Time.LocalTime (ZonedTime(..)) +import Data.Time.LocalTime (ZonedTime(..), TimeZone(..)) import Data.Time.Format (rfc822DateFormat) import Network.HaskellNet.SMTP (SMTPConnection) @@ -515,8 +515,24 @@ setDateCurrent = setDate =<< liftIO getCurrentTime setDate :: (MonadHandler m, YesodMail (HandlerSite m)) => UTCTime -> MailT m () setDate time = do tz <- mailDateTZ - let timeStr = formatTime defaultTimeLocale rfc822DateFormat $ ZonedTime (utcToLocalTimeTZ tz time) (timeZoneForUTCTime tz time) + let timeStr = formatTime defaultTimeLocale rfc822DateFormat $ ZonedTime (utcToLocalTimeTZ tz time) (rfc822zone $ timeZoneForUTCTime tz time) replaceMailHeader "Date" . Just $ pack timeStr + where + rfc822zone tz' + | tz' `elem` rfc822zones = tz' + | otherwise = tz' { timeZoneName = "" } + rfc822zones = + [ TimeZone 0 False "UT" + , TimeZone 0 False "GMT" + , TimeZone (-5 * 60) False "EST" + , TimeZone (-4 * 60) True "EDT" + , TimeZone (-6 * 60) False "CST" + , TimeZone (-5 * 60) True "CDT" + , TimeZone (-7 * 60) False "MST" + , TimeZone (-6 * 60) True "MDT" + , TimeZone (-8 * 60) False "PST" + , TimeZone (-7 * 60) True "PDT" + ] setMailSmtpData :: (MonadHandler m, YesodMail (HandlerSite m), MonadThrow m) => MailT m ()