imap

package module
v0.0.0-...-781c92a Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 22, 2024 License: MIT Imports: 8 Imported by: 0

README

go-imap

Go 参考

此库是只修改了注释为中文方便理解,使用得ai翻译 原地址:https://github.com/emersion/go-imap

一个用于 Go 的 IMAP4rev2 库。

注意 这是 go-imap v2 的 README。这个新版本仍在开发中。 有关 go-imap v1 的信息,请参见 v1 分支

使用方法

要将 go-imap 添加到您的项目中,请运行:

go get github.com/luhaoyun888/go-imap-cn

该模块的文档和示例可在以下位置找到:

许可证

MIT

Documentation

Overview

Package imap 实现 IMAP4rev2。

IMAP4rev2 在 RFC 9051 中定义。

本包包含客户端和服务器通用的类型和函数。请参阅 imapclient 和 imapserver 子包。

Index

Constants

View Source
const (
	// 标准权限
	RightLookup     = Right('l') // 邮箱对 LIST/LSUB 命令可见
	RightRead       = Right('r') // 选择邮箱,执行 CHECK, FETCH, PARTIAL, SEARCH, COPY 从邮箱中
	RightSeen       = Right('s') // 跨会话保持已读/未读信息 (STORE SEEN 标志)
	RightWrite      = Right('w') // 除 SEEN 和 DELETED 之外的其他 STORE 标志
	RightInsert     = Right('i') // 执行 APPEND,COPY 到邮箱
	RightPost       = Right('p') // 发送邮件到邮箱的提交地址,IMAP4 本身不强制执行
	RightCreate     = Right('c') // 在任何实现定义的层次结构中创建新的子邮箱
	RightDelete     = Right('d') // STORE DELETED 标志,执行 EXPUNGE
	RightAdminister = Right('a') // 执行 SETACL
)
View Source
const (
	RightModificationReplace = RightModification(0)   // 替换权限集
	RightModificationAdd     = RightModification('+') // 增加权限
	RightModificationRemove  = RightModification('-') // 删除权限
)
View Source
const RightsIdentifierAnyone = RightsIdentifier("anyone")

RightsIdentifierAnyone 是通用身份 (匹配所有人).

Variables

View Source
var RightSetAll = RightSet("lrswipcda")

RightSetAll 包含所有标准权限.

Functions

func IsSearchRes

func IsSearchRes(numSet NumSet) bool

IsSearchRes 方法检查序号集是否引用了上次 SEARCH 结果。请参阅 SearchRes。

参数: - numSet: 要检查的序号集。

返回: 如果是上次搜索结果的引用,返回 true;否则返回 false。

Types

type Address

type Address struct {
	Name    string // 名称
	Mailbox string // 邮箱名
	Host    string // 主机
}

Address 表示消息的发送者或接收者。

func (*Address) Addr

func (addr *Address) Addr() string

Addr 返回邮件地址,格式为 "foo@example.org"。

如果地址是组的开始或结束,则返回空字符串。

func (*Address) IsGroupEnd

func (addr *Address) IsGroupEnd() bool

IsGroupEnd 返回如果该地址是组的结束标记则为真。

func (*Address) IsGroupStart

func (addr *Address) IsGroupStart() bool

IsGroupStart 返回如果该地址是组的开始标记则为真。

在这种情况下,Mailbox 包含组名短语。

type AppendData

type AppendData struct {
	UID         UID    // 消息的唯一标识符,要求支持 UIDPLUS 或 IMAP4rev2
	UIDValidity uint32 // UID 的有效性,表示 UID 可能会在此有效性范围内变化
}

AppendData 是 APPEND 命令返回的数据。

type AppendOptions

type AppendOptions struct {
	Flags []Flag    // 消息的标志,可以是多个 Flag 的组合
	Time  time.Time // 指定的时间,用于设置消息的时间戳
}

AppendOptions 包含 APPEND 命令的选项。

type BodyStructure

type BodyStructure interface {
	// MediaType 返回该体结构的 MIME 类型,例如 "text/plain"。
	MediaType() string
	// Walk 遍历体结构树,对每个部分调用 f,
	// 包括 bs 本身。部分按 DFS 前序访问。
	Walk(f BodyStructureWalkFunc)
	// Disposition 返回体结构的处置方式(如果可用)。
	Disposition() *BodyStructureDisposition
	// contains filtered or unexported methods
}

BodyStructure 描述消息的体结构。

BodyStructure 值可以是 *BodyStructureSinglePart 或 *BodyStructureMultiPart。

type BodyStructureDisposition

type BodyStructureDisposition struct {
	Value  string            // 处置方式
	Params map[string]string // 参数
}

BodyStructureDisposition 描述部分的内容处置(在 Content-Disposition 头字段中指定)。

type BodyStructureMessageRFC822

type BodyStructureMessageRFC822 struct {
	Envelope      *Envelope     // 消息信封
	BodyStructure BodyStructure // 消息体结构
	NumLines      int64         // 行数
}

BodyStructureMessageRFC822 包含针对 BodyStructureSinglePart 的 RFC 822 部分的元数据。

type BodyStructureMultiPart

type BodyStructureMultiPart struct {
	Children []BodyStructure // 子部分
	Subtype  string          // 子类型

	Extended *BodyStructureMultiPartExt // 扩展数据
}

BodyStructureMultiPart 是具有多个部分的体结构。

