Spec-Zone.ru › Go

Пакет smtp

  • import "net/smtp"
  • Обзор
  • Указатель
  • Примеры

Обзор

Пакет smtp реализует простой протокол передачи почты (Simple Mail Transfer Protocol), определённый в 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
  • type Auth
  • func CRAMMD5Auth(username, secret string) Auth
  • func PlainAuth(identity, username, password, host string) Auth
  • type 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
  • type 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 должен представлять собой электронное письмо в формате 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)
}

type 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 использует указанные имя пользователя и пароль для аутентификации на host и выступает в роли identity. Обычно identity должно быть пустой строкой, чтобы использовать имя пользователя.

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

Пример

Код:

// 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)
}

type 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, использующий существующее соединение и имя host в качестве имени сервера для аутентификации.

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, адрес действителен. Возвращаемое ненулевое значение не обязательно указывает на недействительный адрес. Многие серверы не проверяют адреса по соображениям безопасности.

type 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