Spec-Zone.ru › Nim 1

smtp

Этот модуль реализует протокол SMTP-клиента, как определено в RFC 5321. Он может использоваться для отправки почты любому SMTP-серверу.

Этот модуль также реализует протокол, используемый для форматирования сообщений, как определено в RFC 2822.

Пример использования gmail:

var msg = createMessage("Hello from Nim's SMTP",
                        "Hello!.\n Is this awesome or what?",
                        @["foo@gmail.com"])
let smtpConn = newSmtp(useSsl = true, debug=true)
smtpConn.connect("smtp.gmail.com", Port 465)
smtpConn.auth("username", "password")
smtpConn.sendmail("username@gmail.com", @["foo@gmail.com"], $msg)

Пример для использования startTls:

var msg = createMessage("Hello from Nim's SMTP",
                        "Hello!.\n Is this awesome or what?",
                        @["foo@gmail.com"])
let smtpConn = newSmtp(debug=true)
smtpConn.connect("smtp.mailtrap.io", Port 2525)
smtpConn.startTls()
smtpConn.auth("username", "password")
smtpConn.sendmail("username@gmail.com", @["foo@gmail.com"], $msg)

Для поддержки SSL этот модуль полагается на OpenSSL. Если вы хотите включить SSL, компилируйте с -d:ssl.

Импорты

net, strutils, strtabs, base64, os, strutils, asyncnet, asyncdispatch, parsecfg

Типы

Message = object
  msgTo: seq[string]
  msgCc: seq[string]
  msgSubject: string
  msgOtherHeaders: StringTableRef
  msgBody: string
Исходный код Изменить
ReplyError = object of IOError
Исходный код Изменить
Smtp = SmtpBase[Socket]
Исходный код Изменить
AsyncSmtp = SmtpBase[AsyncSocket]
Исходный код Изменить

Процедуры

proc debugSend(smtp: AsyncSmtp; cmd: string): owned(Future[void]) {...}{.
    raises: [Exception], tags: [RootEffect].}

Отправляет cmd по сокету, подключенному к SMTP-серверу.

Если объект smtp был создан с включенным debug, debugSend вызовет echo("C:" & cmd) перед отправкой.

Это процедура более низкого уровня, и обычно ее вызывать не нужно при использовании этого модуля. Исключением является реализация расширений SMTP.

Исходный код Изменить
proc debugSend(smtp: Smtp; cmd: string) {...}{.raises: [SslError, OSError],
    tags: [WriteIOEffect].}
Исходный код Изменить
proc debugRecv(smtp: AsyncSmtp): Future[TaintedString] {...}{.
    raises: [Exception, ValueError], tags: [RootEffect].}

Получает строку данных из сокета, подключенного к SMTP-серверу.

Если объект smtp был создан с включенным debug, debugRecv вызовет echo("S:" & result.string) после получения данных.

Это процедура более низкого уровня, и обычно ее вызывать не нужно при использовании этого модуля. Исключением является реализация расширений SMTP.

См. checkReply(reply).

Исходный код Изменить
proc debugRecv(smtp: Smtp): TaintedString {...}{.
    raises: [TimeoutError, OSError, SslError], tags: [ReadIOEffect, TimeEffect].}
Исходный код Изменить
proc createMessage(mSubject, mBody: string; mTo, mCc: seq[string];
                   otherHeaders: openArray[tuple[name, value: string]]): Message {...}{.
    raises: [], tags: [].}

Создает новый MIME-совместимый сообщение.

Необходимо убедиться, что mSubject, mTo и mCc не содержат символов новой строки. В противном случае будет возбуждено исключение AssertionDefect.

Исходный код Изменить
proc createMessage(mSubject, mBody: string; mTo, mCc: seq[string] = @[]): Message {...}{.
    raises: [], tags: [].}

Альтернативная версия вышеперечисленного.

Необходимо убедиться, что mSubject, mTo и mCc не содержат символов новой строки. В противном случае будет возбуждено исключение AssertionDefect.

Исходный код Изменить
proc `$`(msg: Message): string {...}{.raises: [], tags: [].}
stringify для Message. Исходный код Изменить
proc newSmtp(useSsl = false; debug = false; sslContext: SslContext = nil): Smtp {...}{.
    raises: [OSError, SslError, Exception, LibraryError, IOError],
    tags: [RootEffect, ReadDirEffect, ReadEnvEffect].}
Создает новый экземпляр Smtp. Исходный код Изменить
proc newAsyncSmtp(useSsl = false; debug = false; sslContext: SslContext = nil): AsyncSmtp {...}{.
    raises: [OSError, Exception, SslError, LibraryError, IOError],
    tags: [RootEffect, ReadDirEffect, ReadEnvEffect].}