func (*BodyStructureMultiPart) Disposition

func (*BodyStructureMultiPart) MediaType

func (bs *BodyStructureMultiPart) MediaType() string

func (*BodyStructureMultiPart) Walk

type BodyStructureMultiPartExt

type BodyStructureMultiPartExt struct {
	Params      map[string]string         // 参数
	Disposition *BodyStructureDisposition // 处置方式
	Language    []string                  // 语言
	Location    string                    // 位置
}

BodyStructureMultiPartExt 包含针对 BodyStructureMultiPart 的扩展体结构数据。

type BodyStructureSinglePart

type BodyStructureSinglePart struct {
	Type, Subtype string            // MIME 类型和子类型
	Params        map[string]string // 参数
	ID            string            // ID
	Description   string            // 描述
	Encoding      string            // 编码
	Size          uint32            // 大小

	MessageRFC822 *BodyStructureMessageRFC822 // 仅适用于 "message/rfc822"
	Text          *BodyStructureText          // 仅适用于 "text/*"
	Extended      *BodyStructureSinglePartExt // 扩展数据
}

BodyStructureSinglePart 是具有单个部分的体结构。

func (*BodyStructureSinglePart) Disposition

func (*BodyStructureSinglePart) Filename

func (bs *BodyStructureSinglePart) Filename() string

Filename 解码体结构的文件名(如果有的话)。

func (*BodyStructureSinglePart) MediaType

func (bs *BodyStructureSinglePart) MediaType() string

func (*BodyStructureSinglePart) Walk

type BodyStructureSinglePartExt

type BodyStructureSinglePartExt struct {
	Disposition *BodyStructureDisposition // 处置方式
	Language    []string                  // 语言
	Location    string                    // 位置
}

BodyStructureSinglePartExt 包含针对 BodyStructureSinglePart 的扩展体结构数据。

type BodyStructureText

type BodyStructureText struct {
	NumLines int64 // 行数
}

BodyStructureText 包含针对 BodyStructureSinglePart 的文本部分的元数据。

type BodyStructureWalkFunc

type BodyStructureWalkFunc func(path []int, part BodyStructure) (walkChildren bool)

BodyStructureWalkFunc 是一个函数,用于访问 BodyStructure.Walk 遍历的每个体结构。

path 参数包含 IMAP 部分路径。

函数应返回 true 以访问所有部分的子项,或 false 以跳过它们。

type Cap

type Cap string

Cap 表示 IMAP 的能力。

