Spec-Zone.ru › Go

Пакет smtp

  • import "net/smtp"
  • Обзор
  • Индекс
  • Примеры

Обзор

Пакет smtp реализует Протокол простой передачи почты, как определено в RFC 5321. Он также реализует следующие расширения:

8BITMIME  RFC 1652
AUTH      RFC 2554
STARTTLS  RFC 3207

Дополнительные расширения могут обрабатываться клиентами.

Пакет smtp заморожен и не принимает новые функции. Некоторые внешние пакеты предоставляют больше функциональности. См.:

https://godoc.org/?q=smtp

Пример

Код:

// Connect to the remote SMTP server.
c, err := smtp.Dial("mail.example.com:25")
if err != nil {
    log.Fatal(err)
}

// Set the sender and recipient first
if err := c.Mail("sender@example.org"); err != nil {
    log.Fatal(err)
}
if err := c.Rcpt("recipient@example.net"); err != nil {
    log.Fatal(err)
}

// Send the email body.
wc, err := c.Data()
if err != nil {
    log.Fatal(err)
}
_, err = fmt.Fprintf(wc, "This is the email body")
if err != nil {
    log.Fatal(err)
}
err = wc.Close()
if err != nil {
    log.Fatal(err)
}

// Send the QUIT command and close the connection.
err = c.Quit()
if err != nil {
    log.Fatal(err)
}

Индекс

  • func SendMail(addr string, a Auth, from string, to []string, msg []byte) error
  • тип Auth
  • func CRAMMD5Auth(username, secret string) Auth
  • func PlainAuth(identity, username, password, host string) Auth
  • тип Client
  • func Dial(addr string) (*Client, error)
  • func NewClient(conn net.Conn, host string) (*Client, error)
  • func (c *Client) Auth(a Auth) error
  • func (c *Client) Close() error
  • func (c *Client) Data() (io.WriteCloser, error)
  • func (c *Client) Extension(ext string) (bool, string)
  • func (c *Client) Hello(localName string) error
  • func (c *Client) Mail(from string) error
  • func (c *Client) Noop() error
  • func (c *Client) Quit() error
  • func (c *Client) Rcpt(to string) error
  • func (c *Client) Reset() error
  • func (c *Client) StartTLS(config *tls.Config) error
  • func (c *Client) TLSConnectionState() (state tls.ConnectionState, ok bool)
  • func (c *Client) Verify(addr string) error
  • тип ServerInfo

Примеры

Пакет
PlainAuth
SendMail

Файлы пакета

auth.go smtp.go

func SendMail

func SendMail(addr string, a Auth, from string, to []string, msg []byte) error

SendMail подключается к серверу по адресу addr, переключается на TLS, если возможно, аутентифицируется с помощью опционального механизма a, если возможно, а затем отправляет электронное письмо с адреса от from, адресам to, с сообщением msg. Адрес addr должен содержать порт, как в "mail.example.com:smtp".

Адреса в параметре to — это SMTP адреса RCPT.

Параметр msg должен быть email в стиле RFC 822 с заголовками сначала, пустой строкой и затем телом сообщения. Строки msg должны заканчиваться CRLF. Заголовки msg обычно должны содержать поля такие как "From", "To", "Subject" и "Cc". Отправка сообщений "Bcc" достигается включением адреса электронной почты в параметр to, но не в заголовки msg.

Функция SendMail и пакет net/smtp — это низкоуровневые механизмы и не предоставляют поддержки для подписи DKIM, вложений MIME (см. пакет mime/multipart) или другой функциональности почты. Существуют пакеты более высокого уровня вне стандартной библиотеки.

Пример

Код:

// Set up authentication information.
auth := smtp.PlainAuth("", "user@example.com", "password", "mail.example.com")

// Connect to the server, authenticate, set the sender and recipient,
// and send the email all in one step.
to := []string{"recipient@example.net"}
msg := []byte("To: recipient@example.net\r\n" +
    "Subject: discount Gophers!\r\n" +
    "\r\n" +
    "This is the email body.\r\n")
err := smtp.SendMail("mail.example.com:25", auth, "sender@example.org", to, msg)
if err != nil {
    log.Fatal(err)
}

тип Auth

Auth реализуется механизмом аутентификации SMTP.

type Auth interface {
    // Start begins an authentication with a server.
    // It returns the name of the authentication protocol
    // and optionally data to include in the initial AUTH message
    // sent to the server.
    // If it returns a non-nil error, the SMTP client aborts
    // the authentication attempt and closes the connection.
    Start(server *ServerInfo) (proto string, toServer []byte, err error)

    // Next continues the authentication. The server has just sent
    // the fromServer data. If more is true, the server expects a
    // response, which Next should return as toServer; otherwise
    // Next should return toServer == nil.
    // If Next returns a non-nil error, the SMTP client aborts
    // the authentication attempt and closes the connection.
    Next(fromServer []byte, more bool) (toServer []byte, err error)
}

func CRAMMD5Auth

func CRAMMD5Auth(username, secret string) Auth

CRAMMD5Auth возвращает Auth, реализующий механизм аутентификации CRAM-MD5, как определено в RFC 2195. Возвращаемый Auth использует заданные имя пользователя и секрет для аутентификации на сервере с помощью механизма запроса-ответа.

func PlainAuth

