Spec-Zone.ru › Nim

src/smtp

Примечание: Для использования данного модуля запустите nimble install 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.

Типы

AsyncSmtp = SmtpBase[AsyncSocket]
Message = object
ReplyError = object of IOError
Smtp = SmtpBase[Socket]

Процедуры

proc `$`(msg: Message): string {....raises: [], tags: [], forbids: [].}
Преобразование в строку для Message.
proc auth(smtp: AsyncSmtp; username, password: string): owned(Future[void]) {.
    ...stackTrace: false, raises: [Exception], tags: [RootEffect], forbids: [].}
Отправляет команду AUTH на сервер для входа в систему как username используя password. Может завершиться ошибкой ReplyError.
proc auth(smtp: Smtp; username, password: string) {.
    ...raises: [SslError, OSError, TimeoutError, ReplyError],
    tags: [WriteIOEffect, ReadIOEffect, TimeEffect], forbids: [].}
proc checkReply(smtp: AsyncSmtp; reply: string): owned(Future[void]) {.
    ...stackTrace: false, raises: [Exception], tags: [RootEffect], forbids: [].}

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

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

proc checkReply(smtp: Smtp; reply: string) {.
    ...raises: [TimeoutError, OSError, SslError, ReplyError],
    tags: [ReadIOEffect, TimeEffect, WriteIOEffect], forbids: [].}
proc close(smtp: AsyncSmtp): owned(Future[void]) {....stackTrace: false,
    raises: [Exception], tags: [RootEffect], forbids: [].}
Отключается от SMTP-сервера и закрывает сокет.
proc close(smtp: Smtp) {....raises: [SslError, OSError, LibraryError, Exception],
                         tags: [WriteIOEffect, RootEffect], forbids: [].}
proc connect(smtp: AsyncSmtp; address: string; port: Port): owned(
    Future[void]) {....stackTrace: false, raises: [Exception], tags: [RootEffect],
                    forbids: [].}
Устанавливает соединение с SMTP-сервером. Может завершиться ошибкой ReplyError или ошибкой сокета.
proc connect(smtp: Smtp; address: string; port: Port) {.
    ...raises: [OSError, SslError, TimeoutError, ReplyError],
    tags: [ReadIOEffect, RootEffect, TimeEffect, WriteIOEffect], forbids: [].}
proc createMessage(mSubject, mBody: string; mTo, mCc: seq[string] = @[]): Message {.
    ...raises: [], tags: [], forbids: [].}

Альтернативная версия выше.

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

proc createMessage(mSubject, mBody: string; mTo, mCc: seq[string];
                   otherHeaders: openArray[tuple[name, value: string]]): Message {.
    ...raises: [], tags: [], forbids: [].}

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

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

proc debugRecv(smtp: AsyncSmtp): Future[string] {....stackTrace: false,
    raises: [Exception, ValueError], tags: [RootEffect], forbids: [].}

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

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

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

См. checkReply(reply).

proc debugRecv(smtp: Smtp): string {....raises: [TimeoutError, OSError, SslError],
                                     tags: [ReadIOEffect, TimeEffect],
                                     forbids: [].}
proc debugSend(smtp: AsyncSmtp; cmd: string): owned(Future[void]) {.
    ...stackTrace: false, raises: [Exception], tags: [RootEffect], forbids: [].}

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

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

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

proc debugSend(smtp: Smtp; cmd: string) {....raises: [SslError, OSError],
    tags: [WriteIOEffect], forbids: [].}
proc ehlo(smtp: AsyncSmtp): Future[bool] {....stackTrace: false,
    raises: [Exception, ValueError], tags: [RootEffect], forbids: [].}
Отправляет запрос EHLO.
proc ehlo(smtp: Smtp): bool {....raises: [SslError, OSError, TimeoutError],
                              tags: [WriteIOEffect, ReadIOEffect, TimeEffect],
                              forbids: [].}
proc helo(smtp: AsyncSmtp): owned(Future[void]) {....stackTrace: false,
    raises: [Exception], tags: [RootEffect], forbids: [].}
proc helo(smtp: Smtp) {....raises: [SslError, OSError, TimeoutError, ReplyError],
                        tags: [WriteIOEffect, ReadIOEffect, TimeEffect],
                        forbids: [].}
proc newAsyncSmtp(useSsl = false; debug = false; sslContext: SslContext = nil): AsyncSmtp {.
    ...raises: [OSError, SslError, LibraryError, Exception, IOError],
    tags: [RootEffect, ReadDirEffect, ReadEnvEffect, ReadIOEffect], forbids: [].}
Создаёт новый экземпляр AsyncSmtp.
proc newSmtp(useSsl = false; debug = false; sslContext: SslContext = nil): Smtp {.
    ...raises: [OSError, SslError, LibraryError, Exception, IOError],
    tags: [RootEffect, ReadDirEffect, ReadEnvEffect, ReadIOEffect], forbids: [].}
Создаёт новый экземпляр Smtp.
proc sendMail(smtp: AsyncSmtp; fromAddr: string; toAddrs: seq[string];
              msg: string): owned(Future[void]) {....stackTrace: false,
    raises: [Exception], tags: [RootEffect], forbids: [].}

Отправляет 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], forbids: [].}
proc startTls(smtp: AsyncSmtp; sslContext: SslContext = nil): owned(
    Future[void]) {....stackTrace: false, raises: [Exception], tags: [RootEffect,
    ReadDirEffect, ReadEnvEffect, ReadIOEffect], forbids: [].}
Переводит 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], forbids: [].}

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

Spec-Zone.ru

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