const (
	CapIMAP4rev1 Cap = "IMAP4rev1" // RFC 3501
	CapIMAP4rev2 Cap = "IMAP4rev2" // RFC 9051

	CapAuthPlain Cap = "AUTH=PLAIN"

	CapStartTLS      Cap = "STARTTLS"      // 支持 STARTTLS
	CapLoginDisabled Cap = "LOGINDISABLED" // 登录被禁用

	// 在 IMAP4rev2 中折叠
	CapNamespace    Cap = "NAMESPACE"     // 支持 NAMESPACE,RFC 2342
	CapUnselect     Cap = "UNSELECT"      // 支持 UNSELECT,RFC 3691
	CapUIDPlus      Cap = "UIDPLUS"       // 支持 UIDPLUS,RFC 4315
	CapESearch      Cap = "ESEARCH"       // 支持 ESEARCH,RFC 4731
	CapSearchRes    Cap = "SEARCHRES"     // 支持 SEARCHRES,RFC 5182
	CapEnable       Cap = "ENABLE"        // 支持 ENABLE,RFC 5161
	CapIdle         Cap = "IDLE"          // 支持 IDLE,RFC 2177
	CapSASLIR       Cap = "SASL-IR"       // 支持 SASL-IR,RFC 4959
	CapListExtended Cap = "LIST-EXTENDED" // 支持 LIST-EXTENDED,RFC 5258
	CapListStatus   Cap = "LIST-STATUS"   // 支持 LIST-STATUS,RFC 5819
	CapMove         Cap = "MOVE"          // 支持 MOVE,RFC 6851
	CapLiteralMinus Cap = "LITERAL-"      // 支持 LITERAL-,RFC 7888
	CapStatusSize   Cap = "STATUS=SIZE"   // 支持 STATUS=SIZE,RFC 8438

	CapACL              Cap = "ACL"                // 支持 ACL,RFC 4314
	CapAppendLimit      Cap = "APPENDLIMIT"        // 支持 APPENDLIMIT,RFC 7889
	CapBinary           Cap = "BINARY"             // 支持 BINARY,RFC 3516
	CapCatenate         Cap = "CATENATE"           // 支持 CATENATE,RFC 4469
	CapChildren         Cap = "CHILDREN"           // 支持 CHILDREN,RFC 3348
	CapCondStore        Cap = "CONDSTORE"          // 支持 CONDSTORE,RFC 7162
	CapConvert          Cap = "CONVERT"            // 支持 CONVERT,RFC 5259
	CapCreateSpecialUse Cap = "CREATE-SPECIAL-USE" // 支持 CREATE-SPECIAL-USE,RFC 6154
	CapESort            Cap = "ESORT"              // 支持 ESORT,RFC 5267
	CapFilters          Cap = "FILTERS"            // 支持 FILTERS,RFC 5466
	CapID               Cap = "ID"                 // 支持 ID,RFC 2971
	CapLanguage         Cap = "LANGUAGE"           // 支持 LANGUAGE,RFC 5255
	CapListMyRights     Cap = "LIST-MYRIGHTS"      // 支持 LIST-MYRIGHTS,RFC 8440
	CapLiteralPlus      Cap = "LITERAL+"           // 支持 LITERAL+,RFC 7888
	CapLoginReferrals   Cap = "LOGIN-REFERRALS"    // 支持 LOGIN-REFERRALS,RFC 2221
	CapMailboxReferrals Cap = "MAILBOX-REFERRALS"  // 支持 MAILBOX-REFERRALS,RFC 2193
	CapMetadata         Cap = "METADATA"           // 支持 METADATA,RFC 5464
	CapMetadataServer   Cap = "METADATA-SERVER"    // 支持 METADATA-SERVER,RFC 5464
	CapMultiAppend      Cap = "MULTIAPPEND"        // 支持 MULTIAPPEND,RFC 3502
	CapMultiSearch      Cap = "MULTISEARCH"        // 支持 MULTISEARCH,RFC 7377
	CapNotify           Cap = "NOTIFY"             // 支持 NOTIFY,RFC 5465
	CapObjectID         Cap = "OBJECTID"           // 支持 OBJECTID,RFC 8474
	CapPreview          Cap = "PREVIEW"            // 支持 PREVIEW,RFC 8970
	CapQResync          Cap = "QRESYNC"            // 支持 QRESYNC,RFC 7162
	CapQuota            Cap = "QUOTA"              // 支持 QUOTA,RFC 9208
	CapQuotaSet         Cap = "QUOTASET"           // 支持 QUOTASET,RFC 9208
	CapReplace          Cap = "REPLACE"            // 支持 REPLACE,RFC 8508
	CapSaveDate         Cap = "SAVEDATE"           // 支持 SAVEDATE,RFC 8514
	CapSearchFuzzy      Cap = "SEARCH=FUZZY"       // 支持 SEARCH=FUZZY,RFC 6203
	CapSort             Cap = "SORT"               // 支持 SORT,RFC 5256
	CapSortDisplay      Cap = "SORT=DISPLAY"       // 支持 SORT=DISPLAY,RFC 5957
	CapSpecialUse       Cap = "SPECIAL-USE"        // 支持 SPECIAL-USE,RFC 6154
	CapUnauthenticate   Cap = "UNAUTHENTICATE"     // 支持 UNAUTHENTICATE,RFC 8437
	CapURLPartial       Cap = "URL-PARTIAL"        // 支持 URL-PARTIAL,RFC 5550
	CapURLAuth          Cap = "URLAUTH"            // 支持 URLAUTH,RFC 4467
	CapUTF8Accept       Cap = "UTF8=ACCEPT"        // 支持 UTF8=ACCEPT,RFC 6855
	CapUTF8Only         Cap = "UTF8=ONLY"          // 支持 UTF8=ONLY,RFC 6855
	CapWithin           Cap = "WITHIN"             // 支持 WITHIN,RFC 5032
	CapUIDOnly          Cap = "UIDONLY"            // 支持 UIDONLY,RFC 9586
	CapListMetadata     Cap = "LIST-METADATA"      // 支持 LIST-METADATA,RFC 9590
	CapInProgress       Cap = "INPROGRESS"         // 支持 INPROGRESS,RFC 9585
)

注册的能力。

参见:https://www.iana.org/assignments/imap-capabilities/

func AuthCap

func AuthCap(mechanism string) Cap

AuthCap 返回 SASL 身份验证机制的能力名称。

type CapSet

type CapSet map[Cap]struct{}

CapSet 是能力集合的类型。

func (CapSet) AppendLimit

func (set CapSet) AppendLimit() (limit *uint32, ok bool)

AppendLimit 检查 APPENDLIMIT 能力。

如果服务器支持 APPENDLIMIT,则 ok 为 true。如果服务器没有对所有邮箱的相同上传限制,则 limit 为 nil, 每个邮箱的限制必须通过 STATUS 查询。

func (CapSet) AuthMechanisms

func (set CapSet) AuthMechanisms() []string

AuthMechanisms 返回支持的 SASL 身份验证机制的列表。

func (CapSet) Has

func (set CapSet) Has(c Cap) bool

Has 检查能力集合是否支持某个能力。

一些能力由其他能力隐含,因此即使该能力不在集合中,Has 也可能返回 true。

func (CapSet) QuotaResourceTypes

func (set CapSet) QuotaResourceTypes() []QuotaResourceType

QuotaResourceTypes 返回支持的 QUOTA 资源类型的列表。

func (CapSet) ThreadAlgorithms

func (set CapSet) ThreadAlgorithms() []ThreadAlgorithm

ThreadAlgorithms 返回支持的线程算法的列表。

type ConnState

type ConnState int

ConnState 描述连接状态。

请参见 RFC 9051 第 3 节。

const (
	ConnStateNone             ConnState = iota // 无状态
	ConnStateNotAuthenticated                  // 未认证
	ConnStateAuthenticated                     // 已认证
	ConnStateSelected                          // 已选择
	ConnStateLogout                            // 登出
)

func (ConnState) String

func (state ConnState) String() string

String 实现 fmt.Stringer 接口。

type CopyData

type CopyData struct {
	UIDValidity uint32 // UID 的有效性,要求支持 UIDPLUS 或 IMAP4rev2
	SourceUIDs  UIDSet // 源 UID 集,表示被复制邮件的 UID 集合
	DestUIDs    UIDSet // 目标 UID 集,表示复制后邮件在目标邮箱中的 UID 集合
}

