@@ -18,6 +18,8 @@ module Network.Mail.SMTP
18
18
, sendMailSTARTTLS'
19
19
, sendMailWithLoginSTARTTLS
20
20
, sendMailWithLoginSTARTTLS'
21
+ , sendMailWithLoginOAuthSTARTTLS
22
+ , sendMailWithLoginOAuthSTARTTLS'
21
23
, sendMailWithSenderSTARTTLS
22
24
, sendMailWithSenderSTARTTLS'
23
25
, simpleMail
@@ -260,6 +262,17 @@ sendCommand (SMTPC conn _) (AUTH LOGIN username password) = do
260
262
command = " AUTH LOGIN"
261
263
(userB64, passB64) = encodeLogin username password
262
264
265
+ sendCommand (SMTPC conn _) (AUTH LOGIN_OAUTH username token) = do
266
+ bsPutCrLf conn command
267
+ _ <- parseResponse conn
268
+ bsPutCrLf conn tokenB64
269
+ (code, msg) <- parseResponse conn
270
+ unless (code == 235 ) $ fail " authentication failed."
271
+ return (code, msg)
272
+ where
273
+ command = " AUTH XOAUTH2"
274
+ tokenB64 = encodeLoginOAuth username token
275
+
263
276
sendCommand (SMTPC conn _) (AUTH at username password) = do
264
277
bsPutCrLf conn command
265
278
(code, msg) <- parseResponse conn
@@ -364,6 +377,14 @@ sendMailWithLoginTLS host user pass mail = connectSMTPS host >>= sendMailWithLog
364
377
sendMailWithLoginTLS' :: HostName -> PortNumber -> UserName -> Password -> Mail -> IO ()
365
378
sendMailWithLoginTLS' host port user pass mail = connectSMTPS' host port >>= sendMailWithLoginIntern user pass mail
366
379
380
+ -- | Connect to an SMTP server, login with OAuth, send a 'Mail', disconnect. Uses STARTTLS with the default port (587).
381
+ sendMailWithLoginOAuthSTARTTLS :: HostName -> UserName -> Token -> Mail -> IO ()
382
+ sendMailWithLoginOAuthSTARTTLS host user token mail = connectSMTPSTARTTLS host >>= sendMailWithLoginOAuthIntern user token mail
383
+
384
+ -- | Connect to an SMTP server, login with OAuth, send a 'Mail', disconnect. Uses STARTTLS.
385
+ sendMailWithLoginOAuthSTARTTLS' :: HostName -> PortNumber -> UserName -> Token -> Mail -> IO ()
386
+ sendMailWithLoginOAuthSTARTTLS' host port user token mail = connectSMTPSTARTTLS' host port >>= sendMailWithLoginOAuthIntern user token mail
387
+
367
388
-- | Send a 'Mail' with a given sender. Uses SMTPS with its default port (465).
368
389
sendMailWithSenderTLS :: ByteString -> HostName -> Mail -> IO ()
369
390
sendMailWithSenderTLS sender host mail = connectSMTPS host >>= sendMailWithSenderIntern sender mail
@@ -402,6 +423,12 @@ sendMailWithLoginIntern user pass mail con = do
402
423
renderAndSend con mail
403
424
closeSMTP con
404
425
426
+ sendMailWithLoginOAuthIntern :: UserName -> Password -> Mail -> SMTPConnection -> IO ()
427
+ sendMailWithLoginOAuthIntern user token mail con = do
428
+ _ <- sendCommand con (AUTH LOGIN_OAUTH user token)
429
+ renderAndSend con mail
430
+ closeSMTP con
431
+
405
432
sendMailWithSenderIntern :: ByteString -> Mail -> SMTPConnection -> IO ()
406
433
sendMailWithSenderIntern sender mail con = do
407
434
renderAndSendFrom sender con mail
0 commit comments