Documentation
¶
Overview ¶
Package imap 实现 IMAP4rev2。
IMAP4rev2 在 RFC 9051 中定义。
本包包含客户端和服务器通用的类型和函数。请参阅 imapclient 和 imapserver 子包。
Index ¶
- Constants
- Variables
- func IsSearchRes(numSet NumSet) bool
- type Address
- type AppendData
- type AppendOptions
- type BodyStructure
- type BodyStructureDisposition
- type BodyStructureMessageRFC822
- type BodyStructureMultiPart
- type BodyStructureMultiPartExt
- type BodyStructureSinglePart
- type BodyStructureSinglePartExt
- type BodyStructureText
- type BodyStructureWalkFunc
- type Cap
- type CapSet
- type ConnState
- type CopyData
- type CreateOptions
- type Envelope
- type Error
- type FetchItemBinarySection
- type FetchItemBinarySectionSize
- type FetchItemBodySection
- type FetchItemBodyStructure
- type FetchOptions
- type Flag
- type IDData
- type ListData
- type ListDataChildInfo
- type ListOptions
- type LiteralReader
- type MailboxAttr
- type NamespaceData
- type NamespaceDescriptor
- type NumSet
- type PartSpecifier
- type QuotaResourceType
- type ResponseCode
- type Right
- type RightModification
- type RightSet
- type RightsIdentifier
- type SearchCriteria
- type SearchCriteriaHeaderField
- type SearchCriteriaMetadataType
- type SearchCriteriaModSeq
- type SearchData
- type SearchOptions
- type SectionPartial
- type SelectData
- type SelectOptions
- type SeqRange
- type SeqSet
- type StatusData
- type StatusOptions
- type StatusResponse
- type StatusResponseType
- type StoreFlags
- type StoreFlagsOp
- type StoreOptions
- type ThreadAlgorithm
- type UID
- type UIDRange
- type UIDSet
Constants ¶
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 )
const ( RightModificationReplace = RightModification(0) // 替换权限集 RightModificationAdd = RightModification('+') // 增加权限 RightModificationRemove = RightModification('-') // 删除权限 )
const RightsIdentifierAnyone = RightsIdentifier("anyone")
RightsIdentifierAnyone 是通用身份 (匹配所有人).
Variables ¶
var RightSetAll = RightSet("lrswipcda")
RightSetAll 包含所有标准权限.
Functions ¶
func IsSearchRes ¶
IsSearchRes 方法检查序号集是否引用了上次 SEARCH 结果。请参阅 SearchRes。
参数: - numSet: 要检查的序号集。
返回: 如果是上次搜索结果的引用,返回 true;否则返回 false。
Types ¶
type Address ¶
Address 表示消息的发送者或接收者。
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 ¶
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 (bs *BodyStructureMultiPart) Disposition() *BodyStructureDisposition
func (*BodyStructureMultiPart) MediaType ¶
func (bs *BodyStructureMultiPart) MediaType() string
func (*BodyStructureMultiPart) Walk ¶
func (bs *BodyStructureMultiPart) Walk(f BodyStructureWalkFunc)
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 (bs *BodyStructureSinglePart) Disposition() *BodyStructureDisposition
func (*BodyStructureSinglePart) Filename ¶
func (bs *BodyStructureSinglePart) Filename() string
Filename 解码体结构的文件名(如果有的话)。
func (*BodyStructureSinglePart) MediaType ¶
func (bs *BodyStructureSinglePart) MediaType() string
func (*BodyStructureSinglePart) Walk ¶
func (bs *BodyStructureSinglePart) Walk(f BodyStructureWalkFunc)
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 )
注册的能力。
type CapSet ¶
type CapSet map[Cap]struct{}
CapSet 是能力集合的类型。
func (CapSet) AppendLimit ¶
AppendLimit 检查 APPENDLIMIT 能力。
如果服务器支持 APPENDLIMIT,则 ok 为 true。如果服务器没有对所有邮箱的相同上传限制,则 limit 为 nil, 每个邮箱的限制必须通过 STATUS 查询。
func (CapSet) AuthMechanisms ¶
AuthMechanisms 返回支持的 SASL 身份验证机制的列表。
func (CapSet) QuotaResourceTypes ¶
func (set CapSet) QuotaResourceTypes() []QuotaResourceType
QuotaResourceTypes 返回支持的 QUOTA 资源类型的列表。
func (CapSet) ThreadAlgorithms ¶
func (set CapSet) ThreadAlgorithms() []ThreadAlgorithm
ThreadAlgorithms 返回支持的线程算法的列表。
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 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 ¶
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 // 其他命名空间的描述
}
NamespaceData 是 NAMESPACE 命令返回的数据。
type NamespaceDescriptor ¶
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" // 尝试创建 ResponseCodeUnknownCTE ResponseCode = "UNKNOWN-CTE" // 未知内容传输编码 // METADATA ResponseCodeTooMany ResponseCode = "TOOMANY" // 太多 ResponseCodeNoPrivate ResponseCode = "NOPRIVATE" // 无法访问私人元数据 // APPENDLIMIT ResponseCodeTooBig ResponseCode = "TOOBIG" // 太大 )
type RightSet ¶
type RightSet []Right
RightSet 表示一组权限.
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 = "私人" )
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 SeqSet ¶
type SeqSet []SeqRange
SeqSet 是一组消息序列号。
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" // 引用算法 )
Source Files
¶
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 |