CopyData 是 COPY 命令返回的数据。

type CreateOptions

type CreateOptions struct {
	SpecialUse []MailboxAttr // 特殊用途属性,要求支持 CREATE-SPECIAL-USE
}

CreateOptions 包含 CREATE 命令的选项。

type Envelope

type Envelope struct {
	Date      time.Time // 消息日期
	Subject   string    // 主题
	From      []Address // 发件人地址
	Sender    []Address // 发送者地址
	ReplyTo   []Address // 回复地址
	To        []Address // 收件人地址
	Cc        []Address // 抄送地址
	Bcc       []Address // 密送地址
	InReplyTo []string  // 引用的消息 ID
	MessageID string    // 消息 ID
}

Envelope 是消息的信封结构。

主题和地址采用 UTF-8 格式(即非编码形式)。In-Reply-To 和 Message-ID 的值包含没有尖括号的消息标识符。

type Error

type Error StatusResponse

Error 是由状态响应引起的 IMAP 错误。

func (*Error) Error

func (err *Error) Error() string

Error 实现了 error 接口。

type FetchItemBinarySection

type FetchItemBinarySection struct {
	Part    []int           // 指定部分的索引
	Partial *SectionPartial // 指定部分内容的偏移和大小
	Peek    bool            // 是否使用 Peek 模式
}

FetchItemBinarySection 是一个 FETCH BINARY[] 数据项。

type FetchItemBinarySectionSize

type FetchItemBinarySectionSize struct {
	Part []int // 指定部分的索引
}

FetchItemBinarySectionSize 是一个 FETCH BINARY.SIZE[] 数据项。

type FetchItemBodySection

type FetchItemBodySection struct {
	Specifier       PartSpecifier   // 指定获取的部分类型
	Part            []int           // 指定部分的索引
	HeaderFields    []string        // 指定要获取的头部字段
	HeaderFieldsNot []string        // 指定不获取的头部字段
	Partial         *SectionPartial // 指定部分内容的偏移和大小
	Peek            bool            // 是否使用 Peek 模式
}

FetchItemBodySection 是一个 FETCH BODY[] 数据项。

要获取消息的完整体,使用零的 FetchItemBodySection: imap.FetchItemBodySection{}

要仅获取特定部分,使用 Part 字段: imap.FetchItemBodySection{Part: []int{1, 2, 3}}

要仅获取消息的头部,使用 Specifier 字段: imap.FetchItemBodySection{Specifier: imap.PartSpecifierHeader}

type FetchItemBodyStructure

type FetchItemBodyStructure struct {
	Extended bool // 是否获取扩展信息
}

FetchItemBodyStructure 包含用于体结构获取的 FETCH 选项。

type FetchOptions

type FetchOptions struct {
	// 要获取的字段
	BodyStructure     *FetchItemBodyStructure       // 消息的体结构
	Envelope          bool                          // 是否获取信封信息
	Flags             bool                          // 是否获取标志
	InternalDate      bool                          // 是否获取内部日期
	RFC822Size        bool                          // 是否获取 RFC822 大小
	UID               bool                          // 是否获取 UID
	BodySection       []*FetchItemBodySection       // 体部分
	BinarySection     []*FetchItemBinarySection     // 二进制部分(要求支持 IMAP4rev2 或 BINARY)
	BinarySectionSize []*FetchItemBinarySectionSize // 二进制部分大小(要求支持 IMAP4rev2 或 BINARY)
	ModSeq            bool                          // 是否获取修改序列(要求支持 CONDSTORE)

	ChangedSince uint64 // 从某个修改时间点后获取
}

FetchOptions 包含 FETCH 命令的选项。

type Flag

type Flag string

Flag 是消息标志。

消息标志在 RFC 9051 第 2.3.2 节中定义。

const (
	// 系统标志
	FlagSeen     Flag = "\\Seen"     // 已读
	FlagAnswered Flag = "\\Answered" // 已回复
	FlagFlagged  Flag = "\\Flagged"  // 已标记
	FlagDeleted  Flag = "\\Deleted"  // 已删除
	FlagDraft    Flag = "\\Draft"    // 草稿

	// 常用标志
	FlagForwarded Flag = "$Forwarded" // 已转发
	FlagMDNSent   Flag = "$MDNSent"   // 消息处理通知已发送
	FlagJunk      Flag = "$Junk"      // 垃圾
	FlagNotJunk   Flag = "$NotJunk"   // 非垃圾
	FlagPhishing  Flag = "$Phishing"  // 钓鱼
	FlagImportant Flag = "$Important" // 重要(RFC 8457

	// 永久标志
	FlagWildcard Flag = "\\*" // 通配符
)

type IDData

type IDData struct {
	Name        string // 客户端名称
	Version     string // 客户端版本
	OS          string // 操作系统名称
	OSVersion   string // 操作系统版本
	Vendor      string // 客户端供应商
	SupportURL  string // 支持链接
	Address     string // 客户端地址
	Date        string // 日期
	Command     string // 执行的命令
	Arguments   string // 命令参数
	Environment string // 环境信息
}

IDData 表示客户端身份信息。

type ListData

