diff --git a/smtpbz.cabal b/smtpbz.cabal
--- a/smtpbz.cabal
+++ b/smtpbz.cabal
@@ -1,11 +1,11 @@
 cabal-version: 1.12
 
--- This file has been generated from package.yaml by hpack version 0.36.0.
+-- This file has been generated from package.yaml by hpack version 0.38.0.
 --
 -- see: https://github.com/sol/hpack
 
 name:           smtpbz
-version:        1.1.0
+version:        1.2.0
 synopsis:       Unofficial API client for smtp.bz
 description:    See README.markdown
 category:       Web
@@ -30,18 +30,23 @@
       Smtpbz
       Smtpbz.Internal.Api
       Smtpbz.Internal.Has
+      Smtpbz.Internal.Manager
   other-modules:
       Paths_smtpbz
   hs-source-dirs:
       src
   default-extensions:
       OverloadedStrings
+      ImportQualifiedPost
   ghc-options: -funbox-strict-fields -Wall
   build-depends:
       aeson
     , base >=4.7 && <5
     , bytestring
+    , crypton-connection
+    , data-default
     , http-conduit
     , http-types
     , text
+    , tls
   default-language: Haskell2010
diff --git a/src/Smtpbz.hs b/src/Smtpbz.hs
--- a/src/Smtpbz.hs
+++ b/src/Smtpbz.hs
@@ -1,7 +1,9 @@
 module Smtpbz
   ( module Smtpbz.Internal.Has
+  , module Smtpbz.Internal.Manager
   , module Smtpbz.Internal.Api
   ) where
 
 import Smtpbz.Internal.Has (Has(..))
+import Smtpbz.Internal.Manager
 import Smtpbz.Internal.Api
diff --git a/src/Smtpbz/Internal/Api.hs b/src/Smtpbz/Internal/Api.hs
--- a/src/Smtpbz/Internal/Api.hs
+++ b/src/Smtpbz/Internal/Api.hs
@@ -30,17 +30,18 @@
   , debugPrintResponse
   ) where
 
-import           Data.Bool (bool)
-import           Data.ByteString (ByteString)
-import qualified Data.ByteString.Lazy as Lazy (ByteString)
-import qualified Data.ByteString.Lazy.Char8 as ByteString.Lazy
-import           Data.Maybe (mapMaybe)
-import           Data.String (fromString)
-import qualified Network.HTTP.Conduit as Http
-import qualified Network.HTTP.Types as Http
-import           Text.Printf (printf)
+import Data.Bool (bool)
+import Data.ByteString (ByteString)
+import Data.ByteString.Lazy qualified as Lazy (ByteString)
+import Data.ByteString.Lazy.Char8 qualified as ByteString.Lazy
+import Data.Maybe (mapMaybe)
+import Data.String (fromString)
+import Network.HTTP.Conduit qualified as Http
+import Network.HTTP.Types qualified as Http
+import Text.Printf (printf)
 
-import           Smtpbz.Internal.Has (Has(..))
+import Smtpbz.Internal.Has (Has(..))
+import Smtpbz.Internal.Manager (Manager(..))
 
 
 -- | User data.
@@ -196,7 +197,7 @@
 
 callApi :: Has smtpbz => smtpbz -> Http.Request -> IO (Http.Response Lazy.ByteString)
 callApi smtpbz req =
-  Http.httpLbs req (httpMan smtpbz)
+  Http.httpLbs req (unManager (httpMan smtpbz))
 
 -- | Check if response status code is in [200, 300).
 successfulCall :: Http.Response Lazy.ByteString -> Bool
diff --git a/src/Smtpbz/Internal/Has.hs b/src/Smtpbz/Internal/Has.hs
--- a/src/Smtpbz/Internal/Has.hs
+++ b/src/Smtpbz/Internal/Has.hs
@@ -3,11 +3,12 @@
   ( Has(..)
   ) where
 
-import           Data.ByteString (ByteString)
-import           Data.Text (Text)
-import qualified Network.HTTP.Conduit as Http
+import Data.ByteString (ByteString)
+import Data.Text (Text)
 
+import Smtpbz.Internal.Manager (Manager)
 
+
 -- | smtp.bz configuration that is used by the library
 -- and the user may want to override.
 class Has t where
@@ -15,5 +16,10 @@
   apiKey :: t -> ByteString
   -- | API base URL; Most likely, https://api.smtp.bz/v1
   baseUrl :: t -> Text
-  -- | The 'Http.Manager' under which all requests will be made.
-  httpMan :: t -> Http.Manager
+  -- | The Manager under which all requests will be made.
+  --
+  -- The default Manager is incompatible with outdated smtpbz servers because
+  -- it requires the Extended Main Secret extension, which those servers do not support.
+  -- Therefore, we define a newtype to prevent unintentional passing of an incompatible
+  -- Manager to API methods, which would result in a runtime error.
+  httpMan :: t -> Manager
diff --git a/src/Smtpbz/Internal/Manager.hs b/src/Smtpbz/Internal/Manager.hs
new file mode 100644
--- /dev/null
+++ b/src/Smtpbz/Internal/Manager.hs
@@ -0,0 +1,42 @@
+module Smtpbz.Internal.Manager
+  ( Manager(..)
+  , newManager
+  ) where
+
+import Control.Monad.IO.Class (MonadIO, liftIO)
+import Data.Default (def)
+import Network.HTTP.Conduit qualified as Http
+import Network.Connection (TLSSettings(..))
+import Network.TLS (Supported(..), EMSMode(AllowEMS), clientSupported)
+
+
+-- A thin wrapper over 'Http.Manager' that API methods require.
+--
+-- Use 'newManager' to create a 'Manager' that is functionally equivalent to the
+-- the default 'Http.Manager' but compatible with smtpbz servers. Alternatively,
+-- you can wrap your own 'Http.Manager' if you're certain that it is compatible
+-- with smtpbz servers.
+newtype Manager = Manager { unManager :: Http.Manager }
+
+-- | Create a 'Manager' that is functionally equivalent to the default 'Http.Manager'
+-- but compatible with smtpbz servers.
+--
+-- Currently, this means relaxing the Extended Main Secret extension requirement.
+newManager :: MonadIO m => m Manager
+newManager =
+  fmap Manager (liftIO (Http.newManager (Http.mkManagerSettings tlsSettings Nothing)))
+
+-- | I'm unsure why http-client's API is so bad, but
+-- we have to do a little bit of dancing here to cover
+-- every possibility.
+tlsSettings :: TLSSettings
+tlsSettings =
+  case defaultTlsSettings of
+    settings@(TLSSettingsSimple {settingClientSupported = supported}) ->
+      settings {settingClientSupported = supported {supportedExtendedMainSecret = AllowEMS}}
+    TLSSettings params ->
+      TLSSettings params {clientSupported = (clientSupported params) {supportedExtendedMainSecret = AllowEMS}}
+
+defaultTlsSettings :: TLSSettings
+defaultTlsSettings =
+  def
