feat(jsmod): register mail to jsmod v1.0.3
This commit is contained in:
parent
ab1a157ed5
commit
8beeb84a22
@ -1,5 +1,11 @@
|
|||||||
# CHANGELOG
|
# CHANGELOG
|
||||||
|
|
||||||
|
## v1.0.4 (2026-05-31)
|
||||||
|
- **新增**: 注册到 `jsmod`。支持低代码环境下的邮件发送与接收。
|
||||||
|
- 提供 `send`, `recv` 默认快捷操作。
|
||||||
|
- 支持通过 `get(name)` 进行多账户切换。
|
||||||
|
- **摩擦消除**: 使用 `go/cast` 自动处理收件人列表等参数转换,支持 JS 侧传入单字符串或数组。
|
||||||
|
|
||||||
## v1.0.1 (2026-05-13)
|
## v1.0.1 (2026-05-13)
|
||||||
### 重大重构 (Breaking Changes)
|
### 重大重构 (Breaking Changes)
|
||||||
- **移除 Must 系列函数**: 移除了 `MustSend`, `MustRecv`。建议结合 `apigo.cc/go/cast` 的 `cast.As` 实现无摩擦调用。
|
- **移除 Must 系列函数**: 移除了 `MustSend`, `MustRecv`。建议结合 `apigo.cc/go/cast` 的 `cast.As` 实现无摩擦调用。
|
||||||
|
|||||||
2
go.mod
2
go.mod
@ -5,6 +5,7 @@ go 1.26.1
|
|||||||
require (
|
require (
|
||||||
apigo.cc/go/cast v1.3.3
|
apigo.cc/go/cast v1.3.3
|
||||||
apigo.cc/go/file v1.3.2
|
apigo.cc/go/file v1.3.2
|
||||||
|
apigo.cc/go/jsmod v1.0.1
|
||||||
apigo.cc/go/log v1.3.4
|
apigo.cc/go/log v1.3.4
|
||||||
apigo.cc/go/safe v1.3.1
|
apigo.cc/go/safe v1.3.1
|
||||||
github.com/emersion/go-imap/v2 v2.0.0-beta.8
|
github.com/emersion/go-imap/v2 v2.0.0-beta.8
|
||||||
@ -26,6 +27,7 @@ require (
|
|||||||
github.com/emersion/go-message v0.18.2 // indirect
|
github.com/emersion/go-message v0.18.2 // indirect
|
||||||
github.com/emersion/go-sasl v0.0.0-20241020182733-b788ff22d5a6 // indirect
|
github.com/emersion/go-sasl v0.0.0-20241020182733-b788ff22d5a6 // indirect
|
||||||
github.com/fatih/color v1.18.0 // indirect
|
github.com/fatih/color v1.18.0 // indirect
|
||||||
|
github.com/go-test/deep v1.1.1 // indirect
|
||||||
github.com/gogs/chardet v0.0.0-20211120154057-b7413eaefb8f // indirect
|
github.com/gogs/chardet v0.0.0-20211120154057-b7413eaefb8f // indirect
|
||||||
github.com/mattn/go-colorable v0.1.14 // indirect
|
github.com/mattn/go-colorable v0.1.14 // indirect
|
||||||
github.com/mattn/go-isatty v0.0.20 // indirect
|
github.com/mattn/go-isatty v0.0.20 // indirect
|
||||||
|
|||||||
6
go.sum
6
go.sum
@ -8,6 +8,8 @@ apigo.cc/go/file v1.3.2 h1:pu4oiDyiqgj3/eykfnJf+/6+A9v/Z0b3ClP5XK+lwG4=
|
|||||||
apigo.cc/go/file v1.3.2/go.mod h1:vci4h0Pz94mV6dkniQkuyBYERVYeq7/LX4jJVuCg9hs=
|
apigo.cc/go/file v1.3.2/go.mod h1:vci4h0Pz94mV6dkniQkuyBYERVYeq7/LX4jJVuCg9hs=
|
||||||
apigo.cc/go/id v1.3.1 h1:pkqi6VeWyQoHuIu0Zbx/RRxIAdM61Js0j6cY1M9XVCk=
|
apigo.cc/go/id v1.3.1 h1:pkqi6VeWyQoHuIu0Zbx/RRxIAdM61Js0j6cY1M9XVCk=
|
||||||
apigo.cc/go/id v1.3.1/go.mod h1:P2/vl3tyW3US+ayOFSMoPIOCulNLBngNYPhXJC/Z7J4=
|
apigo.cc/go/id v1.3.1/go.mod h1:P2/vl3tyW3US+ayOFSMoPIOCulNLBngNYPhXJC/Z7J4=
|
||||||
|
apigo.cc/go/jsmod v1.0.1 h1:vaz3cMQi75UVoALLfyV/Trs8iP/Nh28yN57IvBFpPGk=
|
||||||
|
apigo.cc/go/jsmod v1.0.1/go.mod h1:bmyeZtOAP/j5am+YRnaiM89smysK24K7ebk0koFtsSw=
|
||||||
apigo.cc/go/log v1.3.4 h1:UT8Neb9r4QjjbCFbTzw+ZeTxd+DmdmR5gNExeR4Cj+g=
|
apigo.cc/go/log v1.3.4 h1:UT8Neb9r4QjjbCFbTzw+ZeTxd+DmdmR5gNExeR4Cj+g=
|
||||||
apigo.cc/go/log v1.3.4/go.mod h1:/Q/2r51xWSsrS4QN5U9jLiTw8n6qNC8kG9nuVHweY20=
|
apigo.cc/go/log v1.3.4/go.mod h1:/Q/2r51xWSsrS4QN5U9jLiTw8n6qNC8kG9nuVHweY20=
|
||||||
apigo.cc/go/rand v1.3.1 h1:7FvsI6PtQ5XrWER0dTiLVo0p7GIxRidT/TBKhVy93j8=
|
apigo.cc/go/rand v1.3.1 h1:7FvsI6PtQ5XrWER0dTiLVo0p7GIxRidT/TBKhVy93j8=
|
||||||
@ -34,8 +36,8 @@ github.com/emersion/go-sasl v0.0.0-20241020182733-b788ff22d5a6 h1:oP4q0fw+fOSWn3
|
|||||||
github.com/emersion/go-sasl v0.0.0-20241020182733-b788ff22d5a6/go.mod h1:iL2twTeMvZnrg54ZoPDNfJaJaqy0xIQFuBdrLsmspwQ=
|
github.com/emersion/go-sasl v0.0.0-20241020182733-b788ff22d5a6/go.mod h1:iL2twTeMvZnrg54ZoPDNfJaJaqy0xIQFuBdrLsmspwQ=
|
||||||
github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM=
|
github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM=
|
||||||
github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU=
|
github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU=
|
||||||
github.com/go-test/deep v1.1.0 h1:WOcxcdHcvdgThNXjw0t76K42FXTU7HpNQWHpA2HHNlg=
|
github.com/go-test/deep v1.1.1 h1:0r/53hagsehfO4bzD2Pgr/+RgHqhmf+k1Bpse2cTu1U=
|
||||||
github.com/go-test/deep v1.1.0/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE=
|
github.com/go-test/deep v1.1.1/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE=
|
||||||
github.com/gogs/chardet v0.0.0-20211120154057-b7413eaefb8f h1:3BSP1Tbs2djlpprl7wCLuiqMaUh5SJkkzI2gDs+FgLs=
|
github.com/gogs/chardet v0.0.0-20211120154057-b7413eaefb8f h1:3BSP1Tbs2djlpprl7wCLuiqMaUh5SJkkzI2gDs+FgLs=
|
||||||
github.com/gogs/chardet v0.0.0-20211120154057-b7413eaefb8f/go.mod h1:Pcatq5tYkCW2Q6yrR2VRHlbHpZ/R4/7qyL1TCF7vl14=
|
github.com/gogs/chardet v0.0.0-20211120154057-b7413eaefb8f/go.mod h1:Pcatq5tYkCW2Q6yrR2VRHlbHpZ/R4/7qyL1TCF7vl14=
|
||||||
github.com/jaytaylor/html2text v0.0.0-20260303211410-1a4bdc82ecec h1:DrV+GDNKHeHyfqEZaoxQoHlWcgTBiaJ8ZUyNyd5vvkY=
|
github.com/jaytaylor/html2text v0.0.0-20260303211410-1a4bdc82ecec h1:DrV+GDNKHeHyfqEZaoxQoHlWcgTBiaJ8ZUyNyd5vvkY=
|
||||||
|
|||||||
52
js_export.go
Normal file
52
js_export.go
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
package mail
|
||||||
|
|
||||||
|
import (
|
||||||
|
"apigo.cc/go/cast"
|
||||||
|
"apigo.cc/go/jsmod"
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
jsmod.Register("mail", map[string]any{
|
||||||
|
// 默认邮箱操作
|
||||||
|
"send": func(to any, subject, content string, option *SendOption) error {
|
||||||
|
var toList []string
|
||||||
|
cast.Convert(&toList, to)
|
||||||
|
return Send(toList, subject, content, option)
|
||||||
|
},
|
||||||
|
"recv": func(opt *RecvOption) (*RecvResult, error) {
|
||||||
|
return Recv(opt)
|
||||||
|
},
|
||||||
|
|
||||||
|
// 多实例获取
|
||||||
|
"mailbox": func(name string) *jsMailbox {
|
||||||
|
m := GetMailbox(name)
|
||||||
|
if m == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return &jsMailbox{m: m}
|
||||||
|
},
|
||||||
|
|
||||||
|
// 辅助工具
|
||||||
|
"formatAddr": FormatAddr,
|
||||||
|
"parseAddr": ParseAddr,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 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)
|
||||||
|
return j.m.Send(toList, subject, content, option)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (j *jsMailbox) Recv(opt *RecvOption) (*RecvResult, error) {
|
||||||
|
return j.m.Recv(opt)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (j *jsMailbox) Health() error {
|
||||||
|
return j.m.Health()
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user