type ListData struct {
	Attrs   []MailboxAttr // 邮箱属性的列表
	Delim   rune          // 用于分隔邮箱名称的分隔符
	Mailbox string        // 邮箱的名称

	// 扩展数据
	ChildInfo *ListDataChildInfo // 子邮箱信息
	OldName   string             // 旧的邮箱名称
	Status    *StatusData        // 状态数据
}

ListData 是 LIST 命令返回的邮箱数据。

type ListDataChildInfo

type ListDataChildInfo struct {
	Subscribed bool // 是否已订阅子邮箱
}

ListDataChildInfo 是关于子邮箱的信息。

type ListOptions

type ListOptions struct {
	SelectSubscribed     bool // 是否选择已订阅的邮箱
	SelectRemote         bool // 是否选择远程邮箱
	SelectRecursiveMatch bool // 是否选择递归匹配,需要设置 SelectSubscribed
	SelectSpecialUse     bool // 是否选择特殊用途邮箱,需要支持 SPECIAL-USE

	ReturnSubscribed bool           // 是否返回已订阅的邮箱
	ReturnChildren   bool           // 是否返回子邮箱
	ReturnStatus     *StatusOptions // 返回状态选项,要求 IMAP4rev2 或 LIST-STATUS
	ReturnSpecialUse bool           // 是否返回特殊用途邮箱,需要支持 SPECIAL-USE
}

ListOptions 包含 LIST 命令的选项。

type LiteralReader

type LiteralReader interface {
	io.Reader    // 实现 io.Reader 接口
	Size() int64 // 返回字面量的大小
}

LiteralReader 是 IMAP 字面量的读取器。

type MailboxAttr

type MailboxAttr string

MailboxAttr 是邮箱属性。

邮箱属性在 RFC 9051 第 7.3.1 节中定义。

const (
	// 基础属性
	MailboxAttrNonExistent   MailboxAttr = "\\NonExistent"   // 不存在
	MailboxAttrNoInferiors   MailboxAttr = "\\Noinferiors"   // 无下级
	MailboxAttrNoSelect      MailboxAttr = "\\Noselect"      // 不可选择
	MailboxAttrHasChildren   MailboxAttr = "\\HasChildren"   // 有子项
	MailboxAttrHasNoChildren MailboxAttr = "\\HasNoChildren" // 无子项
	MailboxAttrMarked        MailboxAttr = "\\Marked"        // 已标记
	MailboxAttrUnmarked      MailboxAttr = "\\Unmarked"      // 未标记
	MailboxAttrSubscribed    MailboxAttr = "\\Subscribed"    // 已订阅
	MailboxAttrRemote        MailboxAttr = "\\Remote"        // 远程

	// 角色(即 "特殊用途")属性
	MailboxAttrAll       MailboxAttr = "\\All"       // 全部
	MailboxAttrArchive   MailboxAttr = "\\Archive"   // 档案
	MailboxAttrDrafts    MailboxAttr = "\\Drafts"    // 草稿
	MailboxAttrFlagged   MailboxAttr = "\\Flagged"   // 标记
	MailboxAttrJunk      MailboxAttr = "\\Junk"      // 垃圾
	MailboxAttrSent      MailboxAttr = "\\Sent"      // 已发送
	MailboxAttrTrash     MailboxAttr = "\\Trash"     // 垃圾箱
	MailboxAttrImportant MailboxAttr = "\\Important" // 重要(RFC 8457
)

type NamespaceData

type NamespaceData struct {
	Personal []NamespaceDescriptor // 用户个人命名空间的描述
	Other    []NamespaceDescriptor // 其他命名空间的描述
	Shared   []NamespaceDescriptor // 共享命名空间的描述
}

NamespaceData 是 NAMESPACE 命令返回的数据。

type NamespaceDescriptor

type NamespaceDescriptor struct {
	Prefix string // 命名空间的前缀
	Delim  rune   // 命名空间的分隔符
}

NamespaceDescriptor 描述一个命名空间。

type NumSet

type NumSet interface {
	// String 返回消息编号集的 IMAP 表示。
	String() string
	// Dynamic 返回如果集合包含 "*" 或 "n:*" 范围,或者集合表示特殊的 SEARCHRES 标记时返回 true。
	Dynamic() bool
	// contains filtered or unexported methods
}

NumSet 是一组标识消息的数字。NumSet 可以是 SeqSet 或 UIDSet。

type PartSpecifier

type PartSpecifier string

PartSpecifier 描述要获取的部分的头、体或两者。

const (
	PartSpecifierNone   PartSpecifier = ""       // 不获取任何部分
	PartSpecifierHeader PartSpecifier = "HEADER" // 获取头部
	PartSpecifierMIME   PartSpecifier = "MIME"   // 获取 MIME 部分
	PartSpecifierText   PartSpecifier = "TEXT"   // 获取文本部分
)

type QuotaResourceType

type QuotaResourceType string

QuotaResourceType 表示 QUOTA 资源类型。

参见 RFC 9208 第 5 节。

const (
	QuotaResourceStorage           QuotaResourceType = "STORAGE"            // 存储资源类型
	QuotaResourceMessage           QuotaResourceType = "MESSAGE"            // 消息资源类型
	QuotaResourceMailbox           QuotaResourceType = "MAILBOX"            // 邮箱资源类型
	QuotaResourceAnnotationStorage QuotaResourceType = "ANNOTATION-STORAGE" // 注释存储资源类型
)

type ResponseCode

type ResponseCode string

ResponseCode 是一种响应代码。

