2026-05-31 15:52:14 +08:00
|
|
|
|
package mail
|
|
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
|
"apigo.cc/go/cast"
|
|
|
|
|
|
"apigo.cc/go/jsmod"
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
func init() {
|
|
|
|
|
|
jsmod.Register("mail", map[string]any{
|
2026-06-10 12:41:26 +08:00
|
|
|
|
// 默认邮箱操作 (对齐 PascalCase)
|
2026-06-21 10:31:21 +08:00
|
|
|
|
"Send": jsSend,
|
|
|
|
|
|
"Recv": jsRecv,
|
2026-05-31 15:52:14 +08:00
|
|
|
|
|
2026-06-10 12:41:26 +08:00
|
|
|
|
// 多实例获取 (对齐 PascalCase,支持可选参数)
|
2026-06-21 10:31:21 +08:00
|
|
|
|
"Mailbox": jsMailboxGetter,
|
2026-05-31 15:52:14 +08:00
|
|
|
|
|
|
|
|
|
|
// 辅助工具
|
2026-06-21 10:31:21 +08:00
|
|
|
|
"FormatAddr": jsFormatAddr,
|
|
|
|
|
|
"ParseAddr": jsParseAddr,
|
2026-05-31 15:52:14 +08:00
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-06-21 10:31:21 +08:00
|
|
|
|
func jsSend(to any, subject, content string, option *SendOption) error {
|
|
|
|
|
|
var toList []string
|
|
|
|
|
|
cast.Convert(&toList, to)
|
|
|
|
|
|
if err := Send(toList, subject, content, option); err != nil {
|
|
|
|
|
|
return jsmod.MakeError(err)
|
|
|
|
|
|
}
|
|
|
|
|
|
return nil
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func jsRecv(opt *RecvOption) (*RecvResult, error) {
|
|
|
|
|
|
res, err := Recv(opt)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, jsmod.MakeError(err)
|
|
|
|
|
|
}
|
|
|
|
|
|
return res, nil
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func jsMailboxGetter(name *string) *jsMailbox {
|
|
|
|
|
|
target := "default"
|
|
|
|
|
|
if name != nil {
|
|
|
|
|
|
target = *name
|
|
|
|
|
|
}
|
|
|
|
|
|
m := GetMailbox(target)
|
|
|
|
|
|
if m == nil {
|
|
|
|
|
|
return nil
|
|
|
|
|
|
}
|
|
|
|
|
|
return &jsMailbox{m: m}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func jsFormatAddr(name, address string) string {
|
|
|
|
|
|
return FormatAddr(name, address)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func jsParseAddr(addr string) (string, string, error) {
|
|
|
|
|
|
name, address, err := ParseAddr(addr)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return "", "", jsmod.MakeError(err)
|
|
|
|
|
|
}
|
|
|
|
|
|
return name, address, nil
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-05-31 15:52:14 +08:00
|
|
|
|
// jsMailbox 包装 Mailbox 实例
|
|
|
|
|
|
type jsMailbox struct {
|
|
|
|
|
|
m *Mailbox
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (j *jsMailbox) Send(to any, subject, content string, option *SendOption) error {
|
|
|
|
|
|
var toList []string
|
|
|
|
|
|
cast.Convert(&toList, to)
|
2026-06-21 10:31:21 +08:00
|
|
|
|
if err := j.m.Send(toList, subject, content, option); err != nil {
|
|
|
|
|
|
return jsmod.MakeError(err)
|
|
|
|
|
|
}
|
|
|
|
|
|
return nil
|
2026-05-31 15:52:14 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (j *jsMailbox) Recv(opt *RecvOption) (*RecvResult, error) {
|
2026-06-21 10:31:21 +08:00
|
|
|
|
res, err := j.m.Recv(opt)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, jsmod.MakeError(err)
|
|
|
|
|
|
}
|
|
|
|
|
|
return res, nil
|
2026-05-31 15:52:14 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (j *jsMailbox) Health() error {
|
2026-06-21 10:31:21 +08:00
|
|
|
|
if err := j.m.Health(); err != nil {
|
|
|
|
|
|
return jsmod.MakeError(err)
|
|
|
|
|
|
}
|
|
|
|
|
|
return nil
|
2026-05-31 15:52:14 +08:00
|
|
|
|
}
|