From 32d7fa35a9b7e8517c65e6b4d532f961b7175309 Mon Sep 17 00:00:00 2001 From: Araq Date: Fri, 16 Nov 2018 11:30:24 +0100 Subject: [PATCH] fixes #9728 (cherry picked from commit 4929f74023c55db6a1521b1e0647a99d94596e0e) --- lib/pure/smtp.nim | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/lib/pure/smtp.nim b/lib/pure/smtp.nim index d9b863a526..5f4b09f801 100644 --- a/lib/pure/smtp.nim +++ b/lib/pure/smtp.nim @@ -71,7 +71,12 @@ when not defined(ssl): type PSSLContext = ref object let defaultSSLContext: PSSLContext = nil 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], otherHeaders: openarray[tuple[name, value: string]]): Message = @@ -109,20 +114,22 @@ proc `$`*(msg: Message): string = result.add(msg.msgBody) proc newSmtp*(useSsl = false, debug=false, - sslContext = defaultSslContext): Smtp = + sslContext: SSLContext = nil): Smtp = ## Creates a new ``Smtp`` instance. new result result.debug = debug - result.sock = newSocket() if useSsl: when compiledWithSsl: - sslContext.wrapSocket(result.sock) + if sslContext == nil: + getSSLContext().wrapSocket(result.sock) + else: + sslContext.wrapSocket(result.sock) else: {.error: "SMTP module compiled without SSL support".} proc newAsyncSmtp*(useSsl = false, debug=false, - sslContext = defaultSslContext): AsyncSmtp = + sslContext: SSLContext = nil): AsyncSmtp = ## Creates a new ``AsyncSmtp`` instance. new result result.debug = debug @@ -130,7 +137,10 @@ proc newAsyncSmtp*(useSsl = false, debug=false, result.sock = newAsyncSocket() if useSsl: when compiledWithSsl: - sslContext.wrapSocket(result.sock) + if sslContext == nil: + getSSLContext().wrapSocket(result.sock) + else: + sslContext.wrapSocket(result.sock) else: {.error: "SMTP module compiled without SSL support".}