const (
	ResponseCodeAlert                ResponseCode = "ALERT"                // 警告
	ResponseCodeAlreadyExists        ResponseCode = "ALREADYEXISTS"        // 已存在
	ResponseCodeAuthenticationFailed ResponseCode = "AUTHENTICATIONFAILED" // 身份验证失败
	ResponseCodeAuthorizationFailed  ResponseCode = "AUTHORIZATIONFAILED"  // 授权失败
	ResponseCodeBadCharset           ResponseCode = "BADCHARSET"           // 字符集错误
	ResponseCodeCannot               ResponseCode = "CANNOT"               // 无法执行
	ResponseCodeClientBug            ResponseCode = "CLIENTBUG"            // 客户端错误
	ResponseCodeContactAdmin         ResponseCode = "CONTACTADMIN"         // 联系管理员
	ResponseCodeCorruption           ResponseCode = "CORRUPTION"           // 数据损坏
	ResponseCodeExpired              ResponseCode = "EXPIRED"              // 过期
	ResponseCodeHasChildren          ResponseCode = "HASCHILDREN"          // 有子项
	ResponseCodeInUse                ResponseCode = "INUSE"                // 正在使用
	ResponseCodeLimit                ResponseCode = "LIMIT"                // 限制
	ResponseCodeNonExistent          ResponseCode = "NONEXISTENT"          // 不存在
	ResponseCodeNoPerm               ResponseCode = "NOPERM"               // 无权限
	ResponseCodeOverQuota            ResponseCode = "OVERQUOTA"            // 超出配额
	ResponseCodeParse                ResponseCode = "PARSE"                // 解析错误
	ResponseCodePrivacyRequired      ResponseCode = "PRIVACYREQUIRED"      // 需要隐私
	ResponseCodeServerBug            ResponseCode = "SERVERBUG"            // 服务器错误
	ResponseCodeTryCreate            ResponseCode = "TRYCREATE"            // 尝试创建
	ResponseCodeUnavailable          ResponseCode = "UNAVAILABLE"          // 不可用
	ResponseCodeUnknownCTE           ResponseCode = "UNKNOWN-CTE"          // 未知内容传输编码

	// METADATA
	ResponseCodeTooMany   ResponseCode = "TOOMANY"   // 太多
	ResponseCodeNoPrivate ResponseCode = "NOPRIVATE" // 无法访问私人元数据

	// APPENDLIMIT
	ResponseCodeTooBig ResponseCode = "TOOBIG" // 太大
)
type Right byte

Right 描述了一组由 IMAP ACL 扩展控制的操作权限.

type RightModification

type RightModification byte

RightModification 表示如何修改权限集.

type RightSet

type RightSet []Right

RightSet 表示一组权限.

func (RightSet) Add

func (r RightSet) Add(rights RightSet) RightSet

Add 返回一个新的权限集,包含两个权限集中的权限.

func (RightSet) Equal

func (rs1 RightSet) Equal(rs2 RightSet) bool

Equal 返回 true 如果两个权限集包含完全相同的权限.

func (RightSet) Remove

func (r RightSet) Remove(rights RightSet) RightSet

Remove 返回一个新的权限集,包含 r 中所有不在传入权限集中的权限.

func (RightSet) String

func (r RightSet) String() string

String 返回权限集的字符串表示形式.

type RightsIdentifier

type RightsIdentifier string

RightsIdentifier 是一个 ACL 标识符.

func NewRightsIdentifierUsername

func NewRightsIdentifierUsername(username string) (RightsIdentifier, error)

NewRightsIdentifierUsername 返回一个引用用户名的权限标识符,检查保留值.

type SearchCriteria

type SearchCriteria struct {
	SeqNum []SeqSet // 消息序号
	UID    []UIDSet // 消息UID

	// 仅使用日期,时间和时区被忽略
	Since      time.Time // 自某日期以来
	Before     time.Time // 在某日期之前
	SentSince  time.Time // 自某日期以来发送
	SentBefore time.Time // 在某日期之前发送

	Header []SearchCriteriaHeaderField // 邮件头字段
	Body   []string                    // 邮件正文内容
	Text   []string                    // 邮件文本内容

	Flag    []Flag // 含有的标志
	NotFlag []Flag // 不含有的标志

	Larger  int64 // 大于某个大小
	Smaller int64 // 小于某个大小

	Not []SearchCriteria    // 否定的搜索条件
	Or  [][2]SearchCriteria // "或" 条件组合

	ModSeq *SearchCriteriaModSeq // 条件存储功能(需要 CONDSTORE 扩展)
}

SearchCriteria 表示 SEARCH 命令的搜索条件。

当多个字段被填充时,结果是符合所有条件消息的交集("与" 操作)。

"And", "Not" 和 "Or" 可以用来组合多个搜索条件。例如,以下条件匹配不包含 "hello" 的消息:

SearchCriteria{Not: []SearchCriteria{{
	Body: []string{"hello"},
}}}

以下条件匹配包含 "hello" 或 "world" 的消息:

SearchCriteria{Or: [][2]SearchCriteria{{
	{Body: []string{"hello"}},
	{Body: []string{"world"}},
}}}

func (*SearchCriteria) And

func (criteria *SearchCriteria) And(other *SearchCriteria)

And 方法用于合并两个搜索条件的交集。

参数: - other: 另一个要合并的搜索条件。