Создает новый экземпляр AsyncSmtp. Исходный код Изменить
proc checkReply(smtp: AsyncSmtp; reply: string): owned(Future[void]) {...}{.
    raises: [Exception], tags: [RootEffect].}

Вызывает debugRecv и проверяет, что полученные данные начинаются с reply. Если полученные данные не начинаются с reply, то на SMTP-сервер будет отправлена команда QUIT, и будет возбуждено исключение ReplyError.

Это процедура более низкого уровня, и обычно ее вызывать не нужно при использовании этого модуля. Исключением является реализация расширений SMTP.

Исходный код Изменить
proc checkReply(smtp: Smtp; reply: string) {...}{.
    raises: [TimeoutError, OSError, SslError, ReplyError],
    tags: [ReadIOEffect, TimeEffect, WriteIOEffect].}
Исходный код Изменить
proc helo(smtp: AsyncSmtp): owned(Future[void]) {...}{.raises: [Exception],
    tags: [RootEffect].}
Исходный код Изменить
proc helo(smtp: Smtp) {...}{.raises: [SslError, OSError, TimeoutError, ReplyError],
                        tags: [WriteIOEffect, ReadIOEffect, TimeEffect].}
Исходный код Изменить
proc connect(smtp: AsyncSmtp; address: string; port: Port): owned(Future[void]) {...}{.
    raises: [Exception], tags: [RootEffect].}
Устанавливает соединение с SMTP-сервером. Может завершиться ошибкой ReplyError или ошибкой сокета. Исходный код Изменить
proc connect(smtp: Smtp; address: string; port: Port) {...}{.
    raises: [OSError, SslError, TimeoutError, ReplyError],
    tags: [ReadIOEffect, TimeEffect, WriteIOEffect].}
Исходный код Изменить
proc startTls(smtp: AsyncSmtp; sslContext: SslContext = nil): owned(Future[void]) {...}{.
    raises: [Exception], tags: [RootEffect, ReadDirEffect, ReadEnvEffect].}
Переводит SMTP-соединение в режим TLS (Transport Layer Security). Может завершиться ошибкой ReplyError. Исходный код Изменить
proc startTls(smtp: Smtp; sslContext: SslContext = nil) {...}{.raises: [SslError,
    OSError, TimeoutError, ReplyError, Exception, LibraryError, IOError], tags: [
    WriteIOEffect, ReadIOEffect, TimeEffect, RootEffect, ReadDirEffect,
    ReadEnvEffect].}
Исходный код Изменить
proc auth(smtp: AsyncSmtp; username, password: string): owned(Future[void]) {...}{.
    raises: [Exception], tags: [RootEffect].}
Отправляет команду AUTH на сервер, чтобы войти как username с использованием password. Может завершиться ошибкой ReplyError. Исходный код Изменить
proc auth(smtp: Smtp; username, password: string) {...}{.
    raises: [SslError, OSError, TimeoutError, ReplyError],
    tags: [WriteIOEffect, ReadIOEffect, TimeEffect].}
Исходный код Изменить
proc sendMail(smtp: AsyncSmtp; fromAddr: string; toAddrs: seq[string];
              msg: string): owned(Future[void]) {...}{.raises: [Exception],
    tags: [RootEffect].}

Отправляет msg из fromAddr на адреса, указанные в toAddrs. Сообщения могут быть сформированы с использованием createMessage, преобразуя Message в строку.

Необходимо убедиться, что fromAddr и toAddrs не содержат символов новой строки. В противном случае будет возбуждено исключение AssertionDefect.

Исходный код Изменить
proc sendMail(smtp: Smtp; fromAddr: string; toAddrs: seq[string]; msg: string) {...}{.
    raises: [SslError, OSError, TimeoutError, ReplyError],
    tags: [WriteIOEffect, ReadIOEffect, TimeEffect].}
Исходный код Изменить
proc close(smtp: AsyncSmtp): owned(Future[void]) {...}{.raises: [Exception],
    tags: [RootEffect].}
Отключается от SMTP-сервера и закрывает сокет. Исходный код Изменить
proc close(smtp: Smtp) {...}{.raises: [SslError, OSError, Exception, LibraryError],
                         tags: [WriteIOEffect, RootEffect].}
Исходный код Изменить

Экспорт

Порт

© 2006–2021 Andreas Rumpf
Licensed under the MIT License.
https://nim-lang.org/docs/smtp.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API