// manager 展示多通道管理器的完整用法。 // // 功能: // 1. 注册多个不同类型的通道(smtp/aliyun/aws),统一路由 // 2. 同一类型注册多份配置(主备 SMTP 切换) // 3. 发送时按实例名指定通道,或发送时临时指定配置 // 4. 遍历当前注册的通道实例信息 // // 怎么运行: // 1. 替换下方各通道的凭据为真实值 // 2. 在项目根目录执行:go run ./examples/manager package main import ( "context" "fmt" "code.yun.ink/pkg/mailx" "code.yun.ink/pkg/mailx/aliyun" "code.yun.ink/pkg/mailx/aws" "code.yun.ink/pkg/mailx/smtp" ) func main() { ctx := context.Background() mgr := mailx.NewManager() // ===== 注册多个不同类型的通道 ===== // 用 Register 注册时,实例名 = 通道类型名(smtp / aliyun / aws / mailgun) _ = mgr.Register(smtp.New(smtp.Config{ Host: "smtp.qq.com", Port: 587, User: "a@qq.com", Password: "code", })) _ = mgr.Register(aliyun.New(aliyun.Config{ AccessKeyID: "ak", AccessKeySecret: "sk", AccountName: "noreply@example.com", })) _ = mgr.Register(aws.New(aws.Config{ AccessKeyID: "ak", AccessKeySecret: "sk", Region: "ap-northeast-1", Sender: "noreply@example.com", })) // ===== 同一类型注册多份配置(主备切换) ===== // 用 RegisterNamed 指定实例名,可注册多个 smtp 实例 _ = mgr.RegisterNamed("smtp-main", smtp.New(smtp.Config{ Host: "smtp.qq.com", Port: 465, User: "a@qq.com", Password: "main-code", })) _ = mgr.RegisterNamed("smtp-backup", smtp.New(smtp.Config{ Host: "smtp.163.com", Port: 465, User: "a@163.com", Password: "backup-code", })) // ===== 设置默认通道(不设置则用第一个注册的) ===== _ = mgr.SetDefault("aliyun") // ===== 遍历当前注册的通道实例信息 ===== fmt.Println("registered instances:") for _, info := range mgr.Senders() { fmt.Printf(" - %s (type: %s)\n", info.Name, info.Type) } fmt.Println("default:", mgr.Default()) msg := mailx.NewMessage(). From("noreply@example.com"). To("user@example.com"). Subject("Notice"). Text("hello"). HTML("