type SearchCriteriaHeaderField

type SearchCriteriaHeaderField struct {
	Key, Value string // 键和值
}

SearchCriteriaHeaderField 表示邮件头的键值对字段。

type SearchCriteriaMetadataType

type SearchCriteriaMetadataType string

SearchCriteriaMetadataType 表示元数据类型。

const (
	SearchCriteriaMetadataAll     SearchCriteriaMetadataType = "所有"
	SearchCriteriaMetadataPrivate SearchCriteriaMetadataType = "私人"
	SearchCriteriaMetadataShared  SearchCriteriaMetadataType = "共享"
)

type SearchCriteriaModSeq

type SearchCriteriaModSeq struct {
	ModSeq       uint64
	MetadataName string
	MetadataType SearchCriteriaMetadataType
}

SearchCriteriaModSeq 表示 ModSeq 条件。

字段: - ModSeq: 条件的 ModSeq 值。 - MetadataName: 元数据名称。 - MetadataType: 元数据类型。

type SearchData

type SearchData struct {
	All NumSet // 所有结果

	// 需要 IMAP4rev2 或 ESEARCH
	UID   bool   // 是否返回 UID
	Min   uint32 // 最小值
	Max   uint32 // 最大值
	Count uint32 // 计数

	// 需要 CONDSTORE
	ModSeq uint64 // ModSeq 值
}

SearchData 表示 SEARCH 命令返回的数据。

func (*SearchData) AllSeqNums

func (data *SearchData) AllSeqNums() []uint32

AllSeqNums 方法返回 All 作为消息序号的切片。

返回: 消息序号的切片。

func (*SearchData) AllUIDs

func (data *SearchData) AllUIDs() []UID

AllUIDs 方法返回 All 作为 UID 的切片。

返回: UID 的切片。

type SearchOptions

type SearchOptions struct {
	// 需要 IMAP4rev2 或 ESEARCH
	ReturnMin   bool // 返回最小值
	ReturnMax   bool // 返回最大值
	ReturnAll   bool // 返回所有结果
	ReturnCount bool // 返回计数
	// 需要 IMAP4rev2 或 SEARCHRES
	ReturnSave bool // 保存搜索结果
}

SearchOptions 包含 SEARCH 命令的选项。

type SectionPartial

type SectionPartial struct {
	Offset, Size int64 // 偏移量和大小
}

SectionPartial 描述获取消息有效载荷时的字节范围。

type SelectData

type SelectData struct {
	// 此邮箱定义的标志
	Flags []Flag // 邮箱的标志集合
	// 客户端可以永久更改的标志
	PermanentFlags []Flag // 客户端可永久更改的标志集合
	// 此邮箱中的邮件数量(即 "EXISTS")
	NumMessages uint32 // 邮件总数
	UIDNext     UID    // 下一个 UID
	UIDValidity uint32 // UID 有效性

	List *ListData // 返回列表数据,要求支持 IMAP4rev2

	HighestModSeq uint64 // 最高的修改序列号,要求支持 CONDSTORE
}

SelectData 是 SELECT 命令返回的数据。

在旧的 RFC 2060 中,PermanentFlags、UIDNext 和 UIDValidity 是可选的。

type SelectOptions

type SelectOptions struct {
	ReadOnly  bool // 是否以只读模式选择邮箱
	CondStore bool // 是否使用条件存储,要求支持 CONDSTORE
}

SelectOptions 包含 SELECT 或 EXAMINE 命令的选项。

type SeqRange

type SeqRange struct {
	Start, Stop uint32 // 范围的起始和结束序列号
}

SeqRange 是消息序列号的范围。

type SeqSet

type SeqSet []SeqRange

SeqSet 是一组消息序列号。

func SeqSetNum

func SeqSetNum(nums ...uint32) SeqSet

SeqSetNum 返回包含指定序列号的新 SeqSet。

func (*SeqSet) AddNum

func (s *SeqSet) AddNum(nums ...uint32)

AddNum 将新的序列号插入到集合中。值 0 表示 "*"。

func (*SeqSet) AddRange

func (s *SeqSet) AddRange(start, stop uint32)

AddRange 将新的范围插入集合中。

func (*SeqSet) AddSet

func (s *SeqSet) AddSet(other SeqSet)

AddSet 将其他 SeqSet 的所有序列号插入到 s 中。

func (*SeqSet) Contains

func (s *SeqSet) Contains(num uint32) bool

Contains 返回如果非零的序列号 num 包含在集合中则返回 true。

func (SeqSet) Dynamic

func (s SeqSet) Dynamic() bool

Dynamic 返回如果 SeqSet 是动态的,则返回 true。

func (*SeqSet) Nums

func (s *SeqSet) Nums() ([]uint32, bool)

Nums 返回包含在集合中的所有序列号的切片。

func (SeqSet) String

func (s SeqSet) String() string

String 返回 SeqSet 的 IMAP 表示。

type StatusData

type StatusData struct {
	Mailbox string // 邮箱名称

	NumMessages *uint32 // 邮箱中的邮件数量
	UIDNext     UID     // 下一个可用的 UID
	UIDValidity uint32  // UID 有效性
	NumUnseen   *uint32 // 未读邮件数量
	NumDeleted  *uint32 // 已删除邮件数量
	Size        *int64  // 邮箱大小

	AppendLimit    *uint32 // 附加限制
	DeletedStorage *int64  // 已删除邮件的存储量
	HighestModSeq  uint64  // 最高的修改序列号
}

