Documentation
¶
Overview ¶
包 imapserver 实现了一个 IMAP 服务器。
包 imapserver 实现了一个 IMAP 服务器。
Index ¶
- Constants
- Variables
- func MatchList(name string, delim rune, reference, pattern string) bool
- type Conn
- type ExpungeWriter
- type FetchResponseWriter
- func (w *FetchResponseWriter) Close() error
- func (w *FetchResponseWriter) WriteBinarySection(section *imap.FetchItemBinarySection, size int64) io.WriteCloser
- func (w *FetchResponseWriter) WriteBodySection(section *imap.FetchItemBodySection, size int64) io.WriteCloser
- func (w *FetchResponseWriter) WriteBodyStructure(bs imap.BodyStructure)
- func (w *FetchResponseWriter) WriteEnvelope(envelope *imap.Envelope)
- func (w *FetchResponseWriter) WriteFlags(flags []imap.Flag)
- func (w *FetchResponseWriter) WriteInternalDate(t time.Time)
- func (w *FetchResponseWriter) WriteRFC822Size(size int64)
- func (w *FetchResponseWriter) WriteUID(uid imap.UID)
- type FetchWriter
- type GreetingData
- type ListWriter
- type Logger
- type MailboxTracker
- func (t *MailboxTracker) NewSession() *SessionTracker
- func (t *MailboxTracker) QueueExpunge(seqNum uint32)
- func (t *MailboxTracker) QueueMailboxFlags(flags []imap.Flag)
- func (t *MailboxTracker) QueueMessageFlags(seqNum uint32, uid imap.UID, flags []imap.Flag, source *SessionTracker)
- func (t *MailboxTracker) QueueNumMessages(n uint32)
- type MoveWriter
- type NumKind
- type Options
- type Server
- type Session
- type SessionIMAP4rev2
- type SessionMove
- type SessionNamespace
- type SessionSASL
- type SessionTracker
- type SessionUnauthenticate
- type UpdateWriter
Constants ¶
const ( NumKindSeq = NumKind(imapwire.NumKindSeq) // 序列号类型 NumKindUID = NumKind(imapwire.NumKindUID) // UID 类型 )
Variables ¶
var ErrAuthFailed = errAuthFailed
ErrAuthFailed 在 Session.Login 认证失败时返回。
Functions ¶
Types ¶
type ExpungeWriter ¶
type ExpungeWriter struct {
// contains filtered or unexported fields
}
ExpungeWriter 写入 EXPUNGE 更新的结构体。
func (*ExpungeWriter) WriteExpunge ¶
func (w *ExpungeWriter) WriteExpunge(seqNum uint32) error
WriteExpunge 通知客户端指定序列号的邮件已被删除。 参数:
seqNum: 被删除邮件的序列号。
返回值:
返回 nil 表示成功,其他返回值表示错误信息。
type FetchResponseWriter ¶
type FetchResponseWriter struct {
// contains filtered or unexported fields
}
FetchResponseWriter 为消息写入单个 FETCH 响应。
func (*FetchResponseWriter) Close ¶
func (w *FetchResponseWriter) Close() error
Close 关闭 FETCH 消息编写器的方法。
func (*FetchResponseWriter) WriteBinarySection ¶
func (w *FetchResponseWriter) WriteBinarySection(section *imap.FetchItemBinarySection, size int64) io.WriteCloser
WriteBinarySection 写入二进制部分的方法。
section: 要编码的 imap.FetchItemBinarySection。 size: 二进制数据的大小。
func (*FetchResponseWriter) WriteBodySection ¶
func (w *FetchResponseWriter) WriteBodySection(section *imap.FetchItemBodySection, size int64) io.WriteCloser
WriteBodySection 写入邮件体部分。
返回的 io.WriteCloser 必须在写入任何更多消息数据项之前关闭。
func (*FetchResponseWriter) WriteBodyStructure ¶
func (w *FetchResponseWriter) WriteBodyStructure(bs imap.BodyStructure)
WriteBodyStructure 写入消息的主体结构(可以是 BODYSTRUCTURE 或 BODY)。
bs: 消息的主体结构,可以是不同类型的主体结构。
func (*FetchResponseWriter) WriteEnvelope ¶
func (w *FetchResponseWriter) WriteEnvelope(envelope *imap.Envelope)
WriteEnvelope 写入消息的信封。
envelope: 要编码的 imap.Envelope,包含邮件的信封信息。
func (*FetchResponseWriter) WriteFlags ¶
func (w *FetchResponseWriter) WriteFlags(flags []imap.Flag)
WriteFlags 写入消息的标志。
func (*FetchResponseWriter) WriteInternalDate ¶
func (w *FetchResponseWriter) WriteInternalDate(t time.Time)
WriteInternalDate 写入消息的内部日期。
func (*FetchResponseWriter) WriteRFC822Size ¶
func (w *FetchResponseWriter) WriteRFC822Size(size int64)
WriteRFC822Size 写入消息的完整大小。
func (*FetchResponseWriter) WriteUID ¶
func (w *FetchResponseWriter) WriteUID(uid imap.UID)
WriteUID 写入消息的 UID。
type FetchWriter ¶
type FetchWriter struct {
// contains filtered or unexported fields
}
FetchWriter 写入 FETCH 响应。
func (*FetchWriter) CreateMessage ¶
func (cmd *FetchWriter) CreateMessage(seqNum uint32) *FetchResponseWriter
CreateMessage 为消息写入 FETCH 响应。
FetchResponseWriter.Close 必须在写入任何更多消息数据项之前调用。
type GreetingData ¶
type GreetingData struct {
PreAuth bool // 是否预先认证
}
GreetingData 是与 IMAP 问候相关的数据。
type ListWriter ¶
type ListWriter struct {
// contains filtered or unexported fields
}
ListWriter 写入 LIST 响应。
func (*ListWriter) WriteList ¶
func (w *ListWriter) WriteList(data *imap.ListData) error
WriteList 写入单个邮箱的 LIST 响应。 参数:
data - 包含邮箱和属性数据的结构体。
返回值:
处理过程中的错误,如果没有错误返回 nil。
type Logger ¶
type Logger interface {
Printf(format string, args ...interface{})
}
Logger 是一个记录错误信息的工具。
type MailboxTracker ¶
type MailboxTracker struct {
// contains filtered or unexported fields
}
MailboxTracker 用于跟踪邮箱的状态。
一个邮箱可以有多个会话监听更新。每个会话都有自己对邮箱的视图, 因为 IMAP 客户端异步接收邮箱更新。
func NewMailboxTracker ¶
func NewMailboxTracker(numMessages uint32) *MailboxTracker
NewMailboxTracker 创建一个新的邮箱跟踪器。
func (*MailboxTracker) NewSession ¶
func (t *MailboxTracker) NewSession() *SessionTracker
NewSession 创建一个新的会话跟踪器,用于该邮箱。
调用者在完成会话后必须调用 SessionTracker.Close。
func (*MailboxTracker) QueueExpunge ¶
func (t *MailboxTracker) QueueExpunge(seqNum uint32)
QueueExpunge 将新的 EXPUNGE 更新排入队列。
func (*MailboxTracker) QueueMailboxFlags ¶
func (t *MailboxTracker) QueueMailboxFlags(flags []imap.Flag)
QueueMailboxFlags 将新的 FLAGS 更新排入队列。
func (*MailboxTracker) QueueMessageFlags ¶
func (t *MailboxTracker) QueueMessageFlags(seqNum uint32, uid imap.UID, flags []imap.Flag, source *SessionTracker)
QueueMessageFlags 将新的 FETCH FLAGS 更新排入队列。
如果 source 不为 nil,则该更新不会被分发给它。
func (*MailboxTracker) QueueNumMessages ¶
func (t *MailboxTracker) QueueNumMessages(n uint32)
QueueNumMessages 将新的 EXISTS 更新排入队列。
type MoveWriter ¶
type MoveWriter struct {
// contains filtered or unexported fields
}
MoveWriter 用于写入 MOVE 命令的响应。
服务器必须先调用 WriteCopyData 一次,然后可以调用 WriteExpunge 任意次数。
func (*MoveWriter) WriteCopyData ¶
func (w *MoveWriter) WriteCopyData(data *imap.CopyData) error
WriteCopyData 写入未标记的 COPYUID 响应以处理 MOVE 命令。 参数:
data - 复制数据
返回:错误信息,如果有的话
func (*MoveWriter) WriteExpunge ¶
func (w *MoveWriter) WriteExpunge(seqNum uint32) error
WriteExpunge 写入 EXPUNGE 响应以处理 MOVE 命令。 参数:
seqNum - 邮件的序列号
返回:错误信息,如果有的话
type Options ¶
type Options struct { // NewSession 在客户端连接时被调用。 NewSession func(*Conn) (Session, *GreetingData, error) // 支持的能力。如果为 nil,则只会广告 IMAP4rev1。该集合必须至少包含 IMAP4rev1 或 IMAP4rev2。 // // 以下能力是 IMAP4rev2 的一部分,需要由仅支持 IMAP4rev1 的服务器显式启用: // // - NAMESPACE // - UIDPLUS // - ESEARCH // - LIST-EXTENDED // - LIST-STATUS // - MOVE // - STATUS=SIZE Caps imap.CapSet // Logger 是用于打印错误消息的记录器。如果为 nil,则使用 log.Default。 Logger Logger // TLSConfig 是用于 STARTTLS 的 TLS 配置。如果为 nil,则禁用 STARTTLS。 TLSConfig *tls.Config // InsecureAuth 允许客户端在没有 TLS 的情况下进行身份验证。在这种模式下,服务器容易受到中间人攻击。 InsecureAuth bool // 原始输入和输出数据将写入此写入器(如果有的话)。 // 请注意,这可能包含敏感信息,例如身份验证期间使用的凭据。 DebugWriter io.Writer }
Options 包含服务器选项。
唯一必需的字段是 NewSession。
type Server ¶
type Server struct {
// contains filtered or unexported fields
}
Server 是一个 IMAP 服务器。
func (*Server) Close ¶
Close 立即关闭所有活动的监听器和连接。
Close 返回关闭服务器底层监听器时返回的任何错误。
一旦对服务器调用 Close,就不能再重用;对 Serve 等方法的未来调用将返回错误。
func (*Server) ListenAndServe ¶
ListenAndServe 在 TCP 网络地址 addr 上监听,然后调用 Serve。
如果 addr 为空,则使用 ":143"。
func (*Server) ListenAndServeTLS ¶
ListenAndServeTLS 在 TCP 网络地址 addr 上监听,然后调用 Serve 以处理传入的 TLS 连接。
在 Options.TLSConfig 中设置的 TLS 配置将被使用。如果 addr 为空, 则使用 ":993"。
type Session ¶
type Session interface { Close() error // 关闭会话 // 未认证状态 Login(username, password string) error // 登录方法 // 认证状态 Select(mailbox string, options *imap.SelectOptions) (*imap.SelectData, error) // 选择邮箱 Create(mailbox string, options *imap.CreateOptions) error // 创建邮箱 Delete(mailbox string) error // 删除邮箱 Rename(mailbox, newName string) error // 重命名邮箱 Subscribe(mailbox string) error // 订阅邮箱 Unsubscribe(mailbox string) error // 取消订阅邮箱 List(w *ListWriter, ref string, patterns []string, options *imap.ListOptions) error // 列出邮箱 Status(mailbox string, options *imap.StatusOptions) (*imap.StatusData, error) // 获取邮箱状态 Append(mailbox string, r imap.LiteralReader, options *imap.AppendOptions) (*imap.AppendData, error) // 追加邮件到邮箱 Poll(w *UpdateWriter, allowExpunge bool) error // 获取更新 Idle(w *UpdateWriter, stop <-chan struct{}) error // 空闲状态 // 选择状态 Unselect() error // 取消选择 Expunge(w *ExpungeWriter, uids *imap.UIDSet) error // 清除邮件 Search(kind NumKind, criteria *imap.SearchCriteria, options *imap.SearchOptions) (*imap.SearchData, error) // 搜索邮件 Fetch(w *FetchWriter, numSet imap.NumSet, options *imap.FetchOptions) error // 获取邮件 Store(w *FetchWriter, numSet imap.NumSet, flags *imap.StoreFlags, options *imap.StoreOptions) error // 存储邮件 Copy(numSet imap.NumSet, dest string) (*imap.CopyData, error) // 复制邮件 }
Session 是一个 IMAP 会话接口。
type SessionIMAP4rev2 ¶
type SessionIMAP4rev2 interface { Session SessionNamespace SessionMove }
SessionIMAP4rev2 是一个支持 IMAP4rev2 的 IMAP 会话。
type SessionMove ¶
type SessionMove interface { Session // 选择状态 Move(w *MoveWriter, numSet imap.NumSet, dest string) error // 移动邮件 }
SessionMove 是一个支持 MOVE 的 IMAP 会话。
type SessionNamespace ¶
type SessionNamespace interface { Session // 认证状态 Namespace() (*imap.NamespaceData, error) // 获取命名空间 }
SessionNamespace 是一个支持 NAMESPACE 的 IMAP 会话。
type SessionSASL ¶
type SessionSASL interface { Session AuthenticateMechanisms() []string // 获取支持的认证机制 Authenticate(mech string) (sasl.Server, error) // 执行认证 }
SessionSASL 是一个支持其自己 SASL 认证机制的 IMAP 会话。
type SessionTracker ¶
type SessionTracker struct {
// contains filtered or unexported fields
}
SessionTracker 跟踪 IMAP 客户端的邮箱状态。
func (*SessionTracker) DecodeSeqNum ¶
func (t *SessionTracker) DecodeSeqNum(seqNum uint32) uint32
DecodeSeqNum 将客户端视图的邮件序列号转换为服务器视图的序列号。
如果从服务器的角度看邮件不存在,则返回零。
func (*SessionTracker) EncodeSeqNum ¶
func (t *SessionTracker) EncodeSeqNum(seqNum uint32) uint32
EncodeSeqNum 将服务器视图的邮件序列号转换为客户端视图的序列号。
如果从客户端的角度看邮件不存在,则返回零。
func (*SessionTracker) Idle ¶
func (t *SessionTracker) Idle(w *UpdateWriter, stop <-chan struct{}) error
Idle 持续写入邮箱更新。
当停止通道关闭时,返回。
Idle 不能从两个独立的 goroutine 同时调用。
func (*SessionTracker) Poll ¶
func (t *SessionTracker) Poll(w *UpdateWriter, allowExpunge bool) error
Poll 从会话中取消排队的邮箱更新。
type SessionUnauthenticate ¶
SessionUnauthenticate 是一个支持 UNAUTHENTICATE 的 IMAP 会话。
type UpdateWriter ¶
type UpdateWriter struct {
// contains filtered or unexported fields
}
UpdateWriter 用于写入状态更新。
func (*UpdateWriter) WriteExpunge ¶
func (w *UpdateWriter) WriteExpunge(seqNum uint32) error
WriteExpunge 写入EXPUNGE响应。
func (*UpdateWriter) WriteMailboxFlags ¶
func (w *UpdateWriter) WriteMailboxFlags(flags []imap.Flag) error
WriteMailboxFlags 写入FLAGS响应。
func (*UpdateWriter) WriteMessageFlags ¶
func (w *UpdateWriter) WriteMessageFlags(seqNum uint32, uid imap.UID, flags []imap.Flag) error
WriteMessageFlags 写入FETCH响应带FLAGS。
func (*UpdateWriter) WriteNumMessages ¶
func (w *UpdateWriter) WriteNumMessages(n uint32) error
WriteNumMessages 写入EXISTS响应。