func PlainAuth(identity, username, password, host string) Auth

PlainAuth возвращает Auth, реализующий механизм аутентификации PLAIN, как определено в RFC 4616. Возвращаемый Auth использует заданные имя пользователя и пароль для аутентификации на хосте и выступает как идентификатор. Обычно идентификатор должен быть пустой строкой, чтобы выступать как имя пользователя.

PlainAuth будет отправлять учетные данные только если соединение использует TLS или подключено к локальному хосту. В противном случае аутентификация завершится ошибкой, без отправки учетных данных.

Пример

Код:

// hostname is used by PlainAuth to validate the TLS certificate.
hostname := "mail.example.com"
auth := smtp.PlainAuth("", "user@example.com", "password", hostname)

err := smtp.SendMail(hostname+":25", auth, from, recipients, msg)
if err != nil {
    log.Fatal(err)
}

тип Client

Client представляет собой клиентское соединение с SMTP сервером.

type Client struct {
    // Text is the textproto.Conn used by the Client. It is exported to allow for
    // clients to add extensions.
    Text *textproto.Conn
    // contains filtered or unexported fields
}

func Dial

func Dial(addr string) (*Client, error)

Dial возвращает новый Client, подключенный к SMTP серверу по адресу addr. Адрес addr должен содержать порт, как в "mail.example.com:smtp".

func NewClient

func NewClient(conn net.Conn, host string) (*Client, error)

NewClient возвращает новый Client используя существующее соединение и хост как имя сервера, которое будет использоваться при аутентификации.

func (*Client) Auth

func (c *Client) Auth(a Auth) error

Auth аутентифицирует клиента, используя предоставленный механизм аутентификации. Ошибка аутентификации закрывает соединение. Только серверы, рекламирующие расширение AUTH, поддерживают эту функцию.

func (*Client) Close 1.2

func (c *Client) Close() error

Close закрывает соединение.

func (*Client) Data

func (c *Client) Data() (io.WriteCloser, error)

Data выдает команду DATA серверу и возвращает записыватель, который может быть использован для записи заголовков и тела письма. Вызывающий должен закрыть записыватель перед вызовом других методов на c. Вызов Data должен предшествовать одному или нескольким вызовам Client.Rcpt.

func (*Client) Extension

func (c *Client) Extension(ext string) (bool, string)

Extension сообщает, поддерживает ли сервер расширение. Имя расширения не чувствительно к регистру. Если расширение поддерживается, Extension также возвращает строку, содержащую любые параметры, указанные сервером для расширения.

func (*Client) Hello 1.1

func (c *Client) Hello(localName string) error

Hello отправляет HELO или EHLO на сервер как данное имя хоста. Вызов этого метода необходим только если клиенту нужен контроль над именем хоста. В противном случае клиент представится как "localhost" автоматически. Если Hello вызывается, он должен вызываться перед любыми другими методами.

func (*Client) Mail

func (c *Client) Mail(from string) error

Mail выдает команду MAIL серверу, используя предоставленный адрес электронной почты. Если сервер поддерживает расширение 8BITMIME, Mail добавляет параметр BODY=8BITMIME. Если сервер поддерживает расширение SMTPUTF8, Mail добавляет параметр SMTPUTF8. Это инициирует транзакцию почты и следует за одним или несколькими вызовами Client.Rcpt.

func (*Client) Noop 1.10

func (c *Client) Noop() error

Noop отправляет команду NOOP на сервер. Она ничего не делает, кроме проверки того, что соединение с сервером в порядке.

func (*Client) Quit

func (c *Client) Quit() error

Quit отправляет команду QUIT и закрывает соединение с сервером.

func (*Client) Rcpt

func (c *Client) Rcpt(to string) error

Rcpt выдает команду RCPT серверу, используя предоставленный адрес электронной почты. Вызов Rcpt должен предшествовать вызову Client.Mail и может быть после вызова Client.Data или другого вызова Rcpt.

func (*Client) Reset

func (c *Client) Reset() error

Reset отправляет команду RSET на сервер, прерывая текущую транзакцию почты.

func (*Client) StartTLS

func (c *Client) StartTLS(config *tls.Config) error

StartTLS отправляет команду STARTTLS и шифрует все дальнейшее общение. Только серверы, рекламирующие расширение STARTTLS, поддерживают эту функцию.

func (*Client) TLSConnectionState 1.5

func (c *Client) TLSConnectionState() (state tls.ConnectionState, ok bool)

TLSConnectionState возвращает состояние TLS соединения клиента. Значения возвращаемых данных равны их нулевым значениям если Client.StartTLS не выполнился успешно.

func (*Client) Verify

func (c *Client) Verify(addr string) error

Verify проверяет действительность адреса электронной почты на сервере. Если Verify возвращает nil, адрес действителен. Не-nil возврат не обязательно означает недействительный адрес. Многие серверы не будут проверять адреса по соображениям безопасности.

тип ServerInfo

ServerInfo записывает информацию о SMTP сервере.

type ServerInfo struct {
    Name string   // SMTP server name
    TLS  bool     // using TLS, with valid certificate for Name
    Auth []string // advertised authentication mechanisms
}

© Google, Inc.
Licensed under the Creative Commons Attribution License 3.0.
http://golang.org/pkg/net/smtp/

Spec-Zone.ru

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