This commit is contained in:
Araq 2018-11-16 11:30:24 +01:00
commit 4929f74023

View file

@ -71,7 +71,12 @@ when not defined(ssl):
type PSSLContext = ref object type PSSLContext = ref object
let defaultSSLContext: PSSLContext = nil let defaultSSLContext: PSSLContext = nil
else: else:
let defaultSSLContext = newContext(verifyMode = CVerifyNone) var defaultSSLContext {.threadvar.}: SSLContext
proc getSSLContext(): SSLContext =
if defaultSSLContext == nil:
defaultSSLContext = newContext(verifyMode = CVerifyNone)
result = defaultSSLContext
proc createMessage*(mSubject, mBody: string, mTo, mCc: seq[string], proc createMessage*(mSubject, mBody: string, mTo, mCc: seq[string],
otherHeaders: openarray[tuple[name, value: string]]): Message = otherHeaders: openarray[tuple[name, value: string]]): Message =
@ -109,20 +114,22 @@ proc `$`*(msg: Message): string =
result.add(msg.msgBody) result.add(msg.msgBody)
proc newSmtp*(useSsl = false, debug=false, proc newSmtp*(useSsl = false, debug=false,
sslContext = defaultSslContext): Smtp = sslContext: SSLContext = nil): Smtp =
## Creates a new ``Smtp`` instance. ## Creates a new ``Smtp`` instance.
new result new result
result.debug = debug result.debug = debug
result.sock = newSocket() result.sock = newSocket()
if useSsl: if useSsl:
when compiledWithSsl: when compiledWithSsl:
sslContext.wrapSocket(result.sock) if sslContext == nil:
getSSLContext().wrapSocket(result.sock)
else:
sslContext.wrapSocket(result.sock)
else: else:
{.error: "SMTP module compiled without SSL support".} {.error: "SMTP module compiled without SSL support".}
proc newAsyncSmtp*(useSsl = false, debug=false, proc newAsyncSmtp*(useSsl = false, debug=false,
sslContext = defaultSslContext): AsyncSmtp = sslContext: SSLContext = nil): AsyncSmtp =
## Creates a new ``AsyncSmtp`` instance. ## Creates a new ``AsyncSmtp`` instance.
new result new result
result.debug = debug result.debug = debug
@ -130,7 +137,10 @@ proc newAsyncSmtp*(useSsl = false, debug=false,
result.sock = newAsyncSocket() result.sock = newAsyncSocket()
if useSsl: if useSsl:
when compiledWithSsl: when compiledWithSsl:
sslContext.wrapSocket(result.sock) if sslContext == nil:
getSSLContext().wrapSocket(result.sock)
else:
sslContext.wrapSocket(result.sock)
else: else:
{.error: "SMTP module compiled without SSL support".} {.error: "SMTP module compiled without SSL support".}