Package smtp

import "net/smtp"
Overview
Index
Examples

Overview ▾

软件包smtp实现了RFC 5321中定义的简单邮件传输协议.它还实现了以下扩展:

8BITMIME  RFC 1652
AUTH      RFC 2554
STARTTLS  RFC 3207

附加扩展名可以由客户端处理.

smtp软件包已冻结,不接受新功能. 一些外部软件包提供了更多功能. 看到:

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

Example

func SendMail

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

SendMail在地址处连接到服务器,并在可能的情况下切换到TLS,在可能的情况下使用可选机制a进行身份验证,然后使用消息msg将电子邮件从一个地址发送到另一个地址. 该地址必须包含一个端口,如" mail.example.com:smtp"中所示.

to参数中的地址是SMTP RCPT地址.

msg参数应该是RFC 822样式的电子邮件,该电子邮件的首部为标题,空行,然后为邮件正文. msg的行应以CRLF终止. msg标题通常应包含"发件人","收件人","主题"和"抄送"之类的字段. 发送"密件抄送"消息的方法是,在to参数中包括一个电子邮件地址,但在msg标头中不包括该电子邮件地址.

SendMail函数和net / smtp软件包是低级机制,不支持DKIM签名,MIME附件(请参阅mime / multipart软件包)或其他邮件功能. 更高级别的程序包存在于标准库之外.

Example

type 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. It can return proto == "" to indicate
    // that the authentication should be skipped.
    // 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返回执行RFC 2195中定义的CRAM-MD5身份验证机制的Auth.返回的Auth使用给定的用户名和密码使用质询-响应机制向服务器进行身份验证.

func PlainAuth

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

PlainAuth returns an Auth that implements the PLAIN authentication mechanism as defined in RFC 4616. The returned Auth uses the given username and password to authenticate to host and act as identity. Usually identity should be the empty string, to act as username.

仅当连接使用TLS或连接到本地主机时,PlainAuth才会发送凭据. 否则,身份验证将失败并显示错误,而不发送凭据.

Example

type 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会在addr处返回连接到SMTP服务器的新客户端. 该地址必须包含一个端口,如" 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

关闭关闭连接.

func (*Client) Data

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

数据向服务器发出DATA命令,并返回可用于写入邮件头和正文的写入器. 调用者应在c上调用任何其他方法之前关闭编写器. 在调用Data之前,必须先进行一次或多次对Rcpt的调用.

func (*Client) Extension

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

扩展报告服务器是否支持扩展. 扩展名不区分大小写. 如果支持扩展,则扩展还会返回一个字符串,其中包含服务器为扩展指定的任何参数.

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参数. 这将启动邮件事务,然后进行一个或多个Rcpt调用.

func (*Client) Noop 1.10

func (c *Client) Noop() error

Noop将NOOP命令发送到服务器. 除了检查与服务器的连接是否正常外,它什么都不做.

func (*Client) Quit

func (c *Client) Quit() error

退出发送QUIT命令并关闭与服务器的连接.

func (*Client) Rcpt

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

Rcpt使用提供的电子邮件地址向服务器发出RCPT命令. 对Rcpt的调用必须先于对Mail的调用,然后再进行数据调用或其他Rcpt调用.

func (*Client) Reset

func (c *Client) Reset() error

重置将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连接状态. 如果StartTLS不成功,则返回值为其零值.

func (*Client) Verify

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

验证检查服务器上电子邮件地址的有效性. 如果验证返回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
}

by  ICOPY.SITE