StatusData 是 STATUS 命令返回的数据。

邮箱名称始终会填充,其他字段是可选的。

type StatusOptions

type StatusOptions struct {
	NumMessages bool // 是否返回邮箱中的邮件数量
	UIDNext     bool // 是否返回下一个可用的 UID
	UIDValidity bool // 是否返回 UID 有效性
	NumUnseen   bool // 是否返回未读邮件数量
	NumDeleted  bool // 是否返回已删除邮件数量,要求 IMAP4rev2 或 QUOTA
	Size        bool // 是否返回邮箱大小,要求 IMAP4rev2 或 STATUS=SIZE

	AppendLimit    bool // 是否返回附加限制,要求 APPENDLIMIT
	DeletedStorage bool // 是否返回已删除邮件的存储量,要求 QUOTA=RES-STORAGE
	HighestModSeq  bool // 是否返回最高的修改序列号,要求 CONDSTORE
}

StatusOptions 包含 STATUS 命令的选项。

type StatusResponse

type StatusResponse struct {
	Type StatusResponseType // 状态响应类型
	Code ResponseCode       // 响应代码
	Text string             // 额外信息
}

StatusResponse 是一种通用状态响应。

参见 RFC 9051 第 7.1 节。

type StatusResponseType

type StatusResponseType string

StatusResponseType 是一种通用状态响应类型。

const (
	StatusResponseTypeOK      StatusResponseType = "OK"      // 表示请求成功
	StatusResponseTypeNo      StatusResponseType = "NO"      // 表示请求失败
	StatusResponseTypeBad     StatusResponseType = "BAD"     // 表示请求无效
	StatusResponseTypePreAuth StatusResponseType = "PREAUTH" // 表示已预先授权
	StatusResponseTypeBye     StatusResponseType = "BYE"     // 表示会话结束
)

type StoreFlags

type StoreFlags struct {
	Op     StoreFlagsOp // 操作类型
	Silent bool         // 是否静默操作
	Flags  []Flag       // 要修改的标志
}

StoreFlags 修改消息标志。

type StoreFlagsOp

type StoreFlagsOp int

StoreFlagsOp 是标志操作:设置、添加或删除。

const (
	StoreFlagsSet StoreFlagsOp = iota // 设置标志
	StoreFlagsAdd                     // 添加标志
	StoreFlagsDel                     // 删除标志
)

type StoreOptions

type StoreOptions struct {
	UnchangedSince uint64 // 要求 CONDSTORE
}

StoreOptions 包含 STORE 命令的选项。

type ThreadAlgorithm

type ThreadAlgorithm string

ThreadAlgorithm 表示一个线程算法。

const (
	ThreadOrderedSubject ThreadAlgorithm = "ORDEREDSUBJECT" // 有序主题算法
	ThreadReferences     ThreadAlgorithm = "REFERENCES"     // 引用算法
)

type UID

type UID uint32

UID 是消息的唯一标识符。

type UIDRange

type UIDRange struct {
	Start, Stop UID // 范围的起始和结束 UID
}

UIDRange 是消息 UID 的范围。

type UIDSet

type UIDSet []UIDRange

UIDSet 是一组消息 UID。

func SearchRes

func SearchRes() UIDSet

SearchRes 方法返回一个特殊的标记,可以替代 UIDSet 引用上次 SEARCH 结果。在传输中,它被编码为 '$'。

需要 IMAP4rev2 或 SEARCHRES 扩展。

func UIDSetNum

func UIDSetNum(uids ...UID) UIDSet

UIDSetNum 返回包含指定 UIDs 的新 UIDSet。

func (*UIDSet) AddNum

func (s *UIDSet) AddNum(uids ...UID)

AddNum 将新的 UIDs 插入到集合中。值 0 表示 "*"。

func (*UIDSet) AddRange

func (s *UIDSet) AddRange(start, stop UID)

AddRange 将新的范围插入集合中。

func (*UIDSet) AddSet

func (s *UIDSet) AddSet(other UIDSet)

AddSet 将其他 UIDSet 的所有 UIDs 插入到 s 中。

func (UIDSet) Contains

func (s UIDSet) Contains(uid UID) bool

Contains 返回如果非零的 UID uid 包含在集合中则返回 true。

func (UIDSet) Dynamic

func (s UIDSet) Dynamic() bool

Dynamic 返回如果 UIDSet 是动态的,则返回 true。

func (UIDSet) Nums

func (s UIDSet) Nums() ([]UID, bool)

Nums 返回包含在集合中的所有 UIDs 的切片。

func (UIDSet) String

func (s UIDSet) String() string

String 返回 UIDSet 的 IMAP 表示。如果是 SEARCHRES,返回 "$"。

Directories

Path Synopsis
cmd
imapmemserver command
包 imapserver 实现了一个 IMAP 服务器。
包 imapserver 实现了一个 IMAP 服务器。
imapmemserver
imapmemserver包实现了一个内存中的IMAP服务器。
imapmemserver包实现了一个内存中的IMAP服务器。
imapwire
Package imapwire implements the IMAP wire protocol.
Package imapwire implements the IMAP wire protocol.
utf7
Package utf7 implements modified UTF-7 encoding defined in RFC 3501 section 5.1.3
Package utf7 implements modified UTF-7 encoding defined in RFC 3501 section 5.1.3

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL