From dc49e979125ed33cc0f20f3f7c6fdaa5b622236b Mon Sep 17 00:00:00 2001 From: Yun <995116474@qq.com> Date: Wed, 20 Nov 2024 19:42:07 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E5=A4=9A=E4=B8=AA=E9=80=9A?= =?UTF-8?q?=E9=81=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- aliyun/aliyun.go | 250 +++++++++++++++++++++++++ aliyun/aliyun_test.go | 82 +++++++++ aliyun/assets/zh_hant.html | 160 ++++++++++++++++ aliyun/log/2024-09-25_info.log | 11 ++ aliyun/log/2024-09-27_error.log | 2 + aliyun/log/2024-09-27_info.log | 9 + aliyun/log/2024-09-29_error.log | 3 + aliyun/log/2024-09-29_info.log | 7 + aliyun/log/2024-09-30_info.log | 4 + aws/aws.go | 82 +++++++++ aws/aws_test.go | 52 ++++++ aws/log/2024-09-27_info.log | 3 + aws/log/2024-09-30_info.log | 3 + go.mod | 57 +++++- go.sum | 286 +++++++++++++++++++++++++++++ html.go | 2 +- html_test.go | 3 +- interfaces/interfaces.go | 96 ++++++++++ mailgun/log/2024-09-30_error.log | 2 + mailgun/log/2024-09-30_info.log | 2 + mailgun/mailgun.go | 46 +++++ mailgun/mailgun_test.go | 45 +++++ mailx.go | 205 ++++----------------- old/asset/hhh.txt | 1 + old/asset/余额宝.png | Bin 0 -> 39128 bytes old/html.go | 77 ++++++++ old/html_test.go | 60 ++++++ old/mailx.go | 202 ++++++++++++++++++++ mailx_test.go => old/mailx_test.go | 22 +-- smtp/log/2024-09-27_info.log | 3 + smtp/log/2024-09-30_info.log | 2 + smtp/smtp.go | 177 ++++++++++++++++++ smtp/smtp_test.go | 96 ++++++++++ 33 files changed, 1861 insertions(+), 191 deletions(-) create mode 100644 aliyun/aliyun.go create mode 100644 aliyun/aliyun_test.go create mode 100644 aliyun/assets/zh_hant.html create mode 100644 aliyun/log/2024-09-25_info.log create mode 100644 aliyun/log/2024-09-27_error.log create mode 100644 aliyun/log/2024-09-27_info.log create mode 100644 aliyun/log/2024-09-29_error.log create mode 100644 aliyun/log/2024-09-29_info.log create mode 100644 aliyun/log/2024-09-30_info.log create mode 100644 aws/aws.go create mode 100644 aws/aws_test.go create mode 100644 aws/log/2024-09-27_info.log create mode 100644 aws/log/2024-09-30_info.log create mode 100644 interfaces/interfaces.go create mode 100644 mailgun/log/2024-09-30_error.log create mode 100644 mailgun/log/2024-09-30_info.log create mode 100644 mailgun/mailgun.go create mode 100644 mailgun/mailgun_test.go create mode 100644 old/asset/hhh.txt create mode 100644 old/asset/余额宝.png create mode 100644 old/html.go create mode 100644 old/html_test.go create mode 100644 old/mailx.go rename mailx_test.go => old/mailx_test.go (75%) create mode 100644 smtp/log/2024-09-27_info.log create mode 100644 smtp/log/2024-09-30_info.log create mode 100644 smtp/smtp.go create mode 100644 smtp/smtp_test.go diff --git a/aliyun/aliyun.go b/aliyun/aliyun.go new file mode 100644 index 0000000..52d406b --- /dev/null +++ b/aliyun/aliyun.go @@ -0,0 +1,250 @@ +package aliyun + +import ( + "context" + "encoding/json" + "errors" + "fmt" + "strings" + "time" + + "code.yun.ink/pkg/mailx/interfaces" + openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client" + dm20151123 "github.com/alibabacloud-go/dm-20151123/v2/client" + util "github.com/alibabacloud-go/tea-utils/v2/service" + "github.com/alibabacloud-go/tea/tea" + "github.com/yuninks/loggerx" +) + +type Aliyun struct { + interfaces.DefaultEmail + client *dm20151123.Client + params *interfaces.EmialConfigDataAliyun + logger loggerx.LoggerInterface +} + +func (l *Aliyun) InitEmail(ctx context.Context, params interfaces.EmailConfigData, logger loggerx.LoggerInterface) (interfaces.Email, error) { + l.logger.Infof(ctx, "params:%+v", params) + if params.Aliyun == nil { + return nil, errors.New("not aliyun") + } + l.logger.Infof(ctx, "params:%+v", params.Aliyun) + // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。 + // 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378661.html。 + config := &openapi.Config{ + // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。 + AccessKeyId: tea.String(params.Aliyun.AccessId), + // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。 + AccessKeySecret: tea.String(params.Aliyun.AccessKey), + } + if params.Aliyun.Endpoint == "" { + params.Aliyun.Endpoint = "dm.aliyuncs.com" + } + + // Endpoint 请参考 https://api.aliyun.com/product/Dm + config.Endpoint = tea.String(params.Aliyun.Endpoint) + + result, err := dm20151123.NewClient(config) + if err != nil { + return nil, err + } + + return &Aliyun{ + client: result, + params: params.Aliyun, + logger: logger, + }, nil +} + +func (l *Aliyun) Send(ctx context.Context, params interfaces.Message) error { + if l.client == nil { + return errors.New("client no init") + } + if len(params.To) > 100 { + return errors.New("最多 100 个地址") + } + if l.params.AccountName == "" { + return errors.New("AccountName 必填") + } + + toAddress := strings.Join(params.To, ",") + + singleSendMailRequest := &dm20151123.SingleSendMailRequest{} + + singleSendMailRequest.AccountName = tea.String(l.params.AccountName) + singleSendMailRequest.ToAddress = tea.String(toAddress) // 目标地址,多个 email 地址可以用逗号分隔,最多 100 个地址(支持邮件组)。 + singleSendMailRequest.Subject = tea.String(params.Subject) + singleSendMailRequest.HtmlBody = tea.String(params.Body) + singleSendMailRequest.AddressType = tea.Int32(0) // 地址类型。取值:0:为随机账号1:为发信地址 + + if params.ReplyTo != "" { + singleSendMailRequest.ReplyToAddress = tea.Bool(false) + singleSendMailRequest.ReplyAddress = tea.String(params.ReplyTo) + } else { + singleSendMailRequest.ReplyToAddress = tea.Bool(true) + } + + runtime := &util.RuntimeOptions{} + tryErr := func() (_e error) { + defer func() { + if r := tea.Recover(recover()); r != nil { + _e = r + } + }() + // 复制代码运行请自行打印 API 的返回值 + resp, err := l.client.SingleSendMailWithOptions(singleSendMailRequest, runtime) + by, _ := json.Marshal(resp) + fmt.Printf("resp:%+v err:%+v", string(by), err) + l.logger.Infof(ctx, "resp:%+v err:%+v", resp, err) + + if err != nil { + return err + } + return nil + }() + + if tryErr != nil { + l.logger.Errorf(ctx, "err:%+v", tryErr) + return tryErr + + // var error = &tea.SDKError{} + // if _t, ok := tryErr.(*tea.SDKError); ok { + // error = _t + // } else { + // error.Message = tea.String(tryErr.Error()) + // } + // // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 + // // 错误 message + // fmt.Println(tea.StringValue(error.Message)) + // // 诊断地址 + // var data interface{} + // d := json.NewDecoder(strings.NewReader(tea.StringValue(error.Data))) + // d.Decode(&data) + // if m, ok := data.(map[string]interface{}); ok { + // recommend, _ := m["Recommend"] + // fmt.Println("recommend", recommend) + // } + // _, _err := util.AssertAsString(error.Message) + // if _err != nil { + // return _err + // } + } + + return nil // 实现具体的 Aliyun 发送方法 + // 如:return aliyunSDK.SendMail(params) +} + +// 同步状态 +func (l *Aliyun) SyncStatus(ctx context.Context) (resp []interfaces.EmailSendRecord, err error) { + + start := "" + + // 一次同步一天的数据 + for { + list, next, err := l.getSendStatus(ctx, start) + l.logger.Infof(ctx, "list:%+v next:%+v err:%+v", list, next, err) + if err != nil { + return nil, err + } + + for _, val := range list { + + t, _ := time.ParseInLocation("2006-01-02T15:04Z", tea.StringValue(val.LastUpdateTime), time.Local) + + // 0:成功 2:无效地址 3:垃圾邮件 4:失败 + record := interfaces.EmailSendRecord{ + AccountName: tea.StringValue(val.AccountName), + UpdateTime: t.UnixMilli(), + ToUser: tea.StringValue(val.ToAddress), + Subject: tea.StringValue(val.Subject), + ErrorMessage: tea.StringValue(val.Message), + } + + switch tea.Int32Value(val.Status) { + case 0: + record.Status = interfaces.EmailSendStatusSuccess + case 2: + record.Status = interfaces.EmailSendStatusInvalidAddress + case 3: + record.Status = interfaces.EmailSendStatusSpam + case 4: + record.Status = interfaces.EmailSendStatusFailed + default: + record.Status = interfaces.EmailSendStatusUnknown + } + + resp = append(resp, record) + } + if next == nil || len(*next) == 0 { + break + } + start = *next + } + + return resp, nil + +} + +func (l *Aliyun) getSendStatus(ctx context.Context, start string) (list []*dm20151123.SenderStatisticsDetailByParamResponseBodyDataMailDetail, nextStart *string, err error) { + now := time.Now().Local() + senderStatisticsDetailByParamRequest := &dm20151123.SenderStatisticsDetailByParamRequest{ + StartTime: tea.String(now.AddDate(0, 0, -1).Format("2006-01-02 15:04")), + EndTime: tea.String(now.Format("2006-01-02 15:04")), + Length: tea.Int32(100), + } + if start != "" { + senderStatisticsDetailByParamRequest.NextStart = tea.String(start) + } + runtime := &util.RuntimeOptions{} + tryErr := func() (_e error) { + defer func() { + if r := tea.Recover(recover()); r != nil { + _e = r + } + }() + // 复制代码运行请自行打印 API 的返回值 + resp, _err := l.client.SenderStatisticsDetailByParamWithOptions(senderStatisticsDetailByParamRequest, runtime) + if _err != nil { + l.logger.Errorf(ctx, "resp:%+v err:%+v", resp, _err) + return _err + } + + if resp == nil || resp.Body == nil || resp.Body.Data == nil { + return errors.New("resp.Body.Data is nil") + } + + list = resp.Body.Data.MailDetail + nextStart = resp.Body.NextStart + + return nil + }() + + if tryErr != nil { + l.logger.Errorf(ctx, "err:%+v", tryErr) + return nil, nil, tryErr + + // var error = &tea.SDKError{} + // if _t, ok := tryErr.(*tea.SDKError); ok { + // error = _t + // } else { + // error.Message = tea.String(tryErr.Error()) + // } + // // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。 + // // 错误 message + // fmt.Println(tea.StringValue(error.Message)) + // // 诊断地址 + // var data interface{} + // d := json.NewDecoder(strings.NewReader(tea.StringValue(error.Data))) + // d.Decode(&data) + // if m, ok := data.(map[string]interface{}); ok { + // recommend, _ := m["Recommend"] + // fmt.Println("recommend:", recommend) + // } + // _, _err := util.AssertAsString(error.Message) + // if _err != nil { + // l.logger.Errorf(ctx, "resp:%+v err:%+v", error.Message, _err) + // return nil, nil, _err + // } + } + return list, nextStart, nil +} diff --git a/aliyun/aliyun_test.go b/aliyun/aliyun_test.go new file mode 100644 index 0000000..d273444 --- /dev/null +++ b/aliyun/aliyun_test.go @@ -0,0 +1,82 @@ +package aliyun_test + +import ( + "context" + "fmt" + "os" + "testing" + + "code.yun.ink/pkg/mailx/aliyun" + "code.yun.ink/pkg/mailx/interfaces" + "github.com/yuninks/loggerx" +) + +func TestSend(t *testing.T) { + aliyun := &aliyun.Aliyun{} + ctx := context.Background() + + logger := loggerx.NewLogger(ctx) + + ali, err := aliyun.InitEmail(ctx, interfaces.EmailConfigData{ + Aliyun: &interfaces.EmialConfigDataAliyun{ + AccessId: "LTAI5tEQ8L8fmDir8udD3CFr", + AccessKey: "llg9M1U56s2SW5PuerlKPvTB1xYhn0", + Endpoint: "dm.aliyuncs.com", + AccountName: "test@email.aisz.org", //"test@email.aisz.org", + ReplyAddress: "287852692@qq.com", + }, + }, logger) + if err != nil { + t.Fatal(err) + } + + by, err := os.ReadFile("../../../static/email/msg/zh_Hant.html") + if err != nil { + t.Fatal(err) + } + + fmt.Println(string(by)) + + err = ali.Send(ctx, interfaces.Message{ + To: []string{"huangxinyun@dreaminglife.cn"}, + Subject: "测试主题", + Body: string(by), + }) + if err != nil { + t.Fatal("resp err", err) + } + + t.Log("send success") +} + +// func TestSyncStatus(t *testing.T) { +// aliyun := &aliyun.Aliyun{} +// ctx := context.Background() + +// global.Logger = loggerx.NewLogger(ctx) + +// ali, err := aliyun.InitEmail(ctx, interfaces.EmailConfigData{ +// Aliyun: &interfaces.EmialConfigDataAliyun{ +// AccessId: "LTAI5tEQ8L8fmDir8udD3CFr", +// AccessKey: "llg9M1U56s2SW5PuerlKPvTB1xYhn0", +// Endpoint: "dm.aliyuncs.com", +// AccountName: "test@email.aisz.org", +// ReplyAddress: "287852692@qq.com", +// }, +// }) +// if err != nil { +// t.Fatal(err) +// } + +// list, err := ali.SyncStatus(ctx) +// if err != nil { +// t.Fatal(err) +// } + +// _ = list + +// // global.Logger.Infof(ctx, "status: %v", list) + +// t.Log("status:", list) + +// } diff --git a/aliyun/assets/zh_hant.html b/aliyun/assets/zh_hant.html new file mode 100644 index 0000000..4d56564 --- /dev/null +++ b/aliyun/assets/zh_hant.html @@ -0,0 +1,160 @@ + + + + + + Document + + + + +
+
+ +
+ +
+
+ 以下是你的 ABPAY 验证码。请注意,该验证码将在 {{.shijian}} 分钟后过期, 请尽快完成验证。 +
+ +
{{.verify_code}}
+ +
  • ABpay开发者团队服务
  • + +
    +
    + 本邮件由系统自动发出请勿回复,如需要了解更多服务,欢迎访问ABpay官方网 +
    +
    还可以通以下方式联系我们
    + + +
    + 客服电话:400-278-2890 +
    +
    2024 ABpay.com.cn . All rightes reserved
    +
    +
    +
    + + diff --git a/aliyun/log/2024-09-25_info.log b/aliyun/log/2024-09-25_info.log new file mode 100644 index 0000000..075a32a --- /dev/null +++ b/aliyun/log/2024-09-25_info.log @@ -0,0 +1,11 @@ + +[info]{"time":"2024-09-25 14:15:35.045218","file":"/aliyun.go:94","func":"func1","gid":"57","content":["resp:{\n \"headers\": {\n \"access-control-allow-origin\": \"*\",\n \"access-control-expose-headers\": \"*\",\n \"connection\": \"keep-alive\",\n \"content-length\": \"81\",\n \"content-type\": \"application/json;charset=utf-8\",\n \"date\": \"Wed, 25 Sep 2024 06:15:34 GMT\",\n \"etag\": \"8f9dfw6sRErJKrt+hoTBWhQ1\",\n \"keep-alive\": \"timeout=25\",\n \"x-acs-request-id\": \"DC2492CF-2A5B-56CB-A605-AEEB8A39E3B4\",\n \"x-acs-trace-id\": \"e616ffedeb4d2a0be8ef74bf36aa7d03\"\n },\n \"statusCode\": 200,\n \"body\": {\n \"EnvId\": \"600000109262317450\",\n \"RequestId\": \"DC2492CF-2A5B-56CB-A605-AEEB8A39E3B4\"\n }\n} err:\u003cnil\u003e"]} +[info]{"time":"2024-09-25 14:16:59.676574","file":"/aliyun.go:94","func":"func1","gid":"53","content":["resp:{\n \"headers\": {\n \"access-control-allow-origin\": \"*\",\n \"access-control-expose-headers\": \"*\",\n \"connection\": \"keep-alive\",\n \"content-length\": \"81\",\n \"content-type\": \"application/json;charset=utf-8\",\n \"date\": \"Wed, 25 Sep 2024 06:16:59 GMT\",\n \"etag\": \"8XWguuFK0kv64XgUSTRDjQQ1\",\n \"keep-alive\": \"timeout=25\",\n \"x-acs-request-id\": \"396FAEEA-EF53-50D9-86F6-4229E0081279\",\n \"x-acs-trace-id\": \"a70ec22bb9fd7218476ef4363242e166\"\n },\n \"statusCode\": 200,\n \"body\": {\n \"EnvId\": \"600000109175592530\",\n \"RequestId\": \"396FAEEA-EF53-50D9-86F6-4229E0081279\"\n }\n} err:\u003cnil\u003e"]} +[info]{"time":"2024-09-25 14:17:35.907625","file":"/aliyun.go:94","func":"func1","gid":"52","content":["resp:{\n \"headers\": {\n \"access-control-allow-origin\": \"*\",\n \"access-control-expose-headers\": \"*\",\n \"connection\": \"keep-alive\",\n \"content-length\": \"81\",\n \"content-type\": \"application/json;charset=utf-8\",\n \"date\": \"Wed, 25 Sep 2024 06:17:35 GMT\",\n \"etag\": \"8eICx6U2H3qOv6K8RGRRP7A1\",\n \"keep-alive\": \"timeout=25\",\n \"x-acs-request-id\": \"DC8695D8-D326-52A3-B73B-F916F386B2CF\",\n \"x-acs-trace-id\": \"c826dc3f513763620ba59f048d9d8e71\"\n },\n \"statusCode\": 200,\n \"body\": {\n \"EnvId\": \"600000109435113590\",\n \"RequestId\": \"DC8695D8-D326-52A3-B73B-F916F386B2CF\"\n }\n} err:\u003cnil\u003e"]} +[info]{"time":"2024-09-25 14:22:38.398287","file":"/aliyun.go:94","func":"func1","gid":"50","content":["resp:{\n \"headers\": {\n \"access-control-allow-origin\": \"*\",\n \"access-control-expose-headers\": \"*\",\n \"connection\": \"keep-alive\",\n \"content-length\": \"81\",\n \"content-type\": \"application/json;charset=utf-8\",\n \"date\": \"Wed, 25 Sep 2024 06:22:38 GMT\",\n \"etag\": \"89EbQ3zPb8RIEJbK53hyAgQ1\",\n \"keep-alive\": \"timeout=25\",\n \"x-acs-request-id\": \"801C56E0-1498-5B09-AF52-DE958E9DB834\",\n \"x-acs-trace-id\": \"1a3d50fec251c83edb55bf48dc431eff\"\n },\n \"statusCode\": 200,\n \"body\": {\n \"EnvId\": \"600000109262322078\",\n \"RequestId\": \"801C56E0-1498-5B09-AF52-DE958E9DB834\"\n }\n} err:\u003cnil\u003e"]} +[info]{"time":"2024-09-25 17:20:19.656969","file":"/aliyun.go:94","func":"func1","gid":"53","content":["resp:{\n \"headers\": {\n \"access-control-allow-origin\": \"*\",\n \"access-control-expose-headers\": \"*\",\n \"connection\": \"keep-alive\",\n \"content-length\": \"81\",\n \"content-type\": \"application/json;charset=utf-8\",\n \"date\": \"Wed, 25 Sep 2024 09:20:19 GMT\",\n \"etag\": \"8+qybIN7HNz96KPKbfNwipw1\",\n \"keep-alive\": \"timeout=25\",\n \"x-acs-request-id\": \"A23D5487-3B08-5F91-8890-C98EDD8A0902\",\n \"x-acs-trace-id\": \"1c20039869fc8fc0a71da2c288a059d5\"\n },\n \"statusCode\": 200,\n \"body\": {\n \"EnvId\": \"600000109348886893\",\n \"RequestId\": \"A23D5487-3B08-5F91-8890-C98EDD8A0902\"\n }\n} err:\u003cnil\u003e"]} +[info]{"time":"2024-09-25 17:20:54.628471","file":"/aliyun.go:94","func":"func1","gid":"50","content":["resp:{\n \"headers\": {\n \"access-control-allow-origin\": \"*\",\n \"access-control-expose-headers\": \"*\",\n \"connection\": \"keep-alive\",\n \"content-length\": \"81\",\n \"content-type\": \"application/json;charset=utf-8\",\n \"date\": \"Wed, 25 Sep 2024 09:20:54 GMT\",\n \"etag\": \"8QixS/p2+Z7xHHIZ/VpSwtQ1\",\n \"keep-alive\": \"timeout=25\",\n \"x-acs-request-id\": \"61555477-0B6F-5E19-B3C1-CAB53CC31AFE\",\n \"x-acs-trace-id\": \"eabe03d20719d8258e78779c4bd37c88\"\n },\n \"statusCode\": 200,\n \"body\": {\n \"EnvId\": \"600000109175763220\",\n \"RequestId\": \"61555477-0B6F-5E19-B3C1-CAB53CC31AFE\"\n }\n} err:\u003cnil\u003e"]} +[info]{"time":"2024-09-25 17:21:22.460201","file":"/aliyun.go:94","func":"func1","gid":"16","content":["resp:{\n \"headers\": {\n \"access-control-allow-origin\": \"*\",\n \"access-control-expose-headers\": \"*\",\n \"connection\": \"keep-alive\",\n \"content-length\": \"81\",\n \"content-type\": \"application/json;charset=utf-8\",\n \"date\": \"Wed, 25 Sep 2024 09:21:22 GMT\",\n \"etag\": \"87/gA8cEkLTFvPqJfgP9K1A1\",\n \"keep-alive\": \"timeout=25\",\n \"x-acs-request-id\": \"76FDF640-FBB0-5B0C-827E-70B92FF62C82\",\n \"x-acs-trace-id\": \"4ad06f6435167d8ccb7e36072cd6acb9\"\n },\n \"statusCode\": 200,\n \"body\": {\n \"EnvId\": \"600000109320087021\",\n \"RequestId\": \"76FDF640-FBB0-5B0C-827E-70B92FF62C82\"\n }\n} err:\u003cnil\u003e"]} +[info]{"time":"2024-09-25 17:21:47.550484","file":"/aliyun.go:94","func":"func1","gid":"9","content":["resp:{\n \"headers\": {\n \"access-control-allow-origin\": \"*\",\n \"access-control-expose-headers\": \"*\",\n \"connection\": \"keep-alive\",\n \"content-length\": \"81\",\n \"content-type\": \"application/json;charset=utf-8\",\n \"date\": \"Wed, 25 Sep 2024 09:21:47 GMT\",\n \"etag\": \"8biiNi4vpUJzYstObqFPfxQ1\",\n \"keep-alive\": \"timeout=25\",\n \"x-acs-request-id\": \"0097D9F9-5143-5B06-B211-50C6F0299471\",\n \"x-acs-trace-id\": \"e1d69216717b0323e90275f6c460c320\"\n },\n \"statusCode\": 200,\n \"body\": {\n \"EnvId\": \"600000109377685846\",\n \"RequestId\": \"0097D9F9-5143-5B06-B211-50C6F0299471\"\n }\n} err:\u003cnil\u003e"]} +[info]{"time":"2024-09-25 17:22:23.999040","file":"/aliyun.go:94","func":"func1","gid":"11","content":["resp:{\n \"headers\": {\n \"access-control-allow-origin\": \"*\",\n \"access-control-expose-headers\": \"*\",\n \"connection\": \"keep-alive\",\n \"content-length\": \"81\",\n \"content-type\": \"application/json;charset=utf-8\",\n \"date\": \"Wed, 25 Sep 2024 09:22:23 GMT\",\n \"etag\": \"8nQth23LiOl8DONamRuHNvg1\",\n \"keep-alive\": \"timeout=25\",\n \"x-acs-request-id\": \"51D36408-D2DB-5D49-AB15-C515C1483B2C\",\n \"x-acs-trace-id\": \"8c3710e125841396fd31b65c69fdd265\"\n },\n \"statusCode\": 200,\n \"body\": {\n \"EnvId\": \"600000109377686445\",\n \"RequestId\": \"51D36408-D2DB-5D49-AB15-C515C1483B2C\"\n }\n} err:\u003cnil\u003e"]} +[info]{"time":"2024-09-25 17:22:45.785559","file":"/aliyun.go:94","func":"func1","gid":"50","content":["resp:{\n \"headers\": {\n \"access-control-allow-origin\": \"*\",\n \"access-control-expose-headers\": \"*\",\n \"connection\": \"keep-alive\",\n \"content-length\": \"81\",\n \"content-type\": \"application/json;charset=utf-8\",\n \"date\": \"Wed, 25 Sep 2024 09:22:45 GMT\",\n \"etag\": \"8ntJrjXOJMSTVmROovNQlSw1\",\n \"keep-alive\": \"timeout=25\",\n \"x-acs-request-id\": \"AB250371-0BF3-5627-92FB-4924E7127958\",\n \"x-acs-trace-id\": \"a8f4491d14db90fa47134b7f428bcb7e\"\n },\n \"statusCode\": 200,\n \"body\": {\n \"EnvId\": \"600000109262490484\",\n \"RequestId\": \"AB250371-0BF3-5627-92FB-4924E7127958\"\n }\n} err:\u003cnil\u003e"]} \ No newline at end of file diff --git a/aliyun/log/2024-09-27_error.log b/aliyun/log/2024-09-27_error.log new file mode 100644 index 0000000..878e074 --- /dev/null +++ b/aliyun/log/2024-09-27_error.log @@ -0,0 +1,2 @@ + +[error]{"time":"2024-09-27 18:28:53.627464","file":"/aliyun.go:103","func":"Send","gid":"12","content":["err:SDKError:\n StatusCode: 400\n Code: SignatureDoesNotMatch\n Message: code: 400, Specified signature does not match our calculation. server StringToSign is [ACS3-HMAC-SHA256\n26e136386f160f6fc6d5882c6dd648f8b40c66699dd6a5cbe29a3f5623968c32], server CanonicalRequest is [POST\n/\nAccountName=test%40email.aisz.org\u0026AddressType=0\u0026HtmlBody=%3C%21DOCTYPE%20html%3E%0D%0A%3Chtml%20lang%3D%22en%22%3E%0D%0A%20%20%3Chead%3E%0D%0A%20%20%20%20%3Cmeta%20charset%3D%22UTF-8%22%20%2F%3E%0D%0A%20%20%20%20%3Cmeta%20name%3D%22viewport%22%20content%3D%22width%3Ddevice-width%2C%20initial-scale%3D1.0%22%20%2F%3E%0D%0A%20%20%20%20%3Ctitle%3EDocument%3C%2Ftitle%3E%0D%0A%20%20%20%20%3C%21--%20%3Clink%20rel%3D%22stylesheet%22%20href%3D%22.%2Fassets%2Fcss%2Findex.css%22%20%2F%3E%20--%3E%0D%0A%20%20%20%20%3Cstyle%3E%0D%0A%20%20%20%20%20%20%2A%20%7B%0D%0A%20%20%20%20%20%20%20%20padding%3A%200%3B%0D%0A%20%20%20%20%20%20%20%20margin%3A%200%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20img%20%7B%0D%0A%20%20%20%20%20%20%20%20display%3A%20block%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20%23app%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%20480px%3B%0D%0A%20%20%20%20%20%20%20%20margin%3A%200%20auto%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.my-header%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%20100%25%3B%0D%0A%20%20%20%20%20%20%20%20height%3A%2096px%3B%0D%0A%20%20%20%20%20%20%20%20background-color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.my-header%20.logo%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%2095px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.code-tips%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2012px%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2022px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.code-content%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%20%20font-weight%3A%20bold%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2028px%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2061px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.team-tips%20%7B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2011px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2059px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20%2F%2A%20.team-tips%3A%3Amarker%20%7B%0D%0A%20%20margin-right%3A%202px%20%21important%3B%0D%0A%7D%20%2A%2F%0D%0A%0D%0A%20%20%20%20%20%20.contact-us%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23d1d1d1%3B%0D%0A%20%20%20%20%20%20%20%20padding-top%3A%2024px%3B%0D%0A%20%20%20%20%20%20%20%20border-top%3A%20solid%200.5px%20%23d1d1d1%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-us-info%20%7B%0D%0A%20%20%20%20%20%20%20%20text-align%3A%20center%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2010px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23838384%3B%0D%0A%20%20%20%20%20%20%20%20padding%3A%200%2040px%3B%0D%0A%20%20%20%20%20%20%20%20line-height%3A%2018px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-tel%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23838384%3B%0D%0A%20%20%20%20%20%20%20%20text-align%3A%20center%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2010px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-tel-number%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-created-version%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23838384%3B%0D%0A%20%20%20%20%20%20%20%20text-align%3A%20center%3B%0D%0A%20%20%20%20%20%20%20%20margin-top%3A%207px%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2010px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.qr-code%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%2064px%3B%0D%0A%20%20%20%20%20%20%20%20margin%3A%209px%20auto%2015px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20%2F%2A%20%E5%BC%82%E5%B8%B8%E9%82%AE%E4%BB%B6%20%2A%2F%0D%0A%0D%0A%20%20%20%20%20%20.exception-title%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2016px%3B%0D%0A%20%20%20%20%20%20%20%20font-weight%3A%20bold%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2024px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.exception-content%20%7B%0D%0A%20%20%20%20%20%20%20%20line-height%3A%2024px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2012px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.exception-ignore%20%7B%0D%0A%20%20%20%20%20%20%20%20margin-top%3A%2045px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2012px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.exception-team-tips%20%7B%0D%0A%20%20%20%20%20%20%20%20margin-top%3A%2085px%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2020px%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2011px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%20%20%20%20%3C%2Fstyle%3E%0D%0A%20%20%3C%2Fhead%3E%0D%0A%20%20%3Cbody%3E%0D%0A%20%20%20%20%3Cdiv%20id%3D%22app%22%3E%0D%0A%20%20%20%20%20%20%3Cdiv%20class%3D%22my-header%22%20style%3D%22display%3A%20flex%22%3E%0D%0A%20%20%20%20%20%20%20%20%3Cimg%20style%3D%22margin%3A%20auto%3B%22%20src%3D%22https%3A%2F%2Fabpay-pub.s3.ap-northeast-1.amazonaws.com%2Fabpay1.png%22%20alt%3D%22%22%20class%3D%22logo%22%20%2F%3E%0D%0A%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%0D%0A%20%20%20%20%20%20%3Cdiv%20style%3D%22padding%3A%2022px%2024px%20%21important%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22title-1%22%3E%7B%7B.title%7D%7D%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22code-tips%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%7B%7B.content%7D%7D%0D%0A%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%0D%0A%0D%0A%20%20%20%20%20%20%20%20%3Cli%20class%3D%22team-tips%22%3EABpay%E9%96%8B%E7%99%BC%E8%80%85%E5%9C%98%E9%9A%8A%E6%9C%8D%E5%8B%99%3C%2Fli%3E%0D%0A%0D%0A%20%20%20%20%20%20%20%20%3Csection%20class%3D%22contact-us%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-us-info%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%E6%9C%AC%E9%83%B5%E4%BB%B6%E7%94%B1%E7%B3%BB%E7%B5%B1%E8%87%AA%E5%8B%95%E7%99%BC%E5%87%BA%E8%AB%8B%E5%8B%BF%E5%9B%9E%E5%A4%8D%EF%BC%8C%E5%A6%82%E9%9C%80%E8%A6%81%E4%BA%86%E8%A7%A3%E6%9B%B4%E5%A4%9A%E6%9C%8D%E5%8B%99%EF%BC%8C%E6%AD%A1%E8%BF%8E%E8%A8%AA%E5%95%8FABpay%E5%AE%98%E6%96%B9%E7%B6%B2%0D%0A%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-us-info%22%3E%E4%B9%9F%E5%8F%AF%E4%BB%A5%E9%80%9A%E4%BB%A5%E4%B8%8B%E6%96%B9%E5%BC%8F%E8%81%AF%E7%B5%A1%E6%88%91%E5%80%91%3C%2Fdiv%3E%0D%0A%0D%0A%20%20%20%20%20%20%20%20%20%20%3Ca%20href%3D%22https%3A%2F%2Fwww.baidu.com%22%20target%3D%22_blank%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cimg%20src%3D%22https%3A%2F%2Fabpay-pub.s3.ap-northeast-1.amazonaws.com%2Fabpay.png%22%20alt%3D%22%22%20class%3D%22qr-code%22%20%2F%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3C%2Fa%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-tel%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%E5%AE%A2%E6%9C%8D%E9%9B%BB%E8%A9%B1%EF%BC%9A%3Cspan%20class%3D%22contact-tel-number%22%3E400-278-2890%3C%2Fspan%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-created-version%22%3E2024%20ABpay.com.cn%20.%20All%20rightes%20reserved%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%3C%2Fsection%3E%0D%0A%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%3C%2Fbody%3E%0D%0A%3C%2Fhtml%3E%0D%0A\u0026ReplyToAddress=true\u0026Subject=%E6%B5%8B%E8%AF%95%E4%B8%BB%E9%A2%98\u0026ToAddress=huangxinyun%40dreaminglife.cn\nhost:dm.aliyuncs.com\nx-acs-action:SingleSendMail\nx-acs-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\nx-acs-date:2024-09-27T10:28:53Z\nx-acs-signature-nonce:945a71e23facf52dc44e2523f618e145\nx-acs-version:2015-11-23\n\nhost;x-acs-action;x-acs-content-sha256;x-acs-date;x-acs-signature-nonce;x-acs-version\ne3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855] request id: F0518A47-588B-54EB-B351-A4E51BD19424\n Data: {\"Code\":\"SignatureDoesNotMatch\",\"HostId\":\"dm.aliyuncs.com\",\"Message\":\"Specified signature does not match our calculation. server StringToSign is [ACS3-HMAC-SHA256\\n26e136386f160f6fc6d5882c6dd648f8b40c66699dd6a5cbe29a3f5623968c32], server CanonicalRequest is [POST\\n/\\nAccountName=test%40email.aisz.org\\u0026AddressType=0\\u0026HtmlBody=%3C%21DOCTYPE%20html%3E%0D%0A%3Chtml%20lang%3D%22en%22%3E%0D%0A%20%20%3Chead%3E%0D%0A%20%20%20%20%3Cmeta%20charset%3D%22UTF-8%22%20%2F%3E%0D%0A%20%20%20%20%3Cmeta%20name%3D%22viewport%22%20content%3D%22width%3Ddevice-width%2C%20initial-scale%3D1.0%22%20%2F%3E%0D%0A%20%20%20%20%3Ctitle%3EDocument%3C%2Ftitle%3E%0D%0A%20%20%20%20%3C%21--%20%3Clink%20rel%3D%22stylesheet%22%20href%3D%22.%2Fassets%2Fcss%2Findex.css%22%20%2F%3E%20--%3E%0D%0A%20%20%20%20%3Cstyle%3E%0D%0A%20%20%20%20%20%20%2A%20%7B%0D%0A%20%20%20%20%20%20%20%20padding%3A%200%3B%0D%0A%20%20%20%20%20%20%20%20margin%3A%200%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20img%20%7B%0D%0A%20%20%20%20%20%20%20%20display%3A%20block%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20%23app%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%20480px%3B%0D%0A%20%20%20%20%20%20%20%20margin%3A%200%20auto%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.my-header%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%20100%25%3B%0D%0A%20%20%20%20%20%20%20%20height%3A%2096px%3B%0D%0A%20%20%20%20%20%20%20%20background-color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.my-header%20.logo%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%2095px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.code-tips%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2012px%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2022px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.code-content%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%20%20font-weight%3A%20bold%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2028px%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2061px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.team-tips%20%7B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2011px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2059px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20%2F%2A%20.team-tips%3A%3Amarker%20%7B%0D%0A%20%20margin-right%3A%202px%20%21important%3B%0D%0A%7D%20%2A%2F%0D%0A%0D%0A%20%20%20%20%20%20.contact-us%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23d1d1d1%3B%0D%0A%20%20%20%20%20%20%20%20padding-top%3A%2024px%3B%0D%0A%20%20%20%20%20%20%20%20border-top%3A%20solid%200.5px%20%23d1d1d1%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-us-info%20%7B%0D%0A%20%20%20%20%20%20%20%20text-align%3A%20center%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2010px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23838384%3B%0D%0A%20%20%20%20%20%20%20%20padding%3A%200%2040px%3B%0D%0A%20%20%20%20%20%20%20%20line-height%3A%2018px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-tel%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23838384%3B%0D%0A%20%20%20%20%20%20%20%20text-align%3A%20center%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2010px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-tel-number%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-created-version%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23838384%3B%0D%0A%20%20%20%20%20%20%20%20text-align%3A%20center%3B%0D%0A%20%20%20%20%20%20%20%20margin-top%3A%207px%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2010px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.qr-code%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%2064px%3B%0D%0A%20%20%20%20%20%20%20%20margin%3A%209px%20auto%2015px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20%2F%2A%20%E5%BC%82%E5%B8%B8%E9%82%AE%E4%BB%B6%20%2A%2F%0D%0A%0D%0A%20%20%20%20%20%20.exception-title%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2016px%3B%0D%0A%20%20%20%20%20%20%20%20font-weight%3A%20bold%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2024px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.exception-content%20%7B%0D%0A%20%20%20%20%20%20%20%20line-height%3A%2024px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2012px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.exception-ignore%20%7B%0D%0A%20%20%20%20%20%20%20%20margin-top%3A%2045px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2012px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.exception-team-tips%20%7B%0D%0A%20%20%20%20%20%20%20%20margin-top%3A%2085px%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2020px%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2011px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%20%20%20%20%3C%2Fstyle%3E%0D%0A%20%20%3C%2Fhead%3E%0D%0A%20%20%3Cbody%3E%0D%0A%20%20%20%20%3Cdiv%20id%3D%22app%22%3E%0D%0A%20%20%20%20%20%20%3Cdiv%20class%3D%22my-header%22%20style%3D%22display%3A%20flex%22%3E%0D%0A%20%20%20%20%20%20%20%20%3Cimg%20style%3D%22margin%3A%20auto%3B%22%20src%3D%22https%3A%2F%2Fabpay-pub.s3.ap-northeast-1.amazonaws.com%2Fabpay1.png%22%20alt%3D%22%22%20class%3D%22logo%22%20%2F%3E%0D%0A%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%0D%0A%20%20%20%20%20%20%3Cdiv%20style%3D%22padding%3A%2022px%2024px%20%21important%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22title-1%22%3E%7B%7B.title%7D%7D%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22code-tips%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%7B%7B.content%7D%7D%0D%0A%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%0D%0A%0D%0A%20%20%20%20%20%20%20%20%3Cli%20class%3D%22team-tips%22%3EABpay%E9%96%8B%E7%99%BC%E8%80%85%E5%9C%98%E9%9A%8A%E6%9C%8D%E5%8B%99%3C%2Fli%3E%0D%0A%0D%0A%20%20%20%20%20%20%20%20%3Csection%20class%3D%22contact-us%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-us-info%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%E6%9C%AC%E9%83%B5%E4%BB%B6%E7%94%B1%E7%B3%BB%E7%B5%B1%E8%87%AA%E5%8B%95%E7%99%BC%E5%87%BA%E8%AB%8B%E5%8B%BF%E5%9B%9E%E5%A4%8D%EF%BC%8C%E5%A6%82%E9%9C%80%E8%A6%81%E4%BA%86%E8%A7%A3%E6%9B%B4%E5%A4%9A%E6%9C%8D%E5%8B%99%EF%BC%8C%E6%AD%A1%E8%BF%8E%E8%A8%AA%E5%95%8FABpay%E5%AE%98%E6%96%B9%E7%B6%B2%0D%0A%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-us-info%22%3E%E4%B9%9F%E5%8F%AF%E4%BB%A5%E9%80%9A%E4%BB%A5%E4%B8%8B%E6%96%B9%E5%BC%8F%E8%81%AF%E7%B5%A1%E6%88%91%E5%80%91%3C%2Fdiv%3E%0D%0A%0D%0A%20%20%20%20%20%20%20%20%20%20%3Ca%20href%3D%22https%3A%2F%2Fwww.baidu.com%22%20target%3D%22_blank%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cimg%20src%3D%22https%3A%2F%2Fabpay-pub.s3.ap-northeast-1.amazonaws.com%2Fabpay.png%22%20alt%3D%22%22%20class%3D%22qr-code%22%20%2F%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3C%2Fa%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-tel%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%E5%AE%A2%E6%9C%8D%E9%9B%BB%E8%A9%B1%EF%BC%9A%3Cspan%20class%3D%22contact-tel-number%22%3E400-278-2890%3C%2Fspan%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-created-version%22%3E2024%20ABpay.com.cn%20.%20All%20rightes%20reserved%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%3C%2Fsection%3E%0D%0A%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%3C%2Fbody%3E%0D%0A%3C%2Fhtml%3E%0D%0A\\u0026ReplyToAddress=true\\u0026Subject=%E6%B5%8B%E8%AF%95%E4%B8%BB%E9%A2%98\\u0026ToAddress=huangxinyun%40dreaminglife.cn\\nhost:dm.aliyuncs.com\\nx-acs-action:SingleSendMail\\nx-acs-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\\nx-acs-date:2024-09-27T10:28:53Z\\nx-acs-signature-nonce:945a71e23facf52dc44e2523f618e145\\nx-acs-version:2015-11-23\\n\\nhost;x-acs-action;x-acs-content-sha256;x-acs-date;x-acs-signature-nonce;x-acs-version\\ne3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855]\",\"Recommend\":\"https://api.aliyun.com/troubleshoot?q=SignatureDoesNotMatch\\u0026product=Dm\\u0026requestId=F0518A47-588B-54EB-B351-A4E51BD19424\",\"RequestId\":\"F0518A47-588B-54EB-B351-A4E51BD19424\",\"statusCode\":400}\n"]} \ No newline at end of file diff --git a/aliyun/log/2024-09-27_info.log b/aliyun/log/2024-09-27_info.log new file mode 100644 index 0000000..f306168 --- /dev/null +++ b/aliyun/log/2024-09-27_info.log @@ -0,0 +1,9 @@ + +[info]{"time":"2024-09-27 16:20:38.734766","file":"/aliyun.go:94","func":"func1","gid":"9","content":["resp:{\n \"headers\": {\n \"access-control-allow-origin\": \"*\",\n \"access-control-expose-headers\": \"*\",\n \"connection\": \"keep-alive\",\n \"content-length\": \"81\",\n \"content-type\": \"application/json;charset=utf-8\",\n \"date\": \"Fri, 27 Sep 2024 08:20:38 GMT\",\n \"etag\": \"8x+rOMqBvYr3MynlXjofM5Q1\",\n \"keep-alive\": \"timeout=25\",\n \"x-acs-request-id\": \"9B2934BE-BE71-5489-8B79-DA7D475D6F7B\",\n \"x-acs-trace-id\": \"6c8984ef0a7fac32a5541858b12517ca\"\n },\n \"statusCode\": 200,\n \"body\": {\n \"EnvId\": \"600000109408243309\",\n \"RequestId\": \"9B2934BE-BE71-5489-8B79-DA7D475D6F7B\"\n }\n} err:\u003cnil\u003e"]} +[info]{"time":"2024-09-27 16:22:35.271767","file":"/aliyun.go:94","func":"func1","gid":"44","content":["resp:{\n \"headers\": {\n \"access-control-allow-origin\": \"*\",\n \"access-control-expose-headers\": \"*\",\n \"connection\": \"keep-alive\",\n \"content-length\": \"81\",\n \"content-type\": \"application/json;charset=utf-8\",\n \"date\": \"Fri, 27 Sep 2024 08:22:35 GMT\",\n \"etag\": \"8dAlIwG3PcCPmuPZ3x+OO5A1\",\n \"keep-alive\": \"timeout=25\",\n \"x-acs-request-id\": \"C06FDBA6-BF50-5D0B-9FC4-0496C8D40ADF\",\n \"x-acs-trace-id\": \"4dd2ef4f9b18129c72bc61d215c5bac0\"\n },\n \"statusCode\": 200,\n \"body\": {\n \"EnvId\": \"600000109177524598\",\n \"RequestId\": \"C06FDBA6-BF50-5D0B-9FC4-0496C8D40ADF\"\n }\n} err:\u003cnil\u003e"]} +[info]{"time":"2024-09-27 18:25:09.055736","file":"/aliyun.go:94","func":"func1","gid":"51","content":["resp:{} err:SDKError:\n StatusCode: 400\n Code: SignatureDoesNotMatch\n Message: code: 400, Specified signature does not match our calculation. server StringToSign is [ACS3-HMAC-SHA256\n20997949d3c5beb9d5c9c1183b3d77a7a9315b39907f9b9299528410d4f794ff], server CanonicalRequest is [POST\n/\nAccountName=test%40email.aisz.org\u0026AddressType=0\u0026HtmlBody=%3C%21DOCTYPE%20html%3E%0D%0A%3Chtml%20lang%3D%22en%22%3E%0D%0A%20%20%3Chead%3E%0D%0A%20%20%20%20%3Cmeta%20charset%3D%22UTF-8%22%20%2F%3E%0D%0A%20%20%20%20%3Cmeta%20name%3D%22viewport%22%20content%3D%22width%3Ddevice-width%2C%20initial-scale%3D1.0%22%20%2F%3E%0D%0A%20%20%20%20%3Ctitle%3EDocument%3C%2Ftitle%3E%0D%0A%20%20%20%20%3C%21--%20%3Clink%20rel%3D%22stylesheet%22%20href%3D%22.%2Fassets%2Fcss%2Findex.css%22%20%2F%3E%20--%3E%0D%0A%20%20%20%20%3Cstyle%3E%0D%0A%20%20%20%20%20%20%2A%20%7B%0D%0A%20%20%20%20%20%20%20%20padding%3A%200%3B%0D%0A%20%20%20%20%20%20%20%20margin%3A%200%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20img%20%7B%0D%0A%20%20%20%20%20%20%20%20display%3A%20block%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20%23app%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%20480px%3B%0D%0A%20%20%20%20%20%20%20%20margin%3A%200%20auto%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.my-header%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%20100%25%3B%0D%0A%20%20%20%20%20%20%20%20height%3A%2096px%3B%0D%0A%20%20%20%20%20%20%20%20background-color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.my-header%20.logo%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%2095px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.code-tips%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2012px%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2022px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.code-content%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%20%20font-weight%3A%20bold%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2028px%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2061px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.team-tips%20%7B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2011px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2059px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20%2F%2A%20.team-tips%3A%3Amarker%20%7B%0D%0A%20%20margin-right%3A%202px%20%21important%3B%0D%0A%7D%20%2A%2F%0D%0A%0D%0A%20%20%20%20%20%20.contact-us%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23d1d1d1%3B%0D%0A%20%20%20%20%20%20%20%20padding-top%3A%2024px%3B%0D%0A%20%20%20%20%20%20%20%20border-top%3A%20solid%200.5px%20%23d1d1d1%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-us-info%20%7B%0D%0A%20%20%20%20%20%20%20%20text-align%3A%20center%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2010px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23838384%3B%0D%0A%20%20%20%20%20%20%20%20padding%3A%200%2040px%3B%0D%0A%20%20%20%20%20%20%20%20line-height%3A%2018px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-tel%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23838384%3B%0D%0A%20%20%20%20%20%20%20%20text-align%3A%20center%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2010px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-tel-number%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-created-version%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23838384%3B%0D%0A%20%20%20%20%20%20%20%20text-align%3A%20center%3B%0D%0A%20%20%20%20%20%20%20%20margin-top%3A%207px%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2010px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.qr-code%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%2064px%3B%0D%0A%20%20%20%20%20%20%20%20margin%3A%209px%20auto%2015px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20%2F%2A%20%E5%BC%82%E5%B8%B8%E9%82%AE%E4%BB%B6%20%2A%2F%0D%0A%0D%0A%20%20%20%20%20%20.exception-title%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2016px%3B%0D%0A%20%20%20%20%20%20%20%20font-weight%3A%20bold%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2024px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.exception-content%20%7B%0D%0A%20%20%20%20%20%20%20%20line-height%3A%2024px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2012px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.exception-ignore%20%7B%0D%0A%20%20%20%20%20%20%20%20margin-top%3A%2045px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2012px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.exception-team-tips%20%7B%0D%0A%20%20%20%20%20%20%20%20margin-top%3A%2085px%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2020px%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2011px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%20%20%20%20%3C%2Fstyle%3E%0D%0A%20%20%3C%2Fhead%3E%0D%0A%20%20%3Cbody%3E%0D%0A%20%20%20%20%3Cdiv%20id%3D%22app%22%3E%0D%0A%20%20%20%20%20%20%3Cdiv%20class%3D%22my-header%22%20style%3D%22display%3A%20flex%22%3E%0D%0A%20%20%20%20%20%20%20%20%3Cimg%20style%3D%22margin%3A%20auto%3B%22%20src%3D%22https%3A%2F%2Fabpay-pub.s3.ap-northeast-1.amazonaws.com%2Fabpay1.png%22%20alt%3D%22%22%20class%3D%22logo%22%20%2F%3E%0D%0A%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%0D%0A%20%20%20%20%20%20%3Cdiv%20style%3D%22padding%3A%2022px%2024px%20%21important%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22title-1%22%3E%7B%7B.title%7D%7D%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22code-tips%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%7B%7B.content%7D%7D%0D%0A%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%0D%0A%0D%0A%20%20%20%20%20%20%20%20%3Cli%20class%3D%22team-tips%22%3EABpay%E9%96%8B%E7%99%BC%E8%80%85%E5%9C%98%E9%9A%8A%E6%9C%8D%E5%8B%99%3C%2Fli%3E%0D%0A%0D%0A%20%20%20%20%20%20%20%20%3Csection%20class%3D%22contact-us%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-us-info%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%E6%9C%AC%E9%83%B5%E4%BB%B6%E7%94%B1%E7%B3%BB%E7%B5%B1%E8%87%AA%E5%8B%95%E7%99%BC%E5%87%BA%E8%AB%8B%E5%8B%BF%E5%9B%9E%E5%A4%8D%EF%BC%8C%E5%A6%82%E9%9C%80%E8%A6%81%E4%BA%86%E8%A7%A3%E6%9B%B4%E5%A4%9A%E6%9C%8D%E5%8B%99%EF%BC%8C%E6%AD%A1%E8%BF%8E%E8%A8%AA%E5%95%8FABpay%E5%AE%98%E6%96%B9%E7%B6%B2%0D%0A%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-us-info%22%3E%E4%B9%9F%E5%8F%AF%E4%BB%A5%E9%80%9A%E4%BB%A5%E4%B8%8B%E6%96%B9%E5%BC%8F%E8%81%AF%E7%B5%A1%E6%88%91%E5%80%91%3C%2Fdiv%3E%0D%0A%0D%0A%20%20%20%20%20%20%20%20%20%20%3Ca%20href%3D%22https%3A%2F%2Fwww.baidu.com%22%20target%3D%22_blank%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cimg%20src%3D%22https%3A%2F%2Fabpay-pub.s3.ap-northeast-1.amazonaws.com%2Fabpay.png%22%20alt%3D%22%22%20class%3D%22qr-code%22%20%2F%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3C%2Fa%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-tel%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%E5%AE%A2%E6%9C%8D%E9%9B%BB%E8%A9%B1%EF%BC%9A%3Cspan%20class%3D%22contact-tel-number%22%3E400-278-2890%3C%2Fspan%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-created-version%22%3E2024%20ABpay.com.cn%20.%20All%20rightes%20reserved%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%3C%2Fsection%3E%0D%0A%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%3C%2Fbody%3E%0D%0A%3C%2Fhtml%3E%0D%0A\u0026ReplyToAddress=true\u0026Subject=%E6%B5%8B%E8%AF%95%E4%B8%BB%E9%A2%98\u0026ToAddress=huangxinyun%40dreaminglife.cn\nhost:dm.aliyuncs.com\nx-acs-action:SingleSendMail\nx-acs-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\nx-acs-date:2024-09-27T10:25:08Z\nx-acs-signature-nonce:97f8f7488593cd5d5af048289ad224cc\nx-acs-version:2015-11-23\n\nhost;x-acs-action;x-acs-content-sha256;x-acs-date;x-acs-signature-nonce;x-acs-version\ne3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855] request id: EB048C56-078B-55A5-894B-4541410ECB2F\n Data: {\"Code\":\"SignatureDoesNotMatch\",\"HostId\":\"dm.aliyuncs.com\",\"Message\":\"Specified signature does not match our calculation. server StringToSign is [ACS3-HMAC-SHA256\\n20997949d3c5beb9d5c9c1183b3d77a7a9315b39907f9b9299528410d4f794ff], server CanonicalRequest is [POST\\n/\\nAccountName=test%40email.aisz.org\\u0026AddressType=0\\u0026HtmlBody=%3C%21DOCTYPE%20html%3E%0D%0A%3Chtml%20lang%3D%22en%22%3E%0D%0A%20%20%3Chead%3E%0D%0A%20%20%20%20%3Cmeta%20charset%3D%22UTF-8%22%20%2F%3E%0D%0A%20%20%20%20%3Cmeta%20name%3D%22viewport%22%20content%3D%22width%3Ddevice-width%2C%20initial-scale%3D1.0%22%20%2F%3E%0D%0A%20%20%20%20%3Ctitle%3EDocument%3C%2Ftitle%3E%0D%0A%20%20%20%20%3C%21--%20%3Clink%20rel%3D%22stylesheet%22%20href%3D%22.%2Fassets%2Fcss%2Findex.css%22%20%2F%3E%20--%3E%0D%0A%20%20%20%20%3Cstyle%3E%0D%0A%20%20%20%20%20%20%2A%20%7B%0D%0A%20%20%20%20%20%20%20%20padding%3A%200%3B%0D%0A%20%20%20%20%20%20%20%20margin%3A%200%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20img%20%7B%0D%0A%20%20%20%20%20%20%20%20display%3A%20block%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20%23app%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%20480px%3B%0D%0A%20%20%20%20%20%20%20%20margin%3A%200%20auto%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.my-header%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%20100%25%3B%0D%0A%20%20%20%20%20%20%20%20height%3A%2096px%3B%0D%0A%20%20%20%20%20%20%20%20background-color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.my-header%20.logo%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%2095px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.code-tips%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2012px%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2022px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.code-content%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%20%20font-weight%3A%20bold%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2028px%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2061px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.team-tips%20%7B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2011px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2059px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20%2F%2A%20.team-tips%3A%3Amarker%20%7B%0D%0A%20%20margin-right%3A%202px%20%21important%3B%0D%0A%7D%20%2A%2F%0D%0A%0D%0A%20%20%20%20%20%20.contact-us%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23d1d1d1%3B%0D%0A%20%20%20%20%20%20%20%20padding-top%3A%2024px%3B%0D%0A%20%20%20%20%20%20%20%20border-top%3A%20solid%200.5px%20%23d1d1d1%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-us-info%20%7B%0D%0A%20%20%20%20%20%20%20%20text-align%3A%20center%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2010px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23838384%3B%0D%0A%20%20%20%20%20%20%20%20padding%3A%200%2040px%3B%0D%0A%20%20%20%20%20%20%20%20line-height%3A%2018px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-tel%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23838384%3B%0D%0A%20%20%20%20%20%20%20%20text-align%3A%20center%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2010px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-tel-number%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-created-version%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23838384%3B%0D%0A%20%20%20%20%20%20%20%20text-align%3A%20center%3B%0D%0A%20%20%20%20%20%20%20%20margin-top%3A%207px%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2010px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.qr-code%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%2064px%3B%0D%0A%20%20%20%20%20%20%20%20margin%3A%209px%20auto%2015px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20%2F%2A%20%E5%BC%82%E5%B8%B8%E9%82%AE%E4%BB%B6%20%2A%2F%0D%0A%0D%0A%20%20%20%20%20%20.exception-title%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2016px%3B%0D%0A%20%20%20%20%20%20%20%20font-weight%3A%20bold%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2024px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.exception-content%20%7B%0D%0A%20%20%20%20%20%20%20%20line-height%3A%2024px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2012px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.exception-ignore%20%7B%0D%0A%20%20%20%20%20%20%20%20margin-top%3A%2045px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2012px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.exception-team-tips%20%7B%0D%0A%20%20%20%20%20%20%20%20margin-top%3A%2085px%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2020px%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2011px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%20%20%20%20%3C%2Fstyle%3E%0D%0A%20%20%3C%2Fhead%3E%0D%0A%20%20%3Cbody%3E%0D%0A%20%20%20%20%3Cdiv%20id%3D%22app%22%3E%0D%0A%20%20%20%20%20%20%3Cdiv%20class%3D%22my-header%22%20style%3D%22display%3A%20flex%22%3E%0D%0A%20%20%20%20%20%20%20%20%3Cimg%20style%3D%22margin%3A%20auto%3B%22%20src%3D%22https%3A%2F%2Fabpay-pub.s3.ap-northeast-1.amazonaws.com%2Fabpay1.png%22%20alt%3D%22%22%20class%3D%22logo%22%20%2F%3E%0D%0A%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%0D%0A%20%20%20%20%20%20%3Cdiv%20style%3D%22padding%3A%2022px%2024px%20%21important%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22title-1%22%3E%7B%7B.title%7D%7D%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22code-tips%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%7B%7B.content%7D%7D%0D%0A%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%0D%0A%0D%0A%20%20%20%20%20%20%20%20%3Cli%20class%3D%22team-tips%22%3EABpay%E9%96%8B%E7%99%BC%E8%80%85%E5%9C%98%E9%9A%8A%E6%9C%8D%E5%8B%99%3C%2Fli%3E%0D%0A%0D%0A%20%20%20%20%20%20%20%20%3Csection%20class%3D%22contact-us%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-us-info%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%E6%9C%AC%E9%83%B5%E4%BB%B6%E7%94%B1%E7%B3%BB%E7%B5%B1%E8%87%AA%E5%8B%95%E7%99%BC%E5%87%BA%E8%AB%8B%E5%8B%BF%E5%9B%9E%E5%A4%8D%EF%BC%8C%E5%A6%82%E9%9C%80%E8%A6%81%E4%BA%86%E8%A7%A3%E6%9B%B4%E5%A4%9A%E6%9C%8D%E5%8B%99%EF%BC%8C%E6%AD%A1%E8%BF%8E%E8%A8%AA%E5%95%8FABpay%E5%AE%98%E6%96%B9%E7%B6%B2%0D%0A%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-us-info%22%3E%E4%B9%9F%E5%8F%AF%E4%BB%A5%E9%80%9A%E4%BB%A5%E4%B8%8B%E6%96%B9%E5%BC%8F%E8%81%AF%E7%B5%A1%E6%88%91%E5%80%91%3C%2Fdiv%3E%0D%0A%0D%0A%20%20%20%20%20%20%20%20%20%20%3Ca%20href%3D%22https%3A%2F%2Fwww.baidu.com%22%20target%3D%22_blank%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cimg%20src%3D%22https%3A%2F%2Fabpay-pub.s3.ap-northeast-1.amazonaws.com%2Fabpay.png%22%20alt%3D%22%22%20class%3D%22qr-code%22%20%2F%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3C%2Fa%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-tel%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%E5%AE%A2%E6%9C%8D%E9%9B%BB%E8%A9%B1%EF%BC%9A%3Cspan%20class%3D%22contact-tel-number%22%3E400-278-2890%3C%2Fspan%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-created-version%22%3E2024%20ABpay.com.cn%20.%20All%20rightes%20reserved%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%3C%2Fsection%3E%0D%0A%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%3C%2Fbody%3E%0D%0A%3C%2Fhtml%3E%0D%0A\\u0026ReplyToAddress=true\\u0026Subject=%E6%B5%8B%E8%AF%95%E4%B8%BB%E9%A2%98\\u0026ToAddress=huangxinyun%40dreaminglife.cn\\nhost:dm.aliyuncs.com\\nx-acs-action:SingleSendMail\\nx-acs-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\\nx-acs-date:2024-09-27T10:25:08Z\\nx-acs-signature-nonce:97f8f7488593cd5d5af048289ad224cc\\nx-acs-version:2015-11-23\\n\\nhost;x-acs-action;x-acs-content-sha256;x-acs-date;x-acs-signature-nonce;x-acs-version\\ne3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855]\",\"Recommend\":\"https://api.aliyun.com/troubleshoot?q=SignatureDoesNotMatch\\u0026product=Dm\\u0026requestId=EB048C56-078B-55A5-894B-4541410ECB2F\",\"RequestId\":\"EB048C56-078B-55A5-894B-4541410ECB2F\",\"statusCode\":400}\n"]} +[info]{"time":"2024-09-27 18:25:51.791684","file":"/aliyun.go:94","func":"func1","gid":"15","content":["resp:{} err:SDKError:\n StatusCode: 400\n Code: SignatureDoesNotMatch\n Message: code: 400, Specified signature does not match our calculation. server StringToSign is [ACS3-HMAC-SHA256\ncff36b2084df9f09d31360c81d3a865e5767f5bcebbad7473283daf87bce67ff], server CanonicalRequest is [POST\n/\nAccountName=test%40email.aisz.org\u0026AddressType=0\u0026HtmlBody=%3C%21DOCTYPE%20html%3E%0D%0A%3Chtml%20lang%3D%22en%22%3E%0D%0A%20%20%3Chead%3E%0D%0A%20%20%20%20%3Cmeta%20charset%3D%22UTF-8%22%20%2F%3E%0D%0A%20%20%20%20%3Cmeta%20name%3D%22viewport%22%20content%3D%22width%3Ddevice-width%2C%20initial-scale%3D1.0%22%20%2F%3E%0D%0A%20%20%20%20%3Ctitle%3EDocument%3C%2Ftitle%3E%0D%0A%20%20%20%20%3C%21--%20%3Clink%20rel%3D%22stylesheet%22%20href%3D%22.%2Fassets%2Fcss%2Findex.css%22%20%2F%3E%20--%3E%0D%0A%20%20%20%20%3Cstyle%3E%0D%0A%20%20%20%20%20%20%2A%20%7B%0D%0A%20%20%20%20%20%20%20%20padding%3A%200%3B%0D%0A%20%20%20%20%20%20%20%20margin%3A%200%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20img%20%7B%0D%0A%20%20%20%20%20%20%20%20display%3A%20block%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20%23app%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%20480px%3B%0D%0A%20%20%20%20%20%20%20%20margin%3A%200%20auto%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.my-header%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%20100%25%3B%0D%0A%20%20%20%20%20%20%20%20height%3A%2096px%3B%0D%0A%20%20%20%20%20%20%20%20background-color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.my-header%20.logo%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%2095px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.code-tips%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2012px%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2022px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.code-content%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%20%20font-weight%3A%20bold%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2028px%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2061px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.team-tips%20%7B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2011px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2059px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20%2F%2A%20.team-tips%3A%3Amarker%20%7B%0D%0A%20%20margin-right%3A%202px%20%21important%3B%0D%0A%7D%20%2A%2F%0D%0A%0D%0A%20%20%20%20%20%20.contact-us%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23d1d1d1%3B%0D%0A%20%20%20%20%20%20%20%20padding-top%3A%2024px%3B%0D%0A%20%20%20%20%20%20%20%20border-top%3A%20solid%200.5px%20%23d1d1d1%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-us-info%20%7B%0D%0A%20%20%20%20%20%20%20%20text-align%3A%20center%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2010px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23838384%3B%0D%0A%20%20%20%20%20%20%20%20padding%3A%200%2040px%3B%0D%0A%20%20%20%20%20%20%20%20line-height%3A%2018px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-tel%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23838384%3B%0D%0A%20%20%20%20%20%20%20%20text-align%3A%20center%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2010px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-tel-number%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-created-version%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23838384%3B%0D%0A%20%20%20%20%20%20%20%20text-align%3A%20center%3B%0D%0A%20%20%20%20%20%20%20%20margin-top%3A%207px%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2010px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.qr-code%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%2064px%3B%0D%0A%20%20%20%20%20%20%20%20margin%3A%209px%20auto%2015px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20%2F%2A%20%E5%BC%82%E5%B8%B8%E9%82%AE%E4%BB%B6%20%2A%2F%0D%0A%0D%0A%20%20%20%20%20%20.exception-title%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2016px%3B%0D%0A%20%20%20%20%20%20%20%20font-weight%3A%20bold%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2024px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.exception-content%20%7B%0D%0A%20%20%20%20%20%20%20%20line-height%3A%2024px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2012px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.exception-ignore%20%7B%0D%0A%20%20%20%20%20%20%20%20margin-top%3A%2045px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2012px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.exception-team-tips%20%7B%0D%0A%20%20%20%20%20%20%20%20margin-top%3A%2085px%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2020px%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2011px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%20%20%20%20%3C%2Fstyle%3E%0D%0A%20%20%3C%2Fhead%3E%0D%0A%20%20%3Cbody%3E%0D%0A%20%20%20%20%3Cdiv%20id%3D%22app%22%3E%0D%0A%20%20%20%20%20%20%3Cdiv%20class%3D%22my-header%22%20style%3D%22display%3A%20flex%22%3E%0D%0A%20%20%20%20%20%20%20%20%3Cimg%20style%3D%22margin%3A%20auto%3B%22%20src%3D%22https%3A%2F%2Fabpay-pub.s3.ap-northeast-1.amazonaws.com%2Fabpay1.png%22%20alt%3D%22%22%20class%3D%22logo%22%20%2F%3E%0D%0A%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%0D%0A%20%20%20%20%20%20%3Cdiv%20style%3D%22padding%3A%2022px%2024px%20%21important%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22title-1%22%3E%7B%7B.title%7D%7D%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22code-tips%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%7B%7B.content%7D%7D%0D%0A%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%0D%0A%0D%0A%20%20%20%20%20%20%20%20%3Cli%20class%3D%22team-tips%22%3EABpay%E9%96%8B%E7%99%BC%E8%80%85%E5%9C%98%E9%9A%8A%E6%9C%8D%E5%8B%99%3C%2Fli%3E%0D%0A%0D%0A%20%20%20%20%20%20%20%20%3Csection%20class%3D%22contact-us%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-us-info%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%E6%9C%AC%E9%83%B5%E4%BB%B6%E7%94%B1%E7%B3%BB%E7%B5%B1%E8%87%AA%E5%8B%95%E7%99%BC%E5%87%BA%E8%AB%8B%E5%8B%BF%E5%9B%9E%E5%A4%8D%EF%BC%8C%E5%A6%82%E9%9C%80%E8%A6%81%E4%BA%86%E8%A7%A3%E6%9B%B4%E5%A4%9A%E6%9C%8D%E5%8B%99%EF%BC%8C%E6%AD%A1%E8%BF%8E%E8%A8%AA%E5%95%8FABpay%E5%AE%98%E6%96%B9%E7%B6%B2%0D%0A%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-us-info%22%3E%E4%B9%9F%E5%8F%AF%E4%BB%A5%E9%80%9A%E4%BB%A5%E4%B8%8B%E6%96%B9%E5%BC%8F%E8%81%AF%E7%B5%A1%E6%88%91%E5%80%91%3C%2Fdiv%3E%0D%0A%0D%0A%20%20%20%20%20%20%20%20%20%20%3Ca%20href%3D%22https%3A%2F%2Fwww.baidu.com%22%20target%3D%22_blank%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cimg%20src%3D%22https%3A%2F%2Fabpay-pub.s3.ap-northeast-1.amazonaws.com%2Fabpay.png%22%20alt%3D%22%22%20class%3D%22qr-code%22%20%2F%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3C%2Fa%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-tel%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%E5%AE%A2%E6%9C%8D%E9%9B%BB%E8%A9%B1%EF%BC%9A%3Cspan%20class%3D%22contact-tel-number%22%3E400-278-2890%3C%2Fspan%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-created-version%22%3E2024%20ABpay.com.cn%20.%20All%20rightes%20reserved%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%3C%2Fsection%3E%0D%0A%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%3C%2Fbody%3E%0D%0A%3C%2Fhtml%3E%0D%0A\u0026ReplyToAddress=true\u0026Subject=%E6%B5%8B%E8%AF%95%E4%B8%BB%E9%A2%98\u0026ToAddress=huangxinyun%40dreaminglife.cn\nhost:dm.aliyuncs.com\nx-acs-action:SingleSendMail\nx-acs-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\nx-acs-date:2024-09-27T10:25:51Z\nx-acs-signature-nonce:df12536e2cdc55502165fc09b2e428e4\nx-acs-version:2015-11-23\n\nhost;x-acs-action;x-acs-content-sha256;x-acs-date;x-acs-signature-nonce;x-acs-version\ne3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855] request id: 2C84BB3A-1678-5CC3-B000-89D4AD094279\n Data: {\"Code\":\"SignatureDoesNotMatch\",\"HostId\":\"dm.aliyuncs.com\",\"Message\":\"Specified signature does not match our calculation. server StringToSign is [ACS3-HMAC-SHA256\\ncff36b2084df9f09d31360c81d3a865e5767f5bcebbad7473283daf87bce67ff], server CanonicalRequest is [POST\\n/\\nAccountName=test%40email.aisz.org\\u0026AddressType=0\\u0026HtmlBody=%3C%21DOCTYPE%20html%3E%0D%0A%3Chtml%20lang%3D%22en%22%3E%0D%0A%20%20%3Chead%3E%0D%0A%20%20%20%20%3Cmeta%20charset%3D%22UTF-8%22%20%2F%3E%0D%0A%20%20%20%20%3Cmeta%20name%3D%22viewport%22%20content%3D%22width%3Ddevice-width%2C%20initial-scale%3D1.0%22%20%2F%3E%0D%0A%20%20%20%20%3Ctitle%3EDocument%3C%2Ftitle%3E%0D%0A%20%20%20%20%3C%21--%20%3Clink%20rel%3D%22stylesheet%22%20href%3D%22.%2Fassets%2Fcss%2Findex.css%22%20%2F%3E%20--%3E%0D%0A%20%20%20%20%3Cstyle%3E%0D%0A%20%20%20%20%20%20%2A%20%7B%0D%0A%20%20%20%20%20%20%20%20padding%3A%200%3B%0D%0A%20%20%20%20%20%20%20%20margin%3A%200%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20img%20%7B%0D%0A%20%20%20%20%20%20%20%20display%3A%20block%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20%23app%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%20480px%3B%0D%0A%20%20%20%20%20%20%20%20margin%3A%200%20auto%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.my-header%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%20100%25%3B%0D%0A%20%20%20%20%20%20%20%20height%3A%2096px%3B%0D%0A%20%20%20%20%20%20%20%20background-color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.my-header%20.logo%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%2095px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.code-tips%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2012px%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2022px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.code-content%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%20%20font-weight%3A%20bold%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2028px%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2061px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.team-tips%20%7B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2011px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2059px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20%2F%2A%20.team-tips%3A%3Amarker%20%7B%0D%0A%20%20margin-right%3A%202px%20%21important%3B%0D%0A%7D%20%2A%2F%0D%0A%0D%0A%20%20%20%20%20%20.contact-us%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23d1d1d1%3B%0D%0A%20%20%20%20%20%20%20%20padding-top%3A%2024px%3B%0D%0A%20%20%20%20%20%20%20%20border-top%3A%20solid%200.5px%20%23d1d1d1%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-us-info%20%7B%0D%0A%20%20%20%20%20%20%20%20text-align%3A%20center%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2010px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23838384%3B%0D%0A%20%20%20%20%20%20%20%20padding%3A%200%2040px%3B%0D%0A%20%20%20%20%20%20%20%20line-height%3A%2018px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-tel%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23838384%3B%0D%0A%20%20%20%20%20%20%20%20text-align%3A%20center%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2010px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-tel-number%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-created-version%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23838384%3B%0D%0A%20%20%20%20%20%20%20%20text-align%3A%20center%3B%0D%0A%20%20%20%20%20%20%20%20margin-top%3A%207px%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2010px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.qr-code%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%2064px%3B%0D%0A%20%20%20%20%20%20%20%20margin%3A%209px%20auto%2015px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20%2F%2A%20%E5%BC%82%E5%B8%B8%E9%82%AE%E4%BB%B6%20%2A%2F%0D%0A%0D%0A%20%20%20%20%20%20.exception-title%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2016px%3B%0D%0A%20%20%20%20%20%20%20%20font-weight%3A%20bold%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2024px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.exception-content%20%7B%0D%0A%20%20%20%20%20%20%20%20line-height%3A%2024px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2012px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.exception-ignore%20%7B%0D%0A%20%20%20%20%20%20%20%20margin-top%3A%2045px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2012px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.exception-team-tips%20%7B%0D%0A%20%20%20%20%20%20%20%20margin-top%3A%2085px%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2020px%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2011px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%20%20%20%20%3C%2Fstyle%3E%0D%0A%20%20%3C%2Fhead%3E%0D%0A%20%20%3Cbody%3E%0D%0A%20%20%20%20%3Cdiv%20id%3D%22app%22%3E%0D%0A%20%20%20%20%20%20%3Cdiv%20class%3D%22my-header%22%20style%3D%22display%3A%20flex%22%3E%0D%0A%20%20%20%20%20%20%20%20%3Cimg%20style%3D%22margin%3A%20auto%3B%22%20src%3D%22https%3A%2F%2Fabpay-pub.s3.ap-northeast-1.amazonaws.com%2Fabpay1.png%22%20alt%3D%22%22%20class%3D%22logo%22%20%2F%3E%0D%0A%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%0D%0A%20%20%20%20%20%20%3Cdiv%20style%3D%22padding%3A%2022px%2024px%20%21important%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22title-1%22%3E%7B%7B.title%7D%7D%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22code-tips%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%7B%7B.content%7D%7D%0D%0A%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%0D%0A%0D%0A%20%20%20%20%20%20%20%20%3Cli%20class%3D%22team-tips%22%3EABpay%E9%96%8B%E7%99%BC%E8%80%85%E5%9C%98%E9%9A%8A%E6%9C%8D%E5%8B%99%3C%2Fli%3E%0D%0A%0D%0A%20%20%20%20%20%20%20%20%3Csection%20class%3D%22contact-us%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-us-info%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%E6%9C%AC%E9%83%B5%E4%BB%B6%E7%94%B1%E7%B3%BB%E7%B5%B1%E8%87%AA%E5%8B%95%E7%99%BC%E5%87%BA%E8%AB%8B%E5%8B%BF%E5%9B%9E%E5%A4%8D%EF%BC%8C%E5%A6%82%E9%9C%80%E8%A6%81%E4%BA%86%E8%A7%A3%E6%9B%B4%E5%A4%9A%E6%9C%8D%E5%8B%99%EF%BC%8C%E6%AD%A1%E8%BF%8E%E8%A8%AA%E5%95%8FABpay%E5%AE%98%E6%96%B9%E7%B6%B2%0D%0A%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-us-info%22%3E%E4%B9%9F%E5%8F%AF%E4%BB%A5%E9%80%9A%E4%BB%A5%E4%B8%8B%E6%96%B9%E5%BC%8F%E8%81%AF%E7%B5%A1%E6%88%91%E5%80%91%3C%2Fdiv%3E%0D%0A%0D%0A%20%20%20%20%20%20%20%20%20%20%3Ca%20href%3D%22https%3A%2F%2Fwww.baidu.com%22%20target%3D%22_blank%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cimg%20src%3D%22https%3A%2F%2Fabpay-pub.s3.ap-northeast-1.amazonaws.com%2Fabpay.png%22%20alt%3D%22%22%20class%3D%22qr-code%22%20%2F%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3C%2Fa%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-tel%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%E5%AE%A2%E6%9C%8D%E9%9B%BB%E8%A9%B1%EF%BC%9A%3Cspan%20class%3D%22contact-tel-number%22%3E400-278-2890%3C%2Fspan%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-created-version%22%3E2024%20ABpay.com.cn%20.%20All%20rightes%20reserved%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%3C%2Fsection%3E%0D%0A%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%3C%2Fbody%3E%0D%0A%3C%2Fhtml%3E%0D%0A\\u0026ReplyToAddress=true\\u0026Subject=%E6%B5%8B%E8%AF%95%E4%B8%BB%E9%A2%98\\u0026ToAddress=huangxinyun%40dreaminglife.cn\\nhost:dm.aliyuncs.com\\nx-acs-action:SingleSendMail\\nx-acs-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\\nx-acs-date:2024-09-27T10:25:51Z\\nx-acs-signature-nonce:df12536e2cdc55502165fc09b2e428e4\\nx-acs-version:2015-11-23\\n\\nhost;x-acs-action;x-acs-content-sha256;x-acs-date;x-acs-signature-nonce;x-acs-version\\ne3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855]\",\"Recommend\":\"https://api.aliyun.com/troubleshoot?q=SignatureDoesNotMatch\\u0026product=Dm\\u0026requestId=2C84BB3A-1678-5CC3-B000-89D4AD094279\",\"RequestId\":\"2C84BB3A-1678-5CC3-B000-89D4AD094279\",\"statusCode\":400}\n"]} +[info]{"time":"2024-09-27 18:28:53.626951","file":"/aliyun.go:94","func":"func1","gid":"12","content":["resp:{} err:SDKError:\n StatusCode: 400\n Code: SignatureDoesNotMatch\n Message: code: 400, Specified signature does not match our calculation. server StringToSign is [ACS3-HMAC-SHA256\n26e136386f160f6fc6d5882c6dd648f8b40c66699dd6a5cbe29a3f5623968c32], server CanonicalRequest is [POST\n/\nAccountName=test%40email.aisz.org\u0026AddressType=0\u0026HtmlBody=%3C%21DOCTYPE%20html%3E%0D%0A%3Chtml%20lang%3D%22en%22%3E%0D%0A%20%20%3Chead%3E%0D%0A%20%20%20%20%3Cmeta%20charset%3D%22UTF-8%22%20%2F%3E%0D%0A%20%20%20%20%3Cmeta%20name%3D%22viewport%22%20content%3D%22width%3Ddevice-width%2C%20initial-scale%3D1.0%22%20%2F%3E%0D%0A%20%20%20%20%3Ctitle%3EDocument%3C%2Ftitle%3E%0D%0A%20%20%20%20%3C%21--%20%3Clink%20rel%3D%22stylesheet%22%20href%3D%22.%2Fassets%2Fcss%2Findex.css%22%20%2F%3E%20--%3E%0D%0A%20%20%20%20%3Cstyle%3E%0D%0A%20%20%20%20%20%20%2A%20%7B%0D%0A%20%20%20%20%20%20%20%20padding%3A%200%3B%0D%0A%20%20%20%20%20%20%20%20margin%3A%200%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20img%20%7B%0D%0A%20%20%20%20%20%20%20%20display%3A%20block%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20%23app%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%20480px%3B%0D%0A%20%20%20%20%20%20%20%20margin%3A%200%20auto%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.my-header%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%20100%25%3B%0D%0A%20%20%20%20%20%20%20%20height%3A%2096px%3B%0D%0A%20%20%20%20%20%20%20%20background-color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.my-header%20.logo%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%2095px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.code-tips%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2012px%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2022px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.code-content%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%20%20font-weight%3A%20bold%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2028px%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2061px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.team-tips%20%7B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2011px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2059px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20%2F%2A%20.team-tips%3A%3Amarker%20%7B%0D%0A%20%20margin-right%3A%202px%20%21important%3B%0D%0A%7D%20%2A%2F%0D%0A%0D%0A%20%20%20%20%20%20.contact-us%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23d1d1d1%3B%0D%0A%20%20%20%20%20%20%20%20padding-top%3A%2024px%3B%0D%0A%20%20%20%20%20%20%20%20border-top%3A%20solid%200.5px%20%23d1d1d1%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-us-info%20%7B%0D%0A%20%20%20%20%20%20%20%20text-align%3A%20center%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2010px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23838384%3B%0D%0A%20%20%20%20%20%20%20%20padding%3A%200%2040px%3B%0D%0A%20%20%20%20%20%20%20%20line-height%3A%2018px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-tel%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23838384%3B%0D%0A%20%20%20%20%20%20%20%20text-align%3A%20center%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2010px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-tel-number%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-created-version%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23838384%3B%0D%0A%20%20%20%20%20%20%20%20text-align%3A%20center%3B%0D%0A%20%20%20%20%20%20%20%20margin-top%3A%207px%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2010px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.qr-code%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%2064px%3B%0D%0A%20%20%20%20%20%20%20%20margin%3A%209px%20auto%2015px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20%2F%2A%20%E5%BC%82%E5%B8%B8%E9%82%AE%E4%BB%B6%20%2A%2F%0D%0A%0D%0A%20%20%20%20%20%20.exception-title%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2016px%3B%0D%0A%20%20%20%20%20%20%20%20font-weight%3A%20bold%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2024px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.exception-content%20%7B%0D%0A%20%20%20%20%20%20%20%20line-height%3A%2024px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2012px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.exception-ignore%20%7B%0D%0A%20%20%20%20%20%20%20%20margin-top%3A%2045px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2012px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.exception-team-tips%20%7B%0D%0A%20%20%20%20%20%20%20%20margin-top%3A%2085px%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2020px%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2011px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%20%20%20%20%3C%2Fstyle%3E%0D%0A%20%20%3C%2Fhead%3E%0D%0A%20%20%3Cbody%3E%0D%0A%20%20%20%20%3Cdiv%20id%3D%22app%22%3E%0D%0A%20%20%20%20%20%20%3Cdiv%20class%3D%22my-header%22%20style%3D%22display%3A%20flex%22%3E%0D%0A%20%20%20%20%20%20%20%20%3Cimg%20style%3D%22margin%3A%20auto%3B%22%20src%3D%22https%3A%2F%2Fabpay-pub.s3.ap-northeast-1.amazonaws.com%2Fabpay1.png%22%20alt%3D%22%22%20class%3D%22logo%22%20%2F%3E%0D%0A%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%0D%0A%20%20%20%20%20%20%3Cdiv%20style%3D%22padding%3A%2022px%2024px%20%21important%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22title-1%22%3E%7B%7B.title%7D%7D%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22code-tips%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%7B%7B.content%7D%7D%0D%0A%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%0D%0A%0D%0A%20%20%20%20%20%20%20%20%3Cli%20class%3D%22team-tips%22%3EABpay%E9%96%8B%E7%99%BC%E8%80%85%E5%9C%98%E9%9A%8A%E6%9C%8D%E5%8B%99%3C%2Fli%3E%0D%0A%0D%0A%20%20%20%20%20%20%20%20%3Csection%20class%3D%22contact-us%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-us-info%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%E6%9C%AC%E9%83%B5%E4%BB%B6%E7%94%B1%E7%B3%BB%E7%B5%B1%E8%87%AA%E5%8B%95%E7%99%BC%E5%87%BA%E8%AB%8B%E5%8B%BF%E5%9B%9E%E5%A4%8D%EF%BC%8C%E5%A6%82%E9%9C%80%E8%A6%81%E4%BA%86%E8%A7%A3%E6%9B%B4%E5%A4%9A%E6%9C%8D%E5%8B%99%EF%BC%8C%E6%AD%A1%E8%BF%8E%E8%A8%AA%E5%95%8FABpay%E5%AE%98%E6%96%B9%E7%B6%B2%0D%0A%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-us-info%22%3E%E4%B9%9F%E5%8F%AF%E4%BB%A5%E9%80%9A%E4%BB%A5%E4%B8%8B%E6%96%B9%E5%BC%8F%E8%81%AF%E7%B5%A1%E6%88%91%E5%80%91%3C%2Fdiv%3E%0D%0A%0D%0A%20%20%20%20%20%20%20%20%20%20%3Ca%20href%3D%22https%3A%2F%2Fwww.baidu.com%22%20target%3D%22_blank%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cimg%20src%3D%22https%3A%2F%2Fabpay-pub.s3.ap-northeast-1.amazonaws.com%2Fabpay.png%22%20alt%3D%22%22%20class%3D%22qr-code%22%20%2F%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3C%2Fa%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-tel%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%E5%AE%A2%E6%9C%8D%E9%9B%BB%E8%A9%B1%EF%BC%9A%3Cspan%20class%3D%22contact-tel-number%22%3E400-278-2890%3C%2Fspan%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-created-version%22%3E2024%20ABpay.com.cn%20.%20All%20rightes%20reserved%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%3C%2Fsection%3E%0D%0A%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%3C%2Fbody%3E%0D%0A%3C%2Fhtml%3E%0D%0A\u0026ReplyToAddress=true\u0026Subject=%E6%B5%8B%E8%AF%95%E4%B8%BB%E9%A2%98\u0026ToAddress=huangxinyun%40dreaminglife.cn\nhost:dm.aliyuncs.com\nx-acs-action:SingleSendMail\nx-acs-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\nx-acs-date:2024-09-27T10:28:53Z\nx-acs-signature-nonce:945a71e23facf52dc44e2523f618e145\nx-acs-version:2015-11-23\n\nhost;x-acs-action;x-acs-content-sha256;x-acs-date;x-acs-signature-nonce;x-acs-version\ne3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855] request id: F0518A47-588B-54EB-B351-A4E51BD19424\n Data: {\"Code\":\"SignatureDoesNotMatch\",\"HostId\":\"dm.aliyuncs.com\",\"Message\":\"Specified signature does not match our calculation. server StringToSign is [ACS3-HMAC-SHA256\\n26e136386f160f6fc6d5882c6dd648f8b40c66699dd6a5cbe29a3f5623968c32], server CanonicalRequest is [POST\\n/\\nAccountName=test%40email.aisz.org\\u0026AddressType=0\\u0026HtmlBody=%3C%21DOCTYPE%20html%3E%0D%0A%3Chtml%20lang%3D%22en%22%3E%0D%0A%20%20%3Chead%3E%0D%0A%20%20%20%20%3Cmeta%20charset%3D%22UTF-8%22%20%2F%3E%0D%0A%20%20%20%20%3Cmeta%20name%3D%22viewport%22%20content%3D%22width%3Ddevice-width%2C%20initial-scale%3D1.0%22%20%2F%3E%0D%0A%20%20%20%20%3Ctitle%3EDocument%3C%2Ftitle%3E%0D%0A%20%20%20%20%3C%21--%20%3Clink%20rel%3D%22stylesheet%22%20href%3D%22.%2Fassets%2Fcss%2Findex.css%22%20%2F%3E%20--%3E%0D%0A%20%20%20%20%3Cstyle%3E%0D%0A%20%20%20%20%20%20%2A%20%7B%0D%0A%20%20%20%20%20%20%20%20padding%3A%200%3B%0D%0A%20%20%20%20%20%20%20%20margin%3A%200%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20img%20%7B%0D%0A%20%20%20%20%20%20%20%20display%3A%20block%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20%23app%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%20480px%3B%0D%0A%20%20%20%20%20%20%20%20margin%3A%200%20auto%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.my-header%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%20100%25%3B%0D%0A%20%20%20%20%20%20%20%20height%3A%2096px%3B%0D%0A%20%20%20%20%20%20%20%20background-color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.my-header%20.logo%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%2095px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.code-tips%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2012px%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2022px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.code-content%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%20%20font-weight%3A%20bold%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2028px%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2061px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.team-tips%20%7B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2011px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2059px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20%2F%2A%20.team-tips%3A%3Amarker%20%7B%0D%0A%20%20margin-right%3A%202px%20%21important%3B%0D%0A%7D%20%2A%2F%0D%0A%0D%0A%20%20%20%20%20%20.contact-us%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23d1d1d1%3B%0D%0A%20%20%20%20%20%20%20%20padding-top%3A%2024px%3B%0D%0A%20%20%20%20%20%20%20%20border-top%3A%20solid%200.5px%20%23d1d1d1%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-us-info%20%7B%0D%0A%20%20%20%20%20%20%20%20text-align%3A%20center%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2010px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23838384%3B%0D%0A%20%20%20%20%20%20%20%20padding%3A%200%2040px%3B%0D%0A%20%20%20%20%20%20%20%20line-height%3A%2018px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-tel%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23838384%3B%0D%0A%20%20%20%20%20%20%20%20text-align%3A%20center%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2010px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-tel-number%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-created-version%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23838384%3B%0D%0A%20%20%20%20%20%20%20%20text-align%3A%20center%3B%0D%0A%20%20%20%20%20%20%20%20margin-top%3A%207px%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2010px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.qr-code%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%2064px%3B%0D%0A%20%20%20%20%20%20%20%20margin%3A%209px%20auto%2015px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20%2F%2A%20%E5%BC%82%E5%B8%B8%E9%82%AE%E4%BB%B6%20%2A%2F%0D%0A%0D%0A%20%20%20%20%20%20.exception-title%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2016px%3B%0D%0A%20%20%20%20%20%20%20%20font-weight%3A%20bold%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2024px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.exception-content%20%7B%0D%0A%20%20%20%20%20%20%20%20line-height%3A%2024px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2012px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.exception-ignore%20%7B%0D%0A%20%20%20%20%20%20%20%20margin-top%3A%2045px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2012px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.exception-team-tips%20%7B%0D%0A%20%20%20%20%20%20%20%20margin-top%3A%2085px%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2020px%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2011px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%20%20%20%20%3C%2Fstyle%3E%0D%0A%20%20%3C%2Fhead%3E%0D%0A%20%20%3Cbody%3E%0D%0A%20%20%20%20%3Cdiv%20id%3D%22app%22%3E%0D%0A%20%20%20%20%20%20%3Cdiv%20class%3D%22my-header%22%20style%3D%22display%3A%20flex%22%3E%0D%0A%20%20%20%20%20%20%20%20%3Cimg%20style%3D%22margin%3A%20auto%3B%22%20src%3D%22https%3A%2F%2Fabpay-pub.s3.ap-northeast-1.amazonaws.com%2Fabpay1.png%22%20alt%3D%22%22%20class%3D%22logo%22%20%2F%3E%0D%0A%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%0D%0A%20%20%20%20%20%20%3Cdiv%20style%3D%22padding%3A%2022px%2024px%20%21important%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22title-1%22%3E%7B%7B.title%7D%7D%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22code-tips%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%7B%7B.content%7D%7D%0D%0A%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%0D%0A%0D%0A%20%20%20%20%20%20%20%20%3Cli%20class%3D%22team-tips%22%3EABpay%E9%96%8B%E7%99%BC%E8%80%85%E5%9C%98%E9%9A%8A%E6%9C%8D%E5%8B%99%3C%2Fli%3E%0D%0A%0D%0A%20%20%20%20%20%20%20%20%3Csection%20class%3D%22contact-us%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-us-info%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%E6%9C%AC%E9%83%B5%E4%BB%B6%E7%94%B1%E7%B3%BB%E7%B5%B1%E8%87%AA%E5%8B%95%E7%99%BC%E5%87%BA%E8%AB%8B%E5%8B%BF%E5%9B%9E%E5%A4%8D%EF%BC%8C%E5%A6%82%E9%9C%80%E8%A6%81%E4%BA%86%E8%A7%A3%E6%9B%B4%E5%A4%9A%E6%9C%8D%E5%8B%99%EF%BC%8C%E6%AD%A1%E8%BF%8E%E8%A8%AA%E5%95%8FABpay%E5%AE%98%E6%96%B9%E7%B6%B2%0D%0A%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-us-info%22%3E%E4%B9%9F%E5%8F%AF%E4%BB%A5%E9%80%9A%E4%BB%A5%E4%B8%8B%E6%96%B9%E5%BC%8F%E8%81%AF%E7%B5%A1%E6%88%91%E5%80%91%3C%2Fdiv%3E%0D%0A%0D%0A%20%20%20%20%20%20%20%20%20%20%3Ca%20href%3D%22https%3A%2F%2Fwww.baidu.com%22%20target%3D%22_blank%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cimg%20src%3D%22https%3A%2F%2Fabpay-pub.s3.ap-northeast-1.amazonaws.com%2Fabpay.png%22%20alt%3D%22%22%20class%3D%22qr-code%22%20%2F%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3C%2Fa%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-tel%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%E5%AE%A2%E6%9C%8D%E9%9B%BB%E8%A9%B1%EF%BC%9A%3Cspan%20class%3D%22contact-tel-number%22%3E400-278-2890%3C%2Fspan%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-created-version%22%3E2024%20ABpay.com.cn%20.%20All%20rightes%20reserved%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%3C%2Fsection%3E%0D%0A%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%3C%2Fbody%3E%0D%0A%3C%2Fhtml%3E%0D%0A\\u0026ReplyToAddress=true\\u0026Subject=%E6%B5%8B%E8%AF%95%E4%B8%BB%E9%A2%98\\u0026ToAddress=huangxinyun%40dreaminglife.cn\\nhost:dm.aliyuncs.com\\nx-acs-action:SingleSendMail\\nx-acs-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\\nx-acs-date:2024-09-27T10:28:53Z\\nx-acs-signature-nonce:945a71e23facf52dc44e2523f618e145\\nx-acs-version:2015-11-23\\n\\nhost;x-acs-action;x-acs-content-sha256;x-acs-date;x-acs-signature-nonce;x-acs-version\\ne3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855]\",\"Recommend\":\"https://api.aliyun.com/troubleshoot?q=SignatureDoesNotMatch\\u0026product=Dm\\u0026requestId=F0518A47-588B-54EB-B351-A4E51BD19424\",\"RequestId\":\"F0518A47-588B-54EB-B351-A4E51BD19424\",\"statusCode\":400}\n"]} +[info]{"time":"2024-09-27 18:29:17.208999","file":"/aliyun.go:94","func":"func1","gid":"16","content":["resp:{\n \"headers\": {\n \"access-control-allow-origin\": \"*\",\n \"access-control-expose-headers\": \"*\",\n \"connection\": \"keep-alive\",\n \"content-length\": \"81\",\n \"content-type\": \"application/json;charset=utf-8\",\n \"date\": \"Fri, 27 Sep 2024 10:29:17 GMT\",\n \"etag\": \"84zisvpsp5fGYWaCcDBS+RA1\",\n \"keep-alive\": \"timeout=25\",\n \"x-acs-request-id\": \"23293138-0228-5506-B106-7718B40AEA0D\",\n \"x-acs-trace-id\": \"8cda844f86214d9708cab38a43abce87\"\n },\n \"statusCode\": 200,\n \"body\": {\n \"EnvId\": \"600000109177635443\",\n \"RequestId\": \"23293138-0228-5506-B106-7718B40AEA0D\"\n }\n} err:\u003cnil\u003e"]} +[info]{"time":"2024-09-27 18:32:13.585625","file":"/aliyun.go:26","func":"InitEmail","gid":"16","content":["params:{Smtp:\u003cnil\u003e Aws:\u003cnil\u003e Aliyun:0xc000470230 Mailgun:\u003cnil\u003e}"]} +[info]{"time":"2024-09-27 18:32:13.949556","file":"/aliyun.go:95","func":"func1","gid":"16","content":["resp:{\n \"headers\": {\n \"access-control-allow-origin\": \"*\",\n \"access-control-expose-headers\": \"*\",\n \"connection\": \"keep-alive\",\n \"content-length\": \"81\",\n \"content-type\": \"application/json;charset=utf-8\",\n \"date\": \"Fri, 27 Sep 2024 10:32:13 GMT\",\n \"etag\": \"8Egdy2sup3WgBAcOuMpL1IQ1\",\n \"keep-alive\": \"timeout=25\",\n \"x-acs-request-id\": \"3BE02844-0365-536F-8BEE-573E96870C19\",\n \"x-acs-trace-id\": \"a4003459b3e1d0c41d4395e11e198305\"\n },\n \"statusCode\": 200,\n \"body\": {\n \"EnvId\": \"600000109408358448\",\n \"RequestId\": \"3BE02844-0365-536F-8BEE-573E96870C19\"\n }\n} err:\u003cnil\u003e"]} \ No newline at end of file diff --git a/aliyun/log/2024-09-29_error.log b/aliyun/log/2024-09-29_error.log new file mode 100644 index 0000000..5f75a30 --- /dev/null +++ b/aliyun/log/2024-09-29_error.log @@ -0,0 +1,3 @@ + +[error]{"time":"2024-09-29 10:55:10.707444","file":"/aliyun.go:105","func":"Send","gid":"52","content":["err:SDKError:\n StatusCode: 400\n Code: SignatureDoesNotMatch\n Message: code: 400, Specified signature does not match our calculation. server StringToSign is [ACS3-HMAC-SHA256\n8568e49ed7962180bf3ec08875b45f3ed164e5b8e6af89de16a0de175cadfd40], server CanonicalRequest is [POST\n/\nAccountName=test%40email.aisz.org\u0026AddressType=0\u0026HtmlBody=%3C%21DOCTYPE%20html%3E%0D%0A%3Chtml%20lang%3D%22en%22%3E%0D%0A%20%20%3Chead%3E%0D%0A%20%20%20%20%3Cmeta%20charset%3D%22UTF-8%22%20%2F%3E%0D%0A%20%20%20%20%3Cmeta%20name%3D%22viewport%22%20content%3D%22width%3Ddevice-width%2C%20initial-scale%3D1.0%22%20%2F%3E%0D%0A%20%20%20%20%3Ctitle%3EDocument%3C%2Ftitle%3E%0D%0A%20%20%20%20%3C%21--%20%3Clink%20rel%3D%22stylesheet%22%20href%3D%22.%2Fassets%2Fcss%2Findex.css%22%20%2F%3E%20--%3E%0D%0A%20%20%20%20%3Cstyle%3E%0D%0A%20%20%20%20%20%20%2A%20%7B%0D%0A%20%20%20%20%20%20%20%20padding%3A%200%3B%0D%0A%20%20%20%20%20%20%20%20margin%3A%200%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20img%20%7B%0D%0A%20%20%20%20%20%20%20%20display%3A%20block%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20%23app%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%20480px%3B%0D%0A%20%20%20%20%20%20%20%20margin%3A%200%20auto%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.my-header%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%20100%25%3B%0D%0A%20%20%20%20%20%20%20%20height%3A%2096px%3B%0D%0A%20%20%20%20%20%20%20%20background-color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.my-header%20.logo%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%2095px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.code-tips%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2012px%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2022px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.code-content%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%20%20font-weight%3A%20bold%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2028px%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2061px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.team-tips%20%7B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2011px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2059px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20%2F%2A%20.team-tips%3A%3Amarker%20%7B%0D%0A%20%20margin-right%3A%202px%20%21important%3B%0D%0A%7D%20%2A%2F%0D%0A%0D%0A%20%20%20%20%20%20.contact-us%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23d1d1d1%3B%0D%0A%20%20%20%20%20%20%20%20padding-top%3A%2024px%3B%0D%0A%20%20%20%20%20%20%20%20border-top%3A%20solid%200.5px%20%23d1d1d1%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-us-info%20%7B%0D%0A%20%20%20%20%20%20%20%20text-align%3A%20center%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2010px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23838384%3B%0D%0A%20%20%20%20%20%20%20%20padding%3A%200%2040px%3B%0D%0A%20%20%20%20%20%20%20%20line-height%3A%2018px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-tel%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23838384%3B%0D%0A%20%20%20%20%20%20%20%20text-align%3A%20center%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2010px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-tel-number%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-created-version%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23838384%3B%0D%0A%20%20%20%20%20%20%20%20text-align%3A%20center%3B%0D%0A%20%20%20%20%20%20%20%20margin-top%3A%207px%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2010px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.qr-code%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%2064px%3B%0D%0A%20%20%20%20%20%20%20%20margin%3A%209px%20auto%2015px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20%2F%2A%20%E5%BC%82%E5%B8%B8%E9%82%AE%E4%BB%B6%20%2A%2F%0D%0A%0D%0A%20%20%20%20%20%20.exception-title%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2016px%3B%0D%0A%20%20%20%20%20%20%20%20font-weight%3A%20bold%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2024px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.exception-content%20%7B%0D%0A%20%20%20%20%20%20%20%20line-height%3A%2024px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2012px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.exception-ignore%20%7B%0D%0A%20%20%20%20%20%20%20%20margin-top%3A%2045px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2012px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.exception-team-tips%20%7B%0D%0A%20%20%20%20%20%20%20%20margin-top%3A%2085px%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2020px%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2011px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%20%20%20%20%3C%2Fstyle%3E%0D%0A%20%20%3C%2Fhead%3E%0D%0A%20%20%3Cbody%3E%0D%0A%20%20%20%20%3Cdiv%20id%3D%22app%22%3E%0D%0A%20%20%20%20%20%20%3Cdiv%20class%3D%22my-header%22%20style%3D%22display%3A%20flex%22%3E%0D%0A%20%20%20%20%20%20%20%20%3Cimg%20style%3D%22margin%3A%20auto%3B%22%20src%3D%22https%3A%2F%2Fabpay-pub.s3.ap-northeast-1.amazonaws.com%2Fabpay1.png%22%20alt%3D%22%22%20class%3D%22logo%22%20%2F%3E%0D%0A%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%0D%0A%20%20%20%20%20%20%3Cdiv%20style%3D%22padding%3A%2022px%2024px%20%21important%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22title-1%22%3E%7B%7B.title%7D%7D%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22code-tips%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%7B%7B.content%7D%7D%0D%0A%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%0D%0A%0D%0A%20%20%20%20%20%20%20%20%3Cli%20class%3D%22team-tips%22%3EABpay%E9%96%8B%E7%99%BC%E8%80%85%E5%9C%98%E9%9A%8A%E6%9C%8D%E5%8B%99%3C%2Fli%3E%0D%0A%0D%0A%20%20%20%20%20%20%20%20%3Csection%20class%3D%22contact-us%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-us-info%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%E6%9C%AC%E9%83%B5%E4%BB%B6%E7%94%B1%E7%B3%BB%E7%B5%B1%E8%87%AA%E5%8B%95%E7%99%BC%E5%87%BA%E8%AB%8B%E5%8B%BF%E5%9B%9E%E5%A4%8D%EF%BC%8C%E5%A6%82%E9%9C%80%E8%A6%81%E4%BA%86%E8%A7%A3%E6%9B%B4%E5%A4%9A%E6%9C%8D%E5%8B%99%EF%BC%8C%E6%AD%A1%E8%BF%8E%E8%A8%AA%E5%95%8FABpay%E5%AE%98%E6%96%B9%E7%B6%B2%0D%0A%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-us-info%22%3E%E4%B9%9F%E5%8F%AF%E4%BB%A5%E9%80%9A%E4%BB%A5%E4%B8%8B%E6%96%B9%E5%BC%8F%E8%81%AF%E7%B5%A1%E6%88%91%E5%80%91%3C%2Fdiv%3E%0D%0A%0D%0A%20%20%20%20%20%20%20%20%20%20%3Ca%20href%3D%22https%3A%2F%2Fwww.baidu.com%22%20target%3D%22_blank%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cimg%20src%3D%22https%3A%2F%2Fabpay-pub.s3.ap-northeast-1.amazonaws.com%2Fabpay.png%22%20alt%3D%22%22%20class%3D%22qr-code%22%20%2F%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3C%2Fa%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-tel%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%E5%AE%A2%E6%9C%8D%E9%9B%BB%E8%A9%B1%EF%BC%9A%3Cspan%20class%3D%22contact-tel-number%22%3E400-278-2890%3C%2Fspan%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-created-version%22%3E2024%20ABpay.com.cn%20.%20All%20rightes%20reserved%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%3C%2Fsection%3E%0D%0A%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%3C%2Fbody%3E%0D%0A%3C%2Fhtml%3E%0D%0A\u0026ReplyToAddress=true\u0026Subject=%E6%B5%8B%E8%AF%95%E4%B8%BB%E9%A2%98\u0026ToAddress=huangxinyun%40dreaminglife.cn\nhost:dm.aliyuncs.com\nx-acs-action:SingleSendMail\nx-acs-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\nx-acs-date:2024-09-29T02:55:10Z\nx-acs-signature-nonce:11fe49c7141223e5105db544a20aeff3\nx-acs-version:2015-11-23\n\nhost;x-acs-action;x-acs-content-sha256;x-acs-date;x-acs-signature-nonce;x-acs-version\ne3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855] request id: 07681037-BE16-557E-8322-EBBC720ADD63\n Data: {\"Code\":\"SignatureDoesNotMatch\",\"HostId\":\"dm.aliyuncs.com\",\"Message\":\"Specified signature does not match our calculation. server StringToSign is [ACS3-HMAC-SHA256\\n8568e49ed7962180bf3ec08875b45f3ed164e5b8e6af89de16a0de175cadfd40], server CanonicalRequest is [POST\\n/\\nAccountName=test%40email.aisz.org\\u0026AddressType=0\\u0026HtmlBody=%3C%21DOCTYPE%20html%3E%0D%0A%3Chtml%20lang%3D%22en%22%3E%0D%0A%20%20%3Chead%3E%0D%0A%20%20%20%20%3Cmeta%20charset%3D%22UTF-8%22%20%2F%3E%0D%0A%20%20%20%20%3Cmeta%20name%3D%22viewport%22%20content%3D%22width%3Ddevice-width%2C%20initial-scale%3D1.0%22%20%2F%3E%0D%0A%20%20%20%20%3Ctitle%3EDocument%3C%2Ftitle%3E%0D%0A%20%20%20%20%3C%21--%20%3Clink%20rel%3D%22stylesheet%22%20href%3D%22.%2Fassets%2Fcss%2Findex.css%22%20%2F%3E%20--%3E%0D%0A%20%20%20%20%3Cstyle%3E%0D%0A%20%20%20%20%20%20%2A%20%7B%0D%0A%20%20%20%20%20%20%20%20padding%3A%200%3B%0D%0A%20%20%20%20%20%20%20%20margin%3A%200%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20img%20%7B%0D%0A%20%20%20%20%20%20%20%20display%3A%20block%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20%23app%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%20480px%3B%0D%0A%20%20%20%20%20%20%20%20margin%3A%200%20auto%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.my-header%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%20100%25%3B%0D%0A%20%20%20%20%20%20%20%20height%3A%2096px%3B%0D%0A%20%20%20%20%20%20%20%20background-color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.my-header%20.logo%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%2095px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.code-tips%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2012px%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2022px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.code-content%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%20%20font-weight%3A%20bold%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2028px%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2061px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.team-tips%20%7B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2011px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2059px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20%2F%2A%20.team-tips%3A%3Amarker%20%7B%0D%0A%20%20margin-right%3A%202px%20%21important%3B%0D%0A%7D%20%2A%2F%0D%0A%0D%0A%20%20%20%20%20%20.contact-us%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23d1d1d1%3B%0D%0A%20%20%20%20%20%20%20%20padding-top%3A%2024px%3B%0D%0A%20%20%20%20%20%20%20%20border-top%3A%20solid%200.5px%20%23d1d1d1%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-us-info%20%7B%0D%0A%20%20%20%20%20%20%20%20text-align%3A%20center%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2010px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23838384%3B%0D%0A%20%20%20%20%20%20%20%20padding%3A%200%2040px%3B%0D%0A%20%20%20%20%20%20%20%20line-height%3A%2018px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-tel%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23838384%3B%0D%0A%20%20%20%20%20%20%20%20text-align%3A%20center%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2010px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-tel-number%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-created-version%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23838384%3B%0D%0A%20%20%20%20%20%20%20%20text-align%3A%20center%3B%0D%0A%20%20%20%20%20%20%20%20margin-top%3A%207px%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2010px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.qr-code%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%2064px%3B%0D%0A%20%20%20%20%20%20%20%20margin%3A%209px%20auto%2015px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20%2F%2A%20%E5%BC%82%E5%B8%B8%E9%82%AE%E4%BB%B6%20%2A%2F%0D%0A%0D%0A%20%20%20%20%20%20.exception-title%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2016px%3B%0D%0A%20%20%20%20%20%20%20%20font-weight%3A%20bold%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2024px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.exception-content%20%7B%0D%0A%20%20%20%20%20%20%20%20line-height%3A%2024px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2012px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.exception-ignore%20%7B%0D%0A%20%20%20%20%20%20%20%20margin-top%3A%2045px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2012px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.exception-team-tips%20%7B%0D%0A%20%20%20%20%20%20%20%20margin-top%3A%2085px%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2020px%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2011px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%20%20%20%20%3C%2Fstyle%3E%0D%0A%20%20%3C%2Fhead%3E%0D%0A%20%20%3Cbody%3E%0D%0A%20%20%20%20%3Cdiv%20id%3D%22app%22%3E%0D%0A%20%20%20%20%20%20%3Cdiv%20class%3D%22my-header%22%20style%3D%22display%3A%20flex%22%3E%0D%0A%20%20%20%20%20%20%20%20%3Cimg%20style%3D%22margin%3A%20auto%3B%22%20src%3D%22https%3A%2F%2Fabpay-pub.s3.ap-northeast-1.amazonaws.com%2Fabpay1.png%22%20alt%3D%22%22%20class%3D%22logo%22%20%2F%3E%0D%0A%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%0D%0A%20%20%20%20%20%20%3Cdiv%20style%3D%22padding%3A%2022px%2024px%20%21important%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22title-1%22%3E%7B%7B.title%7D%7D%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22code-tips%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%7B%7B.content%7D%7D%0D%0A%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%0D%0A%0D%0A%20%20%20%20%20%20%20%20%3Cli%20class%3D%22team-tips%22%3EABpay%E9%96%8B%E7%99%BC%E8%80%85%E5%9C%98%E9%9A%8A%E6%9C%8D%E5%8B%99%3C%2Fli%3E%0D%0A%0D%0A%20%20%20%20%20%20%20%20%3Csection%20class%3D%22contact-us%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-us-info%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%E6%9C%AC%E9%83%B5%E4%BB%B6%E7%94%B1%E7%B3%BB%E7%B5%B1%E8%87%AA%E5%8B%95%E7%99%BC%E5%87%BA%E8%AB%8B%E5%8B%BF%E5%9B%9E%E5%A4%8D%EF%BC%8C%E5%A6%82%E9%9C%80%E8%A6%81%E4%BA%86%E8%A7%A3%E6%9B%B4%E5%A4%9A%E6%9C%8D%E5%8B%99%EF%BC%8C%E6%AD%A1%E8%BF%8E%E8%A8%AA%E5%95%8FABpay%E5%AE%98%E6%96%B9%E7%B6%B2%0D%0A%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-us-info%22%3E%E4%B9%9F%E5%8F%AF%E4%BB%A5%E9%80%9A%E4%BB%A5%E4%B8%8B%E6%96%B9%E5%BC%8F%E8%81%AF%E7%B5%A1%E6%88%91%E5%80%91%3C%2Fdiv%3E%0D%0A%0D%0A%20%20%20%20%20%20%20%20%20%20%3Ca%20href%3D%22https%3A%2F%2Fwww.baidu.com%22%20target%3D%22_blank%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cimg%20src%3D%22https%3A%2F%2Fabpay-pub.s3.ap-northeast-1.amazonaws.com%2Fabpay.png%22%20alt%3D%22%22%20class%3D%22qr-code%22%20%2F%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3C%2Fa%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-tel%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%E5%AE%A2%E6%9C%8D%E9%9B%BB%E8%A9%B1%EF%BC%9A%3Cspan%20class%3D%22contact-tel-number%22%3E400-278-2890%3C%2Fspan%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-created-version%22%3E2024%20ABpay.com.cn%20.%20All%20rightes%20reserved%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%3C%2Fsection%3E%0D%0A%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%3C%2Fbody%3E%0D%0A%3C%2Fhtml%3E%0D%0A\\u0026ReplyToAddress=true\\u0026Subject=%E6%B5%8B%E8%AF%95%E4%B8%BB%E9%A2%98\\u0026ToAddress=huangxinyun%40dreaminglife.cn\\nhost:dm.aliyuncs.com\\nx-acs-action:SingleSendMail\\nx-acs-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\\nx-acs-date:2024-09-29T02:55:10Z\\nx-acs-signature-nonce:11fe49c7141223e5105db544a20aeff3\\nx-acs-version:2015-11-23\\n\\nhost;x-acs-action;x-acs-content-sha256;x-acs-date;x-acs-signature-nonce;x-acs-version\\ne3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855]\",\"Recommend\":\"https://api.aliyun.com/troubleshoot?q=SignatureDoesNotMatch\\u0026product=Dm\\u0026requestId=07681037-BE16-557E-8322-EBBC720ADD63\",\"RequestId\":\"07681037-BE16-557E-8322-EBBC720ADD63\",\"statusCode\":400}\n"]} +[error]{"time":"2024-09-29 10:55:30.498623","file":"/aliyun.go:105","func":"Send","gid":"68","content":["err:SDKError:\n StatusCode: 400\n Code: SignatureDoesNotMatch\n Message: code: 400, Specified signature does not match our calculation. server StringToSign is [ACS3-HMAC-SHA256\n299a00c1d8d7e51956fe635bc412722737573c24792f426ee23342882fc7a0a7], server CanonicalRequest is [POST\n/\nAccountName=test%40email.aisz.org\u0026AddressType=0\u0026HtmlBody=%3C%21DOCTYPE%20html%3E%0D%0A%3Chtml%20lang%3D%22en%22%3E%0D%0A%20%20%3Chead%3E%0D%0A%20%20%20%20%3Cmeta%20charset%3D%22UTF-8%22%20%2F%3E%0D%0A%20%20%20%20%3Cmeta%20name%3D%22viewport%22%20content%3D%22width%3Ddevice-width%2C%20initial-scale%3D1.0%22%20%2F%3E%0D%0A%20%20%20%20%3Ctitle%3EDocument%3C%2Ftitle%3E%0D%0A%20%20%20%20%3C%21--%20%3Clink%20rel%3D%22stylesheet%22%20href%3D%22.%2Fassets%2Fcss%2Findex.css%22%20%2F%3E%20--%3E%0D%0A%20%20%20%20%3Cstyle%3E%0D%0A%20%20%20%20%20%20%2A%20%7B%0D%0A%20%20%20%20%20%20%20%20padding%3A%200%3B%0D%0A%20%20%20%20%20%20%20%20margin%3A%200%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20img%20%7B%0D%0A%20%20%20%20%20%20%20%20display%3A%20block%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20%23app%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%20480px%3B%0D%0A%20%20%20%20%20%20%20%20margin%3A%200%20auto%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.my-header%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%20100%25%3B%0D%0A%20%20%20%20%20%20%20%20height%3A%2096px%3B%0D%0A%20%20%20%20%20%20%20%20background-color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.my-header%20.logo%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%2095px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.code-tips%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2012px%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2022px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.code-content%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%20%20font-weight%3A%20bold%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2028px%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2061px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.team-tips%20%7B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2011px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2059px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20%2F%2A%20.team-tips%3A%3Amarker%20%7B%0D%0A%20%20margin-right%3A%202px%20%21important%3B%0D%0A%7D%20%2A%2F%0D%0A%0D%0A%20%20%20%20%20%20.contact-us%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23d1d1d1%3B%0D%0A%20%20%20%20%20%20%20%20padding-top%3A%2024px%3B%0D%0A%20%20%20%20%20%20%20%20border-top%3A%20solid%200.5px%20%23d1d1d1%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-us-info%20%7B%0D%0A%20%20%20%20%20%20%20%20text-align%3A%20center%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2010px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23838384%3B%0D%0A%20%20%20%20%20%20%20%20padding%3A%200%2040px%3B%0D%0A%20%20%20%20%20%20%20%20line-height%3A%2018px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-tel%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23838384%3B%0D%0A%20%20%20%20%20%20%20%20text-align%3A%20center%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2010px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-tel-number%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-created-version%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23838384%3B%0D%0A%20%20%20%20%20%20%20%20text-align%3A%20center%3B%0D%0A%20%20%20%20%20%20%20%20margin-top%3A%207px%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2010px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.qr-code%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%2064px%3B%0D%0A%20%20%20%20%20%20%20%20margin%3A%209px%20auto%2015px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20%2F%2A%20%E5%BC%82%E5%B8%B8%E9%82%AE%E4%BB%B6%20%2A%2F%0D%0A%0D%0A%20%20%20%20%20%20.exception-title%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2016px%3B%0D%0A%20%20%20%20%20%20%20%20font-weight%3A%20bold%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2024px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.exception-content%20%7B%0D%0A%20%20%20%20%20%20%20%20line-height%3A%2024px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2012px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.exception-ignore%20%7B%0D%0A%20%20%20%20%20%20%20%20margin-top%3A%2045px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2012px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.exception-team-tips%20%7B%0D%0A%20%20%20%20%20%20%20%20margin-top%3A%2085px%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2020px%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2011px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%20%20%20%20%3C%2Fstyle%3E%0D%0A%20%20%3C%2Fhead%3E%0D%0A%20%20%3Cbody%3E%0D%0A%20%20%20%20%3Cdiv%20id%3D%22app%22%3E%0D%0A%20%20%20%20%20%20%3Cdiv%20class%3D%22my-header%22%20style%3D%22display%3A%20flex%22%3E%0D%0A%20%20%20%20%20%20%20%20%3Cimg%20style%3D%22margin%3A%20auto%3B%22%20src%3D%22https%3A%2F%2Fabpay-pub.s3.ap-northeast-1.amazonaws.com%2Fabpay1.png%22%20alt%3D%22%22%20class%3D%22logo%22%20%2F%3E%0D%0A%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%0D%0A%20%20%20%20%20%20%3Cdiv%20style%3D%22padding%3A%2022px%2024px%20%21important%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22title-1%22%3E%7B%7B.title%7D%7D%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22code-tips%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%7B%7B.content%7D%7D%0D%0A%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%0D%0A%0D%0A%20%20%20%20%20%20%20%20%3Cli%20class%3D%22team-tips%22%3EABpay%E9%96%8B%E7%99%BC%E8%80%85%E5%9C%98%E9%9A%8A%E6%9C%8D%E5%8B%99%3C%2Fli%3E%0D%0A%0D%0A%20%20%20%20%20%20%20%20%3Csection%20class%3D%22contact-us%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-us-info%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%E6%9C%AC%E9%83%B5%E4%BB%B6%E7%94%B1%E7%B3%BB%E7%B5%B1%E8%87%AA%E5%8B%95%E7%99%BC%E5%87%BA%E8%AB%8B%E5%8B%BF%E5%9B%9E%E5%A4%8D%EF%BC%8C%E5%A6%82%E9%9C%80%E8%A6%81%E4%BA%86%E8%A7%A3%E6%9B%B4%E5%A4%9A%E6%9C%8D%E5%8B%99%EF%BC%8C%E6%AD%A1%E8%BF%8E%E8%A8%AA%E5%95%8FABpay%E5%AE%98%E6%96%B9%E7%B6%B2%0D%0A%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-us-info%22%3E%E4%B9%9F%E5%8F%AF%E4%BB%A5%E9%80%9A%E4%BB%A5%E4%B8%8B%E6%96%B9%E5%BC%8F%E8%81%AF%E7%B5%A1%E6%88%91%E5%80%91%3C%2Fdiv%3E%0D%0A%0D%0A%20%20%20%20%20%20%20%20%20%20%3Ca%20href%3D%22https%3A%2F%2Fwww.baidu.com%22%20target%3D%22_blank%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cimg%20src%3D%22https%3A%2F%2Fabpay-pub.s3.ap-northeast-1.amazonaws.com%2Fabpay.png%22%20alt%3D%22%22%20class%3D%22qr-code%22%20%2F%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3C%2Fa%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-tel%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%E5%AE%A2%E6%9C%8D%E9%9B%BB%E8%A9%B1%EF%BC%9A%3Cspan%20class%3D%22contact-tel-number%22%3E400-278-2890%3C%2Fspan%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-created-version%22%3E2024%20ABpay.com.cn%20.%20All%20rightes%20reserved%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%3C%2Fsection%3E%0D%0A%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%3C%2Fbody%3E%0D%0A%3C%2Fhtml%3E%0D%0A\u0026ReplyToAddress=true\u0026Subject=%E6%B5%8B%E8%AF%95%E4%B8%BB%E9%A2%98\u0026ToAddress=995116474%40qq.com\nhost:dm.aliyuncs.com\nx-acs-action:SingleSendMail\nx-acs-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\nx-acs-date:2024-09-29T02:55:30Z\nx-acs-signature-nonce:b14ac4b11334481c0cfd2b4337386b5a\nx-acs-version:2015-11-23\n\nhost;x-acs-action;x-acs-content-sha256;x-acs-date;x-acs-signature-nonce;x-acs-version\ne3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855] request id: F94EFD36-79A5-5E37-8381-CD38B309D398\n Data: {\"Code\":\"SignatureDoesNotMatch\",\"HostId\":\"dm.aliyuncs.com\",\"Message\":\"Specified signature does not match our calculation. server StringToSign is [ACS3-HMAC-SHA256\\n299a00c1d8d7e51956fe635bc412722737573c24792f426ee23342882fc7a0a7], server CanonicalRequest is [POST\\n/\\nAccountName=test%40email.aisz.org\\u0026AddressType=0\\u0026HtmlBody=%3C%21DOCTYPE%20html%3E%0D%0A%3Chtml%20lang%3D%22en%22%3E%0D%0A%20%20%3Chead%3E%0D%0A%20%20%20%20%3Cmeta%20charset%3D%22UTF-8%22%20%2F%3E%0D%0A%20%20%20%20%3Cmeta%20name%3D%22viewport%22%20content%3D%22width%3Ddevice-width%2C%20initial-scale%3D1.0%22%20%2F%3E%0D%0A%20%20%20%20%3Ctitle%3EDocument%3C%2Ftitle%3E%0D%0A%20%20%20%20%3C%21--%20%3Clink%20rel%3D%22stylesheet%22%20href%3D%22.%2Fassets%2Fcss%2Findex.css%22%20%2F%3E%20--%3E%0D%0A%20%20%20%20%3Cstyle%3E%0D%0A%20%20%20%20%20%20%2A%20%7B%0D%0A%20%20%20%20%20%20%20%20padding%3A%200%3B%0D%0A%20%20%20%20%20%20%20%20margin%3A%200%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20img%20%7B%0D%0A%20%20%20%20%20%20%20%20display%3A%20block%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20%23app%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%20480px%3B%0D%0A%20%20%20%20%20%20%20%20margin%3A%200%20auto%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.my-header%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%20100%25%3B%0D%0A%20%20%20%20%20%20%20%20height%3A%2096px%3B%0D%0A%20%20%20%20%20%20%20%20background-color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.my-header%20.logo%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%2095px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.code-tips%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2012px%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2022px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.code-content%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%20%20font-weight%3A%20bold%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2028px%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2061px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.team-tips%20%7B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2011px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2059px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20%2F%2A%20.team-tips%3A%3Amarker%20%7B%0D%0A%20%20margin-right%3A%202px%20%21important%3B%0D%0A%7D%20%2A%2F%0D%0A%0D%0A%20%20%20%20%20%20.contact-us%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23d1d1d1%3B%0D%0A%20%20%20%20%20%20%20%20padding-top%3A%2024px%3B%0D%0A%20%20%20%20%20%20%20%20border-top%3A%20solid%200.5px%20%23d1d1d1%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-us-info%20%7B%0D%0A%20%20%20%20%20%20%20%20text-align%3A%20center%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2010px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23838384%3B%0D%0A%20%20%20%20%20%20%20%20padding%3A%200%2040px%3B%0D%0A%20%20%20%20%20%20%20%20line-height%3A%2018px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-tel%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23838384%3B%0D%0A%20%20%20%20%20%20%20%20text-align%3A%20center%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2010px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-tel-number%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-created-version%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23838384%3B%0D%0A%20%20%20%20%20%20%20%20text-align%3A%20center%3B%0D%0A%20%20%20%20%20%20%20%20margin-top%3A%207px%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2010px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.qr-code%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%2064px%3B%0D%0A%20%20%20%20%20%20%20%20margin%3A%209px%20auto%2015px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20%2F%2A%20%E5%BC%82%E5%B8%B8%E9%82%AE%E4%BB%B6%20%2A%2F%0D%0A%0D%0A%20%20%20%20%20%20.exception-title%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2016px%3B%0D%0A%20%20%20%20%20%20%20%20font-weight%3A%20bold%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2024px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.exception-content%20%7B%0D%0A%20%20%20%20%20%20%20%20line-height%3A%2024px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2012px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.exception-ignore%20%7B%0D%0A%20%20%20%20%20%20%20%20margin-top%3A%2045px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2012px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.exception-team-tips%20%7B%0D%0A%20%20%20%20%20%20%20%20margin-top%3A%2085px%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2020px%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2011px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%20%20%20%20%3C%2Fstyle%3E%0D%0A%20%20%3C%2Fhead%3E%0D%0A%20%20%3Cbody%3E%0D%0A%20%20%20%20%3Cdiv%20id%3D%22app%22%3E%0D%0A%20%20%20%20%20%20%3Cdiv%20class%3D%22my-header%22%20style%3D%22display%3A%20flex%22%3E%0D%0A%20%20%20%20%20%20%20%20%3Cimg%20style%3D%22margin%3A%20auto%3B%22%20src%3D%22https%3A%2F%2Fabpay-pub.s3.ap-northeast-1.amazonaws.com%2Fabpay1.png%22%20alt%3D%22%22%20class%3D%22logo%22%20%2F%3E%0D%0A%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%0D%0A%20%20%20%20%20%20%3Cdiv%20style%3D%22padding%3A%2022px%2024px%20%21important%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22title-1%22%3E%7B%7B.title%7D%7D%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22code-tips%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%7B%7B.content%7D%7D%0D%0A%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%0D%0A%0D%0A%20%20%20%20%20%20%20%20%3Cli%20class%3D%22team-tips%22%3EABpay%E9%96%8B%E7%99%BC%E8%80%85%E5%9C%98%E9%9A%8A%E6%9C%8D%E5%8B%99%3C%2Fli%3E%0D%0A%0D%0A%20%20%20%20%20%20%20%20%3Csection%20class%3D%22contact-us%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-us-info%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%E6%9C%AC%E9%83%B5%E4%BB%B6%E7%94%B1%E7%B3%BB%E7%B5%B1%E8%87%AA%E5%8B%95%E7%99%BC%E5%87%BA%E8%AB%8B%E5%8B%BF%E5%9B%9E%E5%A4%8D%EF%BC%8C%E5%A6%82%E9%9C%80%E8%A6%81%E4%BA%86%E8%A7%A3%E6%9B%B4%E5%A4%9A%E6%9C%8D%E5%8B%99%EF%BC%8C%E6%AD%A1%E8%BF%8E%E8%A8%AA%E5%95%8FABpay%E5%AE%98%E6%96%B9%E7%B6%B2%0D%0A%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-us-info%22%3E%E4%B9%9F%E5%8F%AF%E4%BB%A5%E9%80%9A%E4%BB%A5%E4%B8%8B%E6%96%B9%E5%BC%8F%E8%81%AF%E7%B5%A1%E6%88%91%E5%80%91%3C%2Fdiv%3E%0D%0A%0D%0A%20%20%20%20%20%20%20%20%20%20%3Ca%20href%3D%22https%3A%2F%2Fwww.baidu.com%22%20target%3D%22_blank%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cimg%20src%3D%22https%3A%2F%2Fabpay-pub.s3.ap-northeast-1.amazonaws.com%2Fabpay.png%22%20alt%3D%22%22%20class%3D%22qr-code%22%20%2F%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3C%2Fa%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-tel%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%E5%AE%A2%E6%9C%8D%E9%9B%BB%E8%A9%B1%EF%BC%9A%3Cspan%20class%3D%22contact-tel-number%22%3E400-278-2890%3C%2Fspan%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-created-version%22%3E2024%20ABpay.com.cn%20.%20All%20rightes%20reserved%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%3C%2Fsection%3E%0D%0A%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%3C%2Fbody%3E%0D%0A%3C%2Fhtml%3E%0D%0A\\u0026ReplyToAddress=true\\u0026Subject=%E6%B5%8B%E8%AF%95%E4%B8%BB%E9%A2%98\\u0026ToAddress=995116474%40qq.com\\nhost:dm.aliyuncs.com\\nx-acs-action:SingleSendMail\\nx-acs-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\\nx-acs-date:2024-09-29T02:55:30Z\\nx-acs-signature-nonce:b14ac4b11334481c0cfd2b4337386b5a\\nx-acs-version:2015-11-23\\n\\nhost;x-acs-action;x-acs-content-sha256;x-acs-date;x-acs-signature-nonce;x-acs-version\\ne3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855]\",\"Recommend\":\"https://api.aliyun.com/troubleshoot?q=SignatureDoesNotMatch\\u0026product=Dm\\u0026requestId=F94EFD36-79A5-5E37-8381-CD38B309D398\",\"RequestId\":\"F94EFD36-79A5-5E37-8381-CD38B309D398\",\"statusCode\":400}\n"]} \ No newline at end of file diff --git a/aliyun/log/2024-09-29_info.log b/aliyun/log/2024-09-29_info.log new file mode 100644 index 0000000..ec2cbdb --- /dev/null +++ b/aliyun/log/2024-09-29_info.log @@ -0,0 +1,7 @@ + +[info]{"time":"2024-09-29 10:55:10.509283","file":"/aliyun.go:26","func":"InitEmail","gid":"52","content":["params:{Smtp:\u003cnil\u003e Aws:\u003cnil\u003e Aliyun:0xc000472230 Mailgun:\u003cnil\u003e}"]} +[info]{"time":"2024-09-29 10:55:10.514970","file":"/aliyun.go:30","func":"InitEmail","gid":"52","content":["params:\u0026{AccessId:LTAI5tKekDMnCjp1xNYjuNUe AccessKey:hB908c9MbFfZ5WGW34ECRk8bENkkJh Endpoint:dm.aliyuncs.com AccountName:test@email.aisz.org ReplyAddress:287852692@qq.com}"]} +[info]{"time":"2024-09-29 10:55:10.706935","file":"/aliyun.go:96","func":"func1","gid":"52","content":["resp:{} err:SDKError:\n StatusCode: 400\n Code: SignatureDoesNotMatch\n Message: code: 400, Specified signature does not match our calculation. server StringToSign is [ACS3-HMAC-SHA256\n8568e49ed7962180bf3ec08875b45f3ed164e5b8e6af89de16a0de175cadfd40], server CanonicalRequest is [POST\n/\nAccountName=test%40email.aisz.org\u0026AddressType=0\u0026HtmlBody=%3C%21DOCTYPE%20html%3E%0D%0A%3Chtml%20lang%3D%22en%22%3E%0D%0A%20%20%3Chead%3E%0D%0A%20%20%20%20%3Cmeta%20charset%3D%22UTF-8%22%20%2F%3E%0D%0A%20%20%20%20%3Cmeta%20name%3D%22viewport%22%20content%3D%22width%3Ddevice-width%2C%20initial-scale%3D1.0%22%20%2F%3E%0D%0A%20%20%20%20%3Ctitle%3EDocument%3C%2Ftitle%3E%0D%0A%20%20%20%20%3C%21--%20%3Clink%20rel%3D%22stylesheet%22%20href%3D%22.%2Fassets%2Fcss%2Findex.css%22%20%2F%3E%20--%3E%0D%0A%20%20%20%20%3Cstyle%3E%0D%0A%20%20%20%20%20%20%2A%20%7B%0D%0A%20%20%20%20%20%20%20%20padding%3A%200%3B%0D%0A%20%20%20%20%20%20%20%20margin%3A%200%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20img%20%7B%0D%0A%20%20%20%20%20%20%20%20display%3A%20block%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20%23app%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%20480px%3B%0D%0A%20%20%20%20%20%20%20%20margin%3A%200%20auto%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.my-header%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%20100%25%3B%0D%0A%20%20%20%20%20%20%20%20height%3A%2096px%3B%0D%0A%20%20%20%20%20%20%20%20background-color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.my-header%20.logo%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%2095px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.code-tips%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2012px%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2022px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.code-content%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%20%20font-weight%3A%20bold%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2028px%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2061px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.team-tips%20%7B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2011px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2059px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20%2F%2A%20.team-tips%3A%3Amarker%20%7B%0D%0A%20%20margin-right%3A%202px%20%21important%3B%0D%0A%7D%20%2A%2F%0D%0A%0D%0A%20%20%20%20%20%20.contact-us%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23d1d1d1%3B%0D%0A%20%20%20%20%20%20%20%20padding-top%3A%2024px%3B%0D%0A%20%20%20%20%20%20%20%20border-top%3A%20solid%200.5px%20%23d1d1d1%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-us-info%20%7B%0D%0A%20%20%20%20%20%20%20%20text-align%3A%20center%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2010px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23838384%3B%0D%0A%20%20%20%20%20%20%20%20padding%3A%200%2040px%3B%0D%0A%20%20%20%20%20%20%20%20line-height%3A%2018px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-tel%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23838384%3B%0D%0A%20%20%20%20%20%20%20%20text-align%3A%20center%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2010px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-tel-number%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-created-version%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23838384%3B%0D%0A%20%20%20%20%20%20%20%20text-align%3A%20center%3B%0D%0A%20%20%20%20%20%20%20%20margin-top%3A%207px%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2010px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.qr-code%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%2064px%3B%0D%0A%20%20%20%20%20%20%20%20margin%3A%209px%20auto%2015px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20%2F%2A%20%E5%BC%82%E5%B8%B8%E9%82%AE%E4%BB%B6%20%2A%2F%0D%0A%0D%0A%20%20%20%20%20%20.exception-title%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2016px%3B%0D%0A%20%20%20%20%20%20%20%20font-weight%3A%20bold%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2024px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.exception-content%20%7B%0D%0A%20%20%20%20%20%20%20%20line-height%3A%2024px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2012px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.exception-ignore%20%7B%0D%0A%20%20%20%20%20%20%20%20margin-top%3A%2045px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2012px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.exception-team-tips%20%7B%0D%0A%20%20%20%20%20%20%20%20margin-top%3A%2085px%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2020px%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2011px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%20%20%20%20%3C%2Fstyle%3E%0D%0A%20%20%3C%2Fhead%3E%0D%0A%20%20%3Cbody%3E%0D%0A%20%20%20%20%3Cdiv%20id%3D%22app%22%3E%0D%0A%20%20%20%20%20%20%3Cdiv%20class%3D%22my-header%22%20style%3D%22display%3A%20flex%22%3E%0D%0A%20%20%20%20%20%20%20%20%3Cimg%20style%3D%22margin%3A%20auto%3B%22%20src%3D%22https%3A%2F%2Fabpay-pub.s3.ap-northeast-1.amazonaws.com%2Fabpay1.png%22%20alt%3D%22%22%20class%3D%22logo%22%20%2F%3E%0D%0A%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%0D%0A%20%20%20%20%20%20%3Cdiv%20style%3D%22padding%3A%2022px%2024px%20%21important%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22title-1%22%3E%7B%7B.title%7D%7D%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22code-tips%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%7B%7B.content%7D%7D%0D%0A%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%0D%0A%0D%0A%20%20%20%20%20%20%20%20%3Cli%20class%3D%22team-tips%22%3EABpay%E9%96%8B%E7%99%BC%E8%80%85%E5%9C%98%E9%9A%8A%E6%9C%8D%E5%8B%99%3C%2Fli%3E%0D%0A%0D%0A%20%20%20%20%20%20%20%20%3Csection%20class%3D%22contact-us%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-us-info%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%E6%9C%AC%E9%83%B5%E4%BB%B6%E7%94%B1%E7%B3%BB%E7%B5%B1%E8%87%AA%E5%8B%95%E7%99%BC%E5%87%BA%E8%AB%8B%E5%8B%BF%E5%9B%9E%E5%A4%8D%EF%BC%8C%E5%A6%82%E9%9C%80%E8%A6%81%E4%BA%86%E8%A7%A3%E6%9B%B4%E5%A4%9A%E6%9C%8D%E5%8B%99%EF%BC%8C%E6%AD%A1%E8%BF%8E%E8%A8%AA%E5%95%8FABpay%E5%AE%98%E6%96%B9%E7%B6%B2%0D%0A%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-us-info%22%3E%E4%B9%9F%E5%8F%AF%E4%BB%A5%E9%80%9A%E4%BB%A5%E4%B8%8B%E6%96%B9%E5%BC%8F%E8%81%AF%E7%B5%A1%E6%88%91%E5%80%91%3C%2Fdiv%3E%0D%0A%0D%0A%20%20%20%20%20%20%20%20%20%20%3Ca%20href%3D%22https%3A%2F%2Fwww.baidu.com%22%20target%3D%22_blank%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cimg%20src%3D%22https%3A%2F%2Fabpay-pub.s3.ap-northeast-1.amazonaws.com%2Fabpay.png%22%20alt%3D%22%22%20class%3D%22qr-code%22%20%2F%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3C%2Fa%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-tel%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%E5%AE%A2%E6%9C%8D%E9%9B%BB%E8%A9%B1%EF%BC%9A%3Cspan%20class%3D%22contact-tel-number%22%3E400-278-2890%3C%2Fspan%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-created-version%22%3E2024%20ABpay.com.cn%20.%20All%20rightes%20reserved%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%3C%2Fsection%3E%0D%0A%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%3C%2Fbody%3E%0D%0A%3C%2Fhtml%3E%0D%0A\u0026ReplyToAddress=true\u0026Subject=%E6%B5%8B%E8%AF%95%E4%B8%BB%E9%A2%98\u0026ToAddress=huangxinyun%40dreaminglife.cn\nhost:dm.aliyuncs.com\nx-acs-action:SingleSendMail\nx-acs-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\nx-acs-date:2024-09-29T02:55:10Z\nx-acs-signature-nonce:11fe49c7141223e5105db544a20aeff3\nx-acs-version:2015-11-23\n\nhost;x-acs-action;x-acs-content-sha256;x-acs-date;x-acs-signature-nonce;x-acs-version\ne3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855] request id: 07681037-BE16-557E-8322-EBBC720ADD63\n Data: {\"Code\":\"SignatureDoesNotMatch\",\"HostId\":\"dm.aliyuncs.com\",\"Message\":\"Specified signature does not match our calculation. server StringToSign is [ACS3-HMAC-SHA256\\n8568e49ed7962180bf3ec08875b45f3ed164e5b8e6af89de16a0de175cadfd40], server CanonicalRequest is [POST\\n/\\nAccountName=test%40email.aisz.org\\u0026AddressType=0\\u0026HtmlBody=%3C%21DOCTYPE%20html%3E%0D%0A%3Chtml%20lang%3D%22en%22%3E%0D%0A%20%20%3Chead%3E%0D%0A%20%20%20%20%3Cmeta%20charset%3D%22UTF-8%22%20%2F%3E%0D%0A%20%20%20%20%3Cmeta%20name%3D%22viewport%22%20content%3D%22width%3Ddevice-width%2C%20initial-scale%3D1.0%22%20%2F%3E%0D%0A%20%20%20%20%3Ctitle%3EDocument%3C%2Ftitle%3E%0D%0A%20%20%20%20%3C%21--%20%3Clink%20rel%3D%22stylesheet%22%20href%3D%22.%2Fassets%2Fcss%2Findex.css%22%20%2F%3E%20--%3E%0D%0A%20%20%20%20%3Cstyle%3E%0D%0A%20%20%20%20%20%20%2A%20%7B%0D%0A%20%20%20%20%20%20%20%20padding%3A%200%3B%0D%0A%20%20%20%20%20%20%20%20margin%3A%200%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20img%20%7B%0D%0A%20%20%20%20%20%20%20%20display%3A%20block%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20%23app%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%20480px%3B%0D%0A%20%20%20%20%20%20%20%20margin%3A%200%20auto%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.my-header%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%20100%25%3B%0D%0A%20%20%20%20%20%20%20%20height%3A%2096px%3B%0D%0A%20%20%20%20%20%20%20%20background-color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.my-header%20.logo%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%2095px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.code-tips%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2012px%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2022px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.code-content%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%20%20font-weight%3A%20bold%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2028px%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2061px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.team-tips%20%7B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2011px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2059px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20%2F%2A%20.team-tips%3A%3Amarker%20%7B%0D%0A%20%20margin-right%3A%202px%20%21important%3B%0D%0A%7D%20%2A%2F%0D%0A%0D%0A%20%20%20%20%20%20.contact-us%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23d1d1d1%3B%0D%0A%20%20%20%20%20%20%20%20padding-top%3A%2024px%3B%0D%0A%20%20%20%20%20%20%20%20border-top%3A%20solid%200.5px%20%23d1d1d1%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-us-info%20%7B%0D%0A%20%20%20%20%20%20%20%20text-align%3A%20center%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2010px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23838384%3B%0D%0A%20%20%20%20%20%20%20%20padding%3A%200%2040px%3B%0D%0A%20%20%20%20%20%20%20%20line-height%3A%2018px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-tel%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23838384%3B%0D%0A%20%20%20%20%20%20%20%20text-align%3A%20center%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2010px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-tel-number%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-created-version%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23838384%3B%0D%0A%20%20%20%20%20%20%20%20text-align%3A%20center%3B%0D%0A%20%20%20%20%20%20%20%20margin-top%3A%207px%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2010px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.qr-code%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%2064px%3B%0D%0A%20%20%20%20%20%20%20%20margin%3A%209px%20auto%2015px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20%2F%2A%20%E5%BC%82%E5%B8%B8%E9%82%AE%E4%BB%B6%20%2A%2F%0D%0A%0D%0A%20%20%20%20%20%20.exception-title%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2016px%3B%0D%0A%20%20%20%20%20%20%20%20font-weight%3A%20bold%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2024px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.exception-content%20%7B%0D%0A%20%20%20%20%20%20%20%20line-height%3A%2024px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2012px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.exception-ignore%20%7B%0D%0A%20%20%20%20%20%20%20%20margin-top%3A%2045px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2012px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.exception-team-tips%20%7B%0D%0A%20%20%20%20%20%20%20%20margin-top%3A%2085px%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2020px%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2011px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%20%20%20%20%3C%2Fstyle%3E%0D%0A%20%20%3C%2Fhead%3E%0D%0A%20%20%3Cbody%3E%0D%0A%20%20%20%20%3Cdiv%20id%3D%22app%22%3E%0D%0A%20%20%20%20%20%20%3Cdiv%20class%3D%22my-header%22%20style%3D%22display%3A%20flex%22%3E%0D%0A%20%20%20%20%20%20%20%20%3Cimg%20style%3D%22margin%3A%20auto%3B%22%20src%3D%22https%3A%2F%2Fabpay-pub.s3.ap-northeast-1.amazonaws.com%2Fabpay1.png%22%20alt%3D%22%22%20class%3D%22logo%22%20%2F%3E%0D%0A%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%0D%0A%20%20%20%20%20%20%3Cdiv%20style%3D%22padding%3A%2022px%2024px%20%21important%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22title-1%22%3E%7B%7B.title%7D%7D%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22code-tips%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%7B%7B.content%7D%7D%0D%0A%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%0D%0A%0D%0A%20%20%20%20%20%20%20%20%3Cli%20class%3D%22team-tips%22%3EABpay%E9%96%8B%E7%99%BC%E8%80%85%E5%9C%98%E9%9A%8A%E6%9C%8D%E5%8B%99%3C%2Fli%3E%0D%0A%0D%0A%20%20%20%20%20%20%20%20%3Csection%20class%3D%22contact-us%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-us-info%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%E6%9C%AC%E9%83%B5%E4%BB%B6%E7%94%B1%E7%B3%BB%E7%B5%B1%E8%87%AA%E5%8B%95%E7%99%BC%E5%87%BA%E8%AB%8B%E5%8B%BF%E5%9B%9E%E5%A4%8D%EF%BC%8C%E5%A6%82%E9%9C%80%E8%A6%81%E4%BA%86%E8%A7%A3%E6%9B%B4%E5%A4%9A%E6%9C%8D%E5%8B%99%EF%BC%8C%E6%AD%A1%E8%BF%8E%E8%A8%AA%E5%95%8FABpay%E5%AE%98%E6%96%B9%E7%B6%B2%0D%0A%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-us-info%22%3E%E4%B9%9F%E5%8F%AF%E4%BB%A5%E9%80%9A%E4%BB%A5%E4%B8%8B%E6%96%B9%E5%BC%8F%E8%81%AF%E7%B5%A1%E6%88%91%E5%80%91%3C%2Fdiv%3E%0D%0A%0D%0A%20%20%20%20%20%20%20%20%20%20%3Ca%20href%3D%22https%3A%2F%2Fwww.baidu.com%22%20target%3D%22_blank%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cimg%20src%3D%22https%3A%2F%2Fabpay-pub.s3.ap-northeast-1.amazonaws.com%2Fabpay.png%22%20alt%3D%22%22%20class%3D%22qr-code%22%20%2F%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3C%2Fa%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-tel%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%E5%AE%A2%E6%9C%8D%E9%9B%BB%E8%A9%B1%EF%BC%9A%3Cspan%20class%3D%22contact-tel-number%22%3E400-278-2890%3C%2Fspan%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-created-version%22%3E2024%20ABpay.com.cn%20.%20All%20rightes%20reserved%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%3C%2Fsection%3E%0D%0A%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%3C%2Fbody%3E%0D%0A%3C%2Fhtml%3E%0D%0A\\u0026ReplyToAddress=true\\u0026Subject=%E6%B5%8B%E8%AF%95%E4%B8%BB%E9%A2%98\\u0026ToAddress=huangxinyun%40dreaminglife.cn\\nhost:dm.aliyuncs.com\\nx-acs-action:SingleSendMail\\nx-acs-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\\nx-acs-date:2024-09-29T02:55:10Z\\nx-acs-signature-nonce:11fe49c7141223e5105db544a20aeff3\\nx-acs-version:2015-11-23\\n\\nhost;x-acs-action;x-acs-content-sha256;x-acs-date;x-acs-signature-nonce;x-acs-version\\ne3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855]\",\"Recommend\":\"https://api.aliyun.com/troubleshoot?q=SignatureDoesNotMatch\\u0026product=Dm\\u0026requestId=07681037-BE16-557E-8322-EBBC720ADD63\",\"RequestId\":\"07681037-BE16-557E-8322-EBBC720ADD63\",\"statusCode\":400}\n"]} +[info]{"time":"2024-09-29 10:55:30.380779","file":"/aliyun.go:26","func":"InitEmail","gid":"68","content":["params:{Smtp:\u003cnil\u003e Aws:\u003cnil\u003e Aliyun:0xc0000a3d60 Mailgun:\u003cnil\u003e}"]} +[info]{"time":"2024-09-29 10:55:30.386779","file":"/aliyun.go:30","func":"InitEmail","gid":"68","content":["params:\u0026{AccessId:LTAI5tKekDMnCjp1xNYjuNUe AccessKey:hB908c9MbFfZ5WGW34ECRk8bENkkJh Endpoint:dm.aliyuncs.com AccountName:test@email.aisz.org ReplyAddress:287852692@qq.com}"]} +[info]{"time":"2024-09-29 10:55:30.498623","file":"/aliyun.go:96","func":"func1","gid":"68","content":["resp:{} err:SDKError:\n StatusCode: 400\n Code: SignatureDoesNotMatch\n Message: code: 400, Specified signature does not match our calculation. server StringToSign is [ACS3-HMAC-SHA256\n299a00c1d8d7e51956fe635bc412722737573c24792f426ee23342882fc7a0a7], server CanonicalRequest is [POST\n/\nAccountName=test%40email.aisz.org\u0026AddressType=0\u0026HtmlBody=%3C%21DOCTYPE%20html%3E%0D%0A%3Chtml%20lang%3D%22en%22%3E%0D%0A%20%20%3Chead%3E%0D%0A%20%20%20%20%3Cmeta%20charset%3D%22UTF-8%22%20%2F%3E%0D%0A%20%20%20%20%3Cmeta%20name%3D%22viewport%22%20content%3D%22width%3Ddevice-width%2C%20initial-scale%3D1.0%22%20%2F%3E%0D%0A%20%20%20%20%3Ctitle%3EDocument%3C%2Ftitle%3E%0D%0A%20%20%20%20%3C%21--%20%3Clink%20rel%3D%22stylesheet%22%20href%3D%22.%2Fassets%2Fcss%2Findex.css%22%20%2F%3E%20--%3E%0D%0A%20%20%20%20%3Cstyle%3E%0D%0A%20%20%20%20%20%20%2A%20%7B%0D%0A%20%20%20%20%20%20%20%20padding%3A%200%3B%0D%0A%20%20%20%20%20%20%20%20margin%3A%200%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20img%20%7B%0D%0A%20%20%20%20%20%20%20%20display%3A%20block%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20%23app%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%20480px%3B%0D%0A%20%20%20%20%20%20%20%20margin%3A%200%20auto%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.my-header%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%20100%25%3B%0D%0A%20%20%20%20%20%20%20%20height%3A%2096px%3B%0D%0A%20%20%20%20%20%20%20%20background-color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.my-header%20.logo%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%2095px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.code-tips%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2012px%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2022px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.code-content%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%20%20font-weight%3A%20bold%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2028px%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2061px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.team-tips%20%7B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2011px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2059px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20%2F%2A%20.team-tips%3A%3Amarker%20%7B%0D%0A%20%20margin-right%3A%202px%20%21important%3B%0D%0A%7D%20%2A%2F%0D%0A%0D%0A%20%20%20%20%20%20.contact-us%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23d1d1d1%3B%0D%0A%20%20%20%20%20%20%20%20padding-top%3A%2024px%3B%0D%0A%20%20%20%20%20%20%20%20border-top%3A%20solid%200.5px%20%23d1d1d1%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-us-info%20%7B%0D%0A%20%20%20%20%20%20%20%20text-align%3A%20center%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2010px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23838384%3B%0D%0A%20%20%20%20%20%20%20%20padding%3A%200%2040px%3B%0D%0A%20%20%20%20%20%20%20%20line-height%3A%2018px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-tel%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23838384%3B%0D%0A%20%20%20%20%20%20%20%20text-align%3A%20center%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2010px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-tel-number%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-created-version%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23838384%3B%0D%0A%20%20%20%20%20%20%20%20text-align%3A%20center%3B%0D%0A%20%20%20%20%20%20%20%20margin-top%3A%207px%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2010px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.qr-code%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%2064px%3B%0D%0A%20%20%20%20%20%20%20%20margin%3A%209px%20auto%2015px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20%2F%2A%20%E5%BC%82%E5%B8%B8%E9%82%AE%E4%BB%B6%20%2A%2F%0D%0A%0D%0A%20%20%20%20%20%20.exception-title%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2016px%3B%0D%0A%20%20%20%20%20%20%20%20font-weight%3A%20bold%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2024px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.exception-content%20%7B%0D%0A%20%20%20%20%20%20%20%20line-height%3A%2024px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2012px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.exception-ignore%20%7B%0D%0A%20%20%20%20%20%20%20%20margin-top%3A%2045px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2012px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.exception-team-tips%20%7B%0D%0A%20%20%20%20%20%20%20%20margin-top%3A%2085px%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2020px%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2011px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%20%20%20%20%3C%2Fstyle%3E%0D%0A%20%20%3C%2Fhead%3E%0D%0A%20%20%3Cbody%3E%0D%0A%20%20%20%20%3Cdiv%20id%3D%22app%22%3E%0D%0A%20%20%20%20%20%20%3Cdiv%20class%3D%22my-header%22%20style%3D%22display%3A%20flex%22%3E%0D%0A%20%20%20%20%20%20%20%20%3Cimg%20style%3D%22margin%3A%20auto%3B%22%20src%3D%22https%3A%2F%2Fabpay-pub.s3.ap-northeast-1.amazonaws.com%2Fabpay1.png%22%20alt%3D%22%22%20class%3D%22logo%22%20%2F%3E%0D%0A%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%0D%0A%20%20%20%20%20%20%3Cdiv%20style%3D%22padding%3A%2022px%2024px%20%21important%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22title-1%22%3E%7B%7B.title%7D%7D%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22code-tips%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%7B%7B.content%7D%7D%0D%0A%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%0D%0A%0D%0A%20%20%20%20%20%20%20%20%3Cli%20class%3D%22team-tips%22%3EABpay%E9%96%8B%E7%99%BC%E8%80%85%E5%9C%98%E9%9A%8A%E6%9C%8D%E5%8B%99%3C%2Fli%3E%0D%0A%0D%0A%20%20%20%20%20%20%20%20%3Csection%20class%3D%22contact-us%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-us-info%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%E6%9C%AC%E9%83%B5%E4%BB%B6%E7%94%B1%E7%B3%BB%E7%B5%B1%E8%87%AA%E5%8B%95%E7%99%BC%E5%87%BA%E8%AB%8B%E5%8B%BF%E5%9B%9E%E5%A4%8D%EF%BC%8C%E5%A6%82%E9%9C%80%E8%A6%81%E4%BA%86%E8%A7%A3%E6%9B%B4%E5%A4%9A%E6%9C%8D%E5%8B%99%EF%BC%8C%E6%AD%A1%E8%BF%8E%E8%A8%AA%E5%95%8FABpay%E5%AE%98%E6%96%B9%E7%B6%B2%0D%0A%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-us-info%22%3E%E4%B9%9F%E5%8F%AF%E4%BB%A5%E9%80%9A%E4%BB%A5%E4%B8%8B%E6%96%B9%E5%BC%8F%E8%81%AF%E7%B5%A1%E6%88%91%E5%80%91%3C%2Fdiv%3E%0D%0A%0D%0A%20%20%20%20%20%20%20%20%20%20%3Ca%20href%3D%22https%3A%2F%2Fwww.baidu.com%22%20target%3D%22_blank%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cimg%20src%3D%22https%3A%2F%2Fabpay-pub.s3.ap-northeast-1.amazonaws.com%2Fabpay.png%22%20alt%3D%22%22%20class%3D%22qr-code%22%20%2F%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3C%2Fa%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-tel%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%E5%AE%A2%E6%9C%8D%E9%9B%BB%E8%A9%B1%EF%BC%9A%3Cspan%20class%3D%22contact-tel-number%22%3E400-278-2890%3C%2Fspan%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-created-version%22%3E2024%20ABpay.com.cn%20.%20All%20rightes%20reserved%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%3C%2Fsection%3E%0D%0A%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%3C%2Fbody%3E%0D%0A%3C%2Fhtml%3E%0D%0A\u0026ReplyToAddress=true\u0026Subject=%E6%B5%8B%E8%AF%95%E4%B8%BB%E9%A2%98\u0026ToAddress=995116474%40qq.com\nhost:dm.aliyuncs.com\nx-acs-action:SingleSendMail\nx-acs-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\nx-acs-date:2024-09-29T02:55:30Z\nx-acs-signature-nonce:b14ac4b11334481c0cfd2b4337386b5a\nx-acs-version:2015-11-23\n\nhost;x-acs-action;x-acs-content-sha256;x-acs-date;x-acs-signature-nonce;x-acs-version\ne3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855] request id: F94EFD36-79A5-5E37-8381-CD38B309D398\n Data: {\"Code\":\"SignatureDoesNotMatch\",\"HostId\":\"dm.aliyuncs.com\",\"Message\":\"Specified signature does not match our calculation. server StringToSign is [ACS3-HMAC-SHA256\\n299a00c1d8d7e51956fe635bc412722737573c24792f426ee23342882fc7a0a7], server CanonicalRequest is [POST\\n/\\nAccountName=test%40email.aisz.org\\u0026AddressType=0\\u0026HtmlBody=%3C%21DOCTYPE%20html%3E%0D%0A%3Chtml%20lang%3D%22en%22%3E%0D%0A%20%20%3Chead%3E%0D%0A%20%20%20%20%3Cmeta%20charset%3D%22UTF-8%22%20%2F%3E%0D%0A%20%20%20%20%3Cmeta%20name%3D%22viewport%22%20content%3D%22width%3Ddevice-width%2C%20initial-scale%3D1.0%22%20%2F%3E%0D%0A%20%20%20%20%3Ctitle%3EDocument%3C%2Ftitle%3E%0D%0A%20%20%20%20%3C%21--%20%3Clink%20rel%3D%22stylesheet%22%20href%3D%22.%2Fassets%2Fcss%2Findex.css%22%20%2F%3E%20--%3E%0D%0A%20%20%20%20%3Cstyle%3E%0D%0A%20%20%20%20%20%20%2A%20%7B%0D%0A%20%20%20%20%20%20%20%20padding%3A%200%3B%0D%0A%20%20%20%20%20%20%20%20margin%3A%200%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20img%20%7B%0D%0A%20%20%20%20%20%20%20%20display%3A%20block%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20%23app%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%20480px%3B%0D%0A%20%20%20%20%20%20%20%20margin%3A%200%20auto%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.my-header%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%20100%25%3B%0D%0A%20%20%20%20%20%20%20%20height%3A%2096px%3B%0D%0A%20%20%20%20%20%20%20%20background-color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.my-header%20.logo%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%2095px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.code-tips%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2012px%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2022px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.code-content%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%20%20font-weight%3A%20bold%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2028px%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2061px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.team-tips%20%7B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2011px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2059px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20%2F%2A%20.team-tips%3A%3Amarker%20%7B%0D%0A%20%20margin-right%3A%202px%20%21important%3B%0D%0A%7D%20%2A%2F%0D%0A%0D%0A%20%20%20%20%20%20.contact-us%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23d1d1d1%3B%0D%0A%20%20%20%20%20%20%20%20padding-top%3A%2024px%3B%0D%0A%20%20%20%20%20%20%20%20border-top%3A%20solid%200.5px%20%23d1d1d1%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-us-info%20%7B%0D%0A%20%20%20%20%20%20%20%20text-align%3A%20center%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2010px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23838384%3B%0D%0A%20%20%20%20%20%20%20%20padding%3A%200%2040px%3B%0D%0A%20%20%20%20%20%20%20%20line-height%3A%2018px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-tel%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23838384%3B%0D%0A%20%20%20%20%20%20%20%20text-align%3A%20center%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2010px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-tel-number%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.contact-created-version%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%23838384%3B%0D%0A%20%20%20%20%20%20%20%20text-align%3A%20center%3B%0D%0A%20%20%20%20%20%20%20%20margin-top%3A%207px%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2010px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.qr-code%20%7B%0D%0A%20%20%20%20%20%20%20%20width%3A%2064px%3B%0D%0A%20%20%20%20%20%20%20%20margin%3A%209px%20auto%2015px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20%2F%2A%20%E5%BC%82%E5%B8%B8%E9%82%AE%E4%BB%B6%20%2A%2F%0D%0A%0D%0A%20%20%20%20%20%20.exception-title%20%7B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%231b1b22%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2016px%3B%0D%0A%20%20%20%20%20%20%20%20font-weight%3A%20bold%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2024px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.exception-content%20%7B%0D%0A%20%20%20%20%20%20%20%20line-height%3A%2024px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2012px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.exception-ignore%20%7B%0D%0A%20%20%20%20%20%20%20%20margin-top%3A%2045px%3B%0D%0A%20%20%20%20%20%20%20%20color%3A%20%235b5b65%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2012px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20%20%20.exception-team-tips%20%7B%0D%0A%20%20%20%20%20%20%20%20margin-top%3A%2085px%3B%0D%0A%20%20%20%20%20%20%20%20margin-bottom%3A%2020px%3B%0D%0A%20%20%20%20%20%20%20%20font-size%3A%2011px%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%20%20%20%20%3C%2Fstyle%3E%0D%0A%20%20%3C%2Fhead%3E%0D%0A%20%20%3Cbody%3E%0D%0A%20%20%20%20%3Cdiv%20id%3D%22app%22%3E%0D%0A%20%20%20%20%20%20%3Cdiv%20class%3D%22my-header%22%20style%3D%22display%3A%20flex%22%3E%0D%0A%20%20%20%20%20%20%20%20%3Cimg%20style%3D%22margin%3A%20auto%3B%22%20src%3D%22https%3A%2F%2Fabpay-pub.s3.ap-northeast-1.amazonaws.com%2Fabpay1.png%22%20alt%3D%22%22%20class%3D%22logo%22%20%2F%3E%0D%0A%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%0D%0A%20%20%20%20%20%20%3Cdiv%20style%3D%22padding%3A%2022px%2024px%20%21important%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22title-1%22%3E%7B%7B.title%7D%7D%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22code-tips%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%7B%7B.content%7D%7D%0D%0A%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%0D%0A%0D%0A%20%20%20%20%20%20%20%20%3Cli%20class%3D%22team-tips%22%3EABpay%E9%96%8B%E7%99%BC%E8%80%85%E5%9C%98%E9%9A%8A%E6%9C%8D%E5%8B%99%3C%2Fli%3E%0D%0A%0D%0A%20%20%20%20%20%20%20%20%3Csection%20class%3D%22contact-us%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-us-info%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%E6%9C%AC%E9%83%B5%E4%BB%B6%E7%94%B1%E7%B3%BB%E7%B5%B1%E8%87%AA%E5%8B%95%E7%99%BC%E5%87%BA%E8%AB%8B%E5%8B%BF%E5%9B%9E%E5%A4%8D%EF%BC%8C%E5%A6%82%E9%9C%80%E8%A6%81%E4%BA%86%E8%A7%A3%E6%9B%B4%E5%A4%9A%E6%9C%8D%E5%8B%99%EF%BC%8C%E6%AD%A1%E8%BF%8E%E8%A8%AA%E5%95%8FABpay%E5%AE%98%E6%96%B9%E7%B6%B2%0D%0A%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-us-info%22%3E%E4%B9%9F%E5%8F%AF%E4%BB%A5%E9%80%9A%E4%BB%A5%E4%B8%8B%E6%96%B9%E5%BC%8F%E8%81%AF%E7%B5%A1%E6%88%91%E5%80%91%3C%2Fdiv%3E%0D%0A%0D%0A%20%20%20%20%20%20%20%20%20%20%3Ca%20href%3D%22https%3A%2F%2Fwww.baidu.com%22%20target%3D%22_blank%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cimg%20src%3D%22https%3A%2F%2Fabpay-pub.s3.ap-northeast-1.amazonaws.com%2Fabpay.png%22%20alt%3D%22%22%20class%3D%22qr-code%22%20%2F%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3C%2Fa%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-tel%22%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%E5%AE%A2%E6%9C%8D%E9%9B%BB%E8%A9%B1%EF%BC%9A%3Cspan%20class%3D%22contact-tel-number%22%3E400-278-2890%3C%2Fspan%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22contact-created-version%22%3E2024%20ABpay.com.cn%20.%20All%20rightes%20reserved%3C%2Fdiv%3E%0D%0A%20%20%20%20%20%20%20%20%3C%2Fsection%3E%0D%0A%20%20%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%20%20%3C%2Fdiv%3E%0D%0A%20%20%3C%2Fbody%3E%0D%0A%3C%2Fhtml%3E%0D%0A\\u0026ReplyToAddress=true\\u0026Subject=%E6%B5%8B%E8%AF%95%E4%B8%BB%E9%A2%98\\u0026ToAddress=995116474%40qq.com\\nhost:dm.aliyuncs.com\\nx-acs-action:SingleSendMail\\nx-acs-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\\nx-acs-date:2024-09-29T02:55:30Z\\nx-acs-signature-nonce:b14ac4b11334481c0cfd2b4337386b5a\\nx-acs-version:2015-11-23\\n\\nhost;x-acs-action;x-acs-content-sha256;x-acs-date;x-acs-signature-nonce;x-acs-version\\ne3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855]\",\"Recommend\":\"https://api.aliyun.com/troubleshoot?q=SignatureDoesNotMatch\\u0026product=Dm\\u0026requestId=F94EFD36-79A5-5E37-8381-CD38B309D398\",\"RequestId\":\"F94EFD36-79A5-5E37-8381-CD38B309D398\",\"statusCode\":400}\n"]} \ No newline at end of file diff --git a/aliyun/log/2024-09-30_info.log b/aliyun/log/2024-09-30_info.log new file mode 100644 index 0000000..204c6a1 --- /dev/null +++ b/aliyun/log/2024-09-30_info.log @@ -0,0 +1,4 @@ + +[info]{"time":"2024-09-30 11:31:02.535008","file":"/aliyun.go:26","func":"InitEmail","gid":"53","content":["params:{Smtp:\u003cnil\u003e Aws:\u003cnil\u003e Aliyun:0xc0000a3310 Mailgun:\u003cnil\u003e}"]} +[info]{"time":"2024-09-30 11:31:02.541008","file":"/aliyun.go:30","func":"InitEmail","gid":"53","content":["params:\u0026{AccessId:LTAI5tEQ8L8fmDir8udD3CFr AccessKey:llg9M1U56s2SW5PuerlKPvTB1xYhn0 Endpoint:dm.aliyuncs.com AccountName:test@email.aisz.org ReplyAddress:287852692@qq.com}"]} +[info]{"time":"2024-09-30 11:31:03.017155","file":"/aliyun.go:96","func":"func1","gid":"53","content":["resp:{\n \"headers\": {\n \"access-control-allow-origin\": \"*\",\n \"access-control-expose-headers\": \"*\",\n \"connection\": \"keep-alive\",\n \"content-length\": \"81\",\n \"content-type\": \"application/json;charset=utf-8\",\n \"date\": \"Mon, 30 Sep 2024 03:31:02 GMT\",\n \"etag\": \"8f4BKIO+S82BtzQYSJDv3Sg1\",\n \"keep-alive\": \"timeout=25\",\n \"x-acs-request-id\": \"48DE3F8A-AB82-5A9A-9B73-FD422B247391\",\n \"x-acs-trace-id\": \"80bfb0b978c2b82ac64dd59459485ab2\"\n },\n \"statusCode\": 200,\n \"body\": {\n \"EnvId\": \"600000109324064279\",\n \"RequestId\": \"48DE3F8A-AB82-5A9A-9B73-FD422B247391\"\n }\n} err:\u003cnil\u003e"]} \ No newline at end of file diff --git a/aws/aws.go b/aws/aws.go new file mode 100644 index 0000000..441dff8 --- /dev/null +++ b/aws/aws.go @@ -0,0 +1,82 @@ +package aws + +import ( + "context" + "errors" + + "code.yun.ink/pkg/mailx/interfaces" + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/credentials" + "github.com/aws/aws-sdk-go/aws/session" + "github.com/aws/aws-sdk-go/service/ses" + "github.com/yuninks/loggerx" +) + +// 不支持变更发信人(必须配置好) + +type Aws struct { + interfaces.DefaultEmail + params *interfaces.EmailConfigDataAws + logger loggerx.LoggerInterface +} + +func (l *Aws) InitEmail(ctx context.Context, params interfaces.EmailConfigData, logger loggerx.LoggerInterface) (interfaces.Email, error) { + l.logger.Infof(ctx, "params:%+v", params) + if params.Aws == nil { + return nil, errors.New("not aws") + } + l.logger.Infof(ctx, "params:%+v", params.Aws) + if params.Aws.Region == "" { + params.Aws.Region = "ap-northeast-1" + } + + return &Aws{ + params: params.Aws, + }, nil +} + +func (l *Aws) Send(ctx context.Context, params interfaces.Message) error { + if l.params == nil { + return errors.New("not init") + } + // 配置AWS认证信息 + config := aws.Config{ + Region: aws.String(l.params.Region), // 设置你的AWS区域 + Credentials: credentials.NewStaticCredentials(l.params.AccessId, l.params.AccessSecret, ""), + } + + // 创建AWS会话 + sess := session.Must(session.NewSession(&config)) + + // 创建SES客户端 + svc := ses.New(sess) + + toAddress := []*string{} + for _, val := range params.To { + toAddress = append(toAddress, aws.String(val)) + } + + // 使用SES服务发送邮件 + _, err := svc.SendEmail(&ses.SendEmailInput{ + Destination: &ses.Destination{ + ToAddresses: toAddress, + }, + Message: &ses.Message{ + Body: &ses.Body{ + Html: &ses.Content{ + Data: aws.String(params.Body), + Charset: aws.String("UTF-8"), + }, + }, + Subject: &ses.Content{ + Data: aws.String(params.Subject), + Charset: aws.String("UTF-8"), + }, + }, + Source: aws.String(l.params.Sender), + }) + + // svc.SendRawEmail() + + return err +} diff --git a/aws/aws_test.go b/aws/aws_test.go new file mode 100644 index 0000000..647276c --- /dev/null +++ b/aws/aws_test.go @@ -0,0 +1,52 @@ +package aws_test + +import ( + "context" + "testing" + + "code.yun.ink/pkg/mailx/aws" + "code.yun.ink/pkg/mailx/interfaces" + "github.com/yuninks/loggerx" +) + +// https://ap-northeast-1.console.aws.amazon.com/ses/home?region=ap-northeast-1#/identities + +func TestSend(t *testing.T) { + // email: + // #区域 + // AwsRegion: "ap-northeast-1" + // #秘钥ID + // AwsAccessKeyId: "AKIAU6GD3MNRHKR4RZG5" + // #秘钥 + // AwsSecretAccessKey: "GSdGuFbZlcpVHMODlqeIKr07R/BdTBGeurq0s+4l" + // #发件人 + // Source: "chenlihan@dreaminglife.cn" + + ctx := context.Background() + + logger := loggerx.NewLogger(ctx) + + mail := aws.Aws{} + ini, err := mail.InitEmail(ctx, interfaces.EmailConfigData{ + Aws: &interfaces.EmailConfigDataAws{ + AccessId: "AKIAU6GD3MNRHKR4RZG5", + AccessSecret: "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", + Region: "ap-northeast-1", + Sender: "chenlihan@dreaminglife.cn", + }, + }, logger) + + if err != nil { + t.Fatal(err) + } + err = ini.Send(ctx, interfaces.Message{ + Form: "chenlihan@dreaminglife.cn", + To: []string{"huangxinyun@dreaminglife.cn"}, + Body: "Hello", + Subject: "主题", + }) + if err != nil { + t.Fatal(err) + } + t.Log("send success") +} diff --git a/aws/log/2024-09-27_info.log b/aws/log/2024-09-27_info.log new file mode 100644 index 0000000..462acc3 --- /dev/null +++ b/aws/log/2024-09-27_info.log @@ -0,0 +1,3 @@ + +[info]{"time":"2024-09-27 18:32:19.629859","file":"/aws.go:23","func":"InitEmail","gid":"33","content":["params:{Smtp:\u003cnil\u003e Aws:0xc000698080 Aliyun:\u003cnil\u003e Mailgun:\u003cnil\u003e}"]} +[info]{"time":"2024-09-27 18:32:30.207798","file":"/aws.go:23","func":"InitEmail","gid":"28","content":["params:{Smtp:\u003cnil\u003e Aws:0xc000565400 Aliyun:\u003cnil\u003e Mailgun:\u003cnil\u003e}"]} \ No newline at end of file diff --git a/aws/log/2024-09-30_info.log b/aws/log/2024-09-30_info.log new file mode 100644 index 0000000..d485c73 --- /dev/null +++ b/aws/log/2024-09-30_info.log @@ -0,0 +1,3 @@ + +[info]{"time":"2024-09-30 11:31:01.195981","file":"/aws.go:23","func":"InitEmail","gid":"44","content":["params:{Smtp:\u003cnil\u003e Aws:0xc00078c080 Aliyun:\u003cnil\u003e Mailgun:\u003cnil\u003e}"]} +[info]{"time":"2024-09-30 11:31:01.201642","file":"/aws.go:27","func":"InitEmail","gid":"44","content":["params:\u0026{AccessId:AKIAU6GD3MNRHKR4RZG5 AccessSecret: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 Region:ap-northeast-1 Sender:chenlihan@dreaminglife.cn}"]} \ No newline at end of file diff --git a/go.mod b/go.mod index 4fdbf9c..9544eb7 100644 --- a/go.mod +++ b/go.mod @@ -1,10 +1,59 @@ module code.yun.ink/pkg/mailx -go 1.20 +go 1.22 -require github.com/PuerkitoBio/goquery v1.9.2 +toolchain go1.22.6 require ( - github.com/andybalholm/cascadia v1.3.2 // indirect - golang.org/x/net v0.24.0 // indirect + github.com/PuerkitoBio/goquery v1.9.2 + github.com/alibabacloud-go/darabonba-openapi/v2 v2.0.10 + github.com/alibabacloud-go/dm-20151123/v2 v2.2.3 + github.com/alibabacloud-go/tea v1.2.2 + github.com/alibabacloud-go/tea-utils/v2 v2.0.7 + github.com/aws/aws-sdk-go v1.55.5 + github.com/mailgun/mailgun-go/v4 v4.18.5 + github.com/yuninks/loggerx v1.0.12 +) + +require ( + github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.5 // indirect + github.com/alibabacloud-go/debug v1.0.1 // indirect + github.com/alibabacloud-go/endpoint-util v1.1.0 // indirect + github.com/alibabacloud-go/openapi-util v0.1.0 // indirect + github.com/alibabacloud-go/tea-utils v1.3.1 // indirect + github.com/alibabacloud-go/tea-xml v1.1.3 // indirect + github.com/aliyun/credentials-go v1.3.10 // indirect + github.com/andybalholm/cascadia v1.3.2 // indirect + github.com/bytedance/sonic v1.9.1 // indirect + github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect + github.com/clbanning/mxj/v2 v2.5.5 // indirect + github.com/gabriel-vasile/mimetype v1.4.2 // indirect + github.com/gin-contrib/sse v0.1.0 // indirect + github.com/gin-gonic/gin v1.9.1 // indirect + github.com/go-chi/chi/v5 v5.0.8 // indirect + github.com/go-playground/locales v0.14.1 // indirect + github.com/go-playground/universal-translator v0.18.1 // indirect + github.com/go-playground/validator/v10 v10.14.0 // indirect + github.com/goccy/go-json v0.10.2 // indirect + github.com/jmespath/go-jmespath v0.4.0 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/klauspost/cpuid/v2 v2.2.4 // indirect + github.com/leodido/go-urn v1.2.4 // indirect + github.com/mailgun/errors v0.3.0 // indirect + github.com/mattn/go-isatty v0.0.19 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/pelletier/go-toml/v2 v2.0.8 // indirect + github.com/sirupsen/logrus v1.9.0 // indirect + github.com/tjfoc/gmsm v1.4.1 // indirect + github.com/twitchyliquid64/golang-asm v0.15.1 // indirect + github.com/ugorji/go/codec v1.2.11 // indirect + golang.org/x/arch v0.3.0 // indirect + golang.org/x/crypto v0.22.0 // indirect + golang.org/x/net v0.24.0 // indirect + golang.org/x/sys v0.19.0 // indirect + golang.org/x/text v0.14.0 // indirect + google.golang.org/protobuf v1.30.0 // indirect + gopkg.in/ini.v1 v1.67.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 4a8159a..ed95ca9 100644 --- a/go.sum +++ b/go.sum @@ -1,40 +1,326 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/PuerkitoBio/goquery v1.9.2 h1:4/wZksC3KgkQw7SQgkKotmKljk0M6V8TUvA8Wb4yPeE= github.com/PuerkitoBio/goquery v1.9.2/go.mod h1:GHPCaP0ODyyxqcNoFGYlAprUFH81NuRPd0GX3Zu2Mvk= +github.com/ahmetb/go-linq v3.0.0+incompatible h1:qQkjjOXKrKOTy83X8OpRmnKflXKQIL/mC/gMVVDMhOA= +github.com/ahmetb/go-linq v3.0.0+incompatible/go.mod h1:PFffvbdbtw+QTB0WKRP0cNht7vnCfnGlEpak/DVg5cY= +github.com/alibabacloud-go/alibabacloud-gateway-pop v0.0.6 h1:eIf+iGJxdU4U9ypaUfbtOWCsZSbTb8AUHvyPrxu6mAA= +github.com/alibabacloud-go/alibabacloud-gateway-pop v0.0.6/go.mod h1:4EUIoxs/do24zMOGGqYVWgw0s9NtiylnJglOeEB5UJo= +github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.4/go.mod h1:sCavSAvdzOjul4cEqeVtvlSaSScfNsTQ+46HwlTL1hc= +github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.5 h1:zE8vH9C7JiZLNJJQ5OwjU9mSi4T9ef9u3BURT6LCLC8= +github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.5/go.mod h1:tWnyE9AjF8J8qqLk645oUmVUnFybApTQWklQmi5tY6g= +github.com/alibabacloud-go/darabonba-array v0.1.0 h1:vR8s7b1fWAQIjEjWnuF0JiKsCvclSRTfDzZHTYqfufY= +github.com/alibabacloud-go/darabonba-array v0.1.0/go.mod h1:BLKxr0brnggqOJPqT09DFJ8g3fsDshapUD3C3aOEFaI= +github.com/alibabacloud-go/darabonba-encode-util v0.0.2 h1:1uJGrbsGEVqWcWxrS9MyC2NG0Ax+GpOM5gtupki31XE= +github.com/alibabacloud-go/darabonba-encode-util v0.0.2/go.mod h1:JiW9higWHYXm7F4PKuMgEUETNZasrDM6vqVr/Can7H8= +github.com/alibabacloud-go/darabonba-map v0.0.2 h1:qvPnGB4+dJbJIxOOfawxzF3hzMnIpjmafa0qOTp6udc= +github.com/alibabacloud-go/darabonba-map v0.0.2/go.mod h1:28AJaX8FOE/ym8OUFWga+MtEzBunJwQGceGQlvaPGPc= +github.com/alibabacloud-go/darabonba-openapi/v2 v2.0.9/go.mod h1:bb+Io8Sn2RuM3/Rpme6ll86jMyFSrD1bxeV/+v61KeU= +github.com/alibabacloud-go/darabonba-openapi/v2 v2.0.10 h1:GEYkMApgpKEVDn6z12DcH1EGYpDYRB8JxsazM4Rywak= +github.com/alibabacloud-go/darabonba-openapi/v2 v2.0.10/go.mod h1:26a14FGhZVELuz2cc2AolvW4RHmIO3/HRwsdHhaIPDE= +github.com/alibabacloud-go/darabonba-signature-util v0.0.7 h1:UzCnKvsjPFzApvODDNEYqBHMFt1w98wC7FOo0InLyxg= +github.com/alibabacloud-go/darabonba-signature-util v0.0.7/go.mod h1:oUzCYV2fcCH797xKdL6BDH8ADIHlzrtKVjeRtunBNTQ= +github.com/alibabacloud-go/darabonba-string v1.0.2 h1:E714wms5ibdzCqGeYJ9JCFywE5nDyvIXIIQbZVFkkqo= +github.com/alibabacloud-go/darabonba-string v1.0.2/go.mod h1:93cTfV3vuPhhEwGGpKKqhVW4jLe7tDpo3LUM0i0g6mA= +github.com/alibabacloud-go/debug v0.0.0-20190504072949-9472017b5c68/go.mod h1:6pb/Qy8c+lqua8cFpEy7g39NRRqOWc3rOwAy8m5Y2BY= +github.com/alibabacloud-go/debug v1.0.0/go.mod h1:8gfgZCCAC3+SCzjWtY053FrOcd4/qlH6IHTI4QyICOc= +github.com/alibabacloud-go/debug v1.0.1 h1:MsW9SmUtbb1Fnt3ieC6NNZi6aEwrXfDksD4QA6GSbPg= +github.com/alibabacloud-go/debug v1.0.1/go.mod h1:8gfgZCCAC3+SCzjWtY053FrOcd4/qlH6IHTI4QyICOc= +github.com/alibabacloud-go/dm-20151123/v2 v2.2.3 h1:nEq/9OGxV2yiB3pP100TSn1Av4k4QJvRTu1pGkyhUS4= +github.com/alibabacloud-go/dm-20151123/v2 v2.2.3/go.mod h1:82WXJL+riPgj7BxYHwaLmVIMdLaMW0X8Azh+GZGjESQ= +github.com/alibabacloud-go/endpoint-util v1.1.0 h1:r/4D3VSw888XGaeNpP994zDUaxdgTSHBbVfZlzf6b5Q= +github.com/alibabacloud-go/endpoint-util v1.1.0/go.mod h1:O5FuCALmCKs2Ff7JFJMudHs0I5EBgecXXxZRyswlEjE= +github.com/alibabacloud-go/openapi-util v0.1.0 h1:0z75cIULkDrdEhkLWgi9tnLe+KhAFE/r5Pb3312/eAY= +github.com/alibabacloud-go/openapi-util v0.1.0/go.mod h1:sQuElr4ywwFRlCCberQwKRFhRzIyG4QTP/P4y1CJ6Ws= +github.com/alibabacloud-go/tea v1.1.0/go.mod h1:IkGyUSX4Ba1V+k4pCtJUc6jDpZLFph9QMy2VUPTwukg= +github.com/alibabacloud-go/tea v1.1.7/go.mod h1:/tmnEaQMyb4Ky1/5D+SE1BAsa5zj/KeGOFfwYm3N/p4= +github.com/alibabacloud-go/tea v1.1.8/go.mod h1:/tmnEaQMyb4Ky1/5D+SE1BAsa5zj/KeGOFfwYm3N/p4= +github.com/alibabacloud-go/tea v1.1.11/go.mod h1:/tmnEaQMyb4Ky1/5D+SE1BAsa5zj/KeGOFfwYm3N/p4= +github.com/alibabacloud-go/tea v1.1.17/go.mod h1:nXxjm6CIFkBhwW4FQkNrolwbfon8Svy6cujmKFUq98A= +github.com/alibabacloud-go/tea v1.1.20/go.mod h1:nXxjm6CIFkBhwW4FQkNrolwbfon8Svy6cujmKFUq98A= +github.com/alibabacloud-go/tea v1.2.1/go.mod h1:qbzof29bM/IFhLMtJPrgTGK3eauV5J2wSyEUo4OEmnA= +github.com/alibabacloud-go/tea v1.2.2 h1:aTsR6Rl3ANWPfqeQugPglfurloyBJY85eFy7Gc1+8oU= +github.com/alibabacloud-go/tea v1.2.2/go.mod h1:CF3vOzEMAG+bR4WOql8gc2G9H3EkH3ZLAQdpmpXMgwk= +github.com/alibabacloud-go/tea-utils v1.3.1 h1:iWQeRzRheqCMuiF3+XkfybB3kTgUXkXX+JMrqfLeB2I= +github.com/alibabacloud-go/tea-utils v1.3.1/go.mod h1:EI/o33aBfj3hETm4RLiAxF/ThQdSngxrpF8rKUDJjPE= +github.com/alibabacloud-go/tea-utils/v2 v2.0.5/go.mod h1:dL6vbUT35E4F4bFTHL845eUloqaerYBYPsdWR2/jhe4= +github.com/alibabacloud-go/tea-utils/v2 v2.0.6/go.mod h1:qxn986l+q33J5VkialKMqT/TTs3E+U9MJpd001iWQ9I= +github.com/alibabacloud-go/tea-utils/v2 v2.0.7 h1:WDx5qW3Xa5ZgJ1c8NfqJkF6w+AU5wB8835UdhPr6Ax0= +github.com/alibabacloud-go/tea-utils/v2 v2.0.7/go.mod h1:qxn986l+q33J5VkialKMqT/TTs3E+U9MJpd001iWQ9I= +github.com/alibabacloud-go/tea-xml v1.1.3 h1:7LYnm+JbOq2B+T/B0fHC4Ies4/FofC4zHzYtqw7dgt0= +github.com/alibabacloud-go/tea-xml v1.1.3/go.mod h1:Rq08vgCcCAjHyRi/M7xlHKUykZCEtyBy9+DPF6GgEu8= +github.com/aliyun/credentials-go v1.1.2/go.mod h1:ozcZaMR5kLM7pwtCMEpVmQ242suV6qTJya2bDq4X1Tw= +github.com/aliyun/credentials-go v1.3.1/go.mod h1:8jKYhQuDawt8x2+fusqa1Y6mPxemTsBEN04dgcAcYz0= +github.com/aliyun/credentials-go v1.3.6/go.mod h1:1LxUuX7L5YrZUWzBrRyk0SwSdH4OmPrib8NVePL3fxM= +github.com/aliyun/credentials-go v1.3.10 h1:45Xxrae/evfzQL9V10zL3xX31eqgLWEaIdCoPipOEQA= +github.com/aliyun/credentials-go v1.3.10/go.mod h1:Jm6d+xIgwJVLVWT561vy67ZRP4lPTQxMbEYRuT2Ti1U= github.com/andybalholm/cascadia v1.3.2 h1:3Xi6Dw5lHF15JtdcmAHD3i1+T8plmv7BQ/nsViSLyss= github.com/andybalholm/cascadia v1.3.2/go.mod h1:7gtRlve5FxPPgIgX36uWBX58OdBsSS6lUvCFb+h7KvU= +github.com/aws/aws-sdk-go v1.55.5 h1:KKUZBfBoyqy5d3swXyiC7Q76ic40rYcbqH7qjh59kzU= +github.com/aws/aws-sdk-go v1.55.5/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= +github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM= +github.com/bytedance/sonic v1.9.1 h1:6iJ6NqdoxCDr6mbY8h18oSO+cShGSMRGCEo7F2h0x8s= +github.com/bytedance/sonic v1.9.1/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY= +github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams= +github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk= +github.com/clbanning/mxj/v2 v2.5.5 h1:oT81vUeEiQQ/DcHbzSytRngP6Ky9O+L+0Bw0zSJag9E= +github.com/clbanning/mxj/v2 v2.5.5/go.mod h1:hNiWqW14h+kc+MdF9C6/YoRfjEJoR3ou6tn/Qo+ve2s= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU= +github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA= +github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= +github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= +github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg= +github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU= +github.com/go-chi/chi/v5 v5.0.8 h1:lD+NLqFcAi1ovnVZpsnObHGW4xb4J8lNmoYVfECH1Y0= +github.com/go-chi/chi/v5 v5.0.8/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= +github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= +github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= +github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= +github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= +github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= +github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= +github.com/go-playground/validator/v10 v10.14.0 h1:vgvQWe3XCz3gIeFDm/HnTIbj6UGmg/+t63MyGU2n5js= +github.com/go-playground/validator/v10 v10.14.0/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU= +github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= +github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= +github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= +github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= +github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= +github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk= +github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/leodido/go-urn v1.2.4 h1:XlAE/cm/ms7TE/VMVoduSpNBoyc2dOxHs5MZSwAN63Q= +github.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4= +github.com/mailgun/errors v0.3.0 h1:g8R8lodkwqk5WIVMAClyUqt0PSd5JTVgobB+H7C2sLs= +github.com/mailgun/errors v0.3.0/go.mod h1:+ltknP+jhv3gZ1StKY6ugoQECcPxDCaSdmYesqTZcLQ= +github.com/mailgun/mailgun-go/v4 v4.18.5 h1:wZnTutW/fzxNyJVBMa6O4LLGW/hO+IGfKpuqBT4nbVs= +github.com/mailgun/mailgun-go/v4 v4.18.5/go.mod h1:+d4FCswFAukgYc1XtKK2IxOYaVxjVm8AN2z/5TBiT8M= +github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= +github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/pelletier/go-toml/v2 v2.0.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ= +github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= +github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/assertions v1.1.0/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo= +github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/tjfoc/gmsm v1.3.2/go.mod h1:HaUcFuY0auTiaHB9MHFGCPx5IaLhTUd2atbCFBQXn9w= +github.com/tjfoc/gmsm v1.4.1 h1:aMe1GlZb+0bLjn+cKTPEvvn9oUEBlJitaZiiBwsbgho= +github.com/tjfoc/gmsm v1.4.1/go.mod h1:j4INPkHWMrhJb38G+J6W4Tw0AbuN8Thu3PbdVYhVcTE= +github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= +github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= +github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU= +github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.30/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/yuninks/loggerx v1.0.12 h1:5XxhSo5bQZEjLRdJ9FPmj+uS018s1meo/9OhG9y2hUg= +github.com/yuninks/loggerx v1.0.12/go.mod h1:+QFoywQ1ICh4v40zj6OHM8GBZHEqV0yvRbkZjZUe2o4= +golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= +golang.org/x/arch v0.3.0 h1:02VY4/ZcO/gBOH6PUaoiptASxtXU10jazRCP865E97k= +golang.org/x/arch v0.3.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191219195013-becbf705a915/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201012173705-84dcc777aaee/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I= +golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= +golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= +golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= +golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= +golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30= +golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.11.0/go.mod h1:2L/ixqYpgIVXmeoSA/4Lu7BzTG4KIyPIryS4IsOd1oQ= +golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= +golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= +golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= +golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w= golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200509044756-6aff5f38e54f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o= +golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.9.0/go.mod h1:M6DEAAIenWoTxdKrOltXcmDY3rSplQUkrvaDU5FcQyo= +golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= +golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= +golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= +golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200509030707-2212a7e161a5/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= +google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/ini.v1 v1.56.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= +gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= diff --git a/html.go b/html.go index b40298a..bf62411 100644 --- a/html.go +++ b/html.go @@ -6,7 +6,7 @@ import ( "github.com/PuerkitoBio/goquery" ) -// 解析HTML资源,响应资源链接 +// html路径替换 func ParseHtmlResource(html string) ([]string, error) { resp := []string{} diff --git a/html_test.go b/html_test.go index 80c6a6f..012ed50 100644 --- a/html_test.go +++ b/html_test.go @@ -2,8 +2,7 @@ package mailx_test import ( "testing" - - "code.yun.ink/pkg/mailx" + "wallet-pay-api/pkg/mailx" ) func TestParseHtmlResource(t *testing.T) { diff --git a/interfaces/interfaces.go b/interfaces/interfaces.go new file mode 100644 index 0000000..9f5837c --- /dev/null +++ b/interfaces/interfaces.go @@ -0,0 +1,96 @@ +package interfaces + +import ( + "context" + "errors" + + "github.com/yuninks/loggerx" +) + +type Email interface { + InitEmail(ctx context.Context, params EmailConfigData,logger loggerx.LoggerInterface) (Email, error) + // Send 发送邮件 + Send(ctx context.Context, params Message) error +} + +type EmailConfigData struct { + Smtp *EmailConfigDataSmtp `json:"smtp,omitempty"` // smtp + Aws *EmailConfigDataAws `json:"aws,omitempty"` // 亚马逊 + Aliyun *EmialConfigDataAliyun `json:"aliyun,omitempty"` // 阿里云 + Mailgun *EmialConfigDataMailgun `json:"mailgun,omitempty"` // mailgun +} + +type EmialConfigDataMailgun struct { + ApiKey string `json:"api_key"` // mailgun api key + Domain string `json:"domain"` // mailgun domain + Sender string `json:"sender"` // 发件人 +} + +type EmailConfigDataSmtp struct { + Username string `json:"username"` // 邮箱账号 + Password string `json:"password"` // 授权码 + Host string `json:"host"` // SMTP 服务器【默认smtpdm.aliyun.com】 + Port string `json:"port"` // 发信端口 + ReplyTo string `json:"reply_to"` // 【选填】回复地址 + // From string `json:"from"` // 【选填】阿里云邮箱发件人 +} + +type EmailConfigDataAws struct { + AccessId string `json:"access_id"` // 亚马逊AccessId + AccessSecret string `json:"access_secret"` // 亚马逊AccessSecret + Region string `json:"region"` // 亚马逊Region + Sender string `json:"sender"` // 亚马逊发件人 +} + +type EmialConfigDataAliyun struct { + AccessId string `json:"access_id"` // 阿里云AccessId + AccessKey string `json:"access_key"` // 阿里云AccessKey + Endpoint string `json:"endpoint"` // 区域 默认dm.aliyuncs.com + AccountName string `json:"account_name"` // 账号名 + ReplyAddress string `json:"reply_address"` // 邮件回复地址 +} + +type Message struct { + Form string + To []string + Cc []string + Bcc []string + Subject string + Body string + ReplyTo string + Attachment []MessageAttachment // 附件 +} + +type MessageAttachment struct { + Content string + ContentType string +} + +type EmailSendRecord struct { + AccountName string // 发件人 + UpdateTime int64 // 毫秒时间戳 + Status EmailSendStatus // 状态 + ToUser string // 收件人 + Subject string // 邮件主题 + ErrorMessage string // 错误信息 +} + +type EmailSendStatus int + +const ( + EmailSendStatusUnknown EmailSendStatus = 0 + EmailSendStatusSuccess EmailSendStatus = 1 + EmailSendStatusInvalidAddress EmailSendStatus = 2 + EmailSendStatusSpam EmailSendStatus = 3 + EmailSendStatusFailed EmailSendStatus = 4 +) + +type DefaultEmail struct{} + +func (l *DefaultEmail) InitEmail(ctx context.Context, params EmailConfigData,logger loggerx.LoggerInterface) (Email, error) { + return &DefaultEmail{}, errors.New("not implemented") +} + +func (l *DefaultEmail) Send(ctx context.Context, params Message) error { + return errors.New("not implemented") +} diff --git a/mailgun/log/2024-09-30_error.log b/mailgun/log/2024-09-30_error.log new file mode 100644 index 0000000..eef1146 --- /dev/null +++ b/mailgun/log/2024-09-30_error.log @@ -0,0 +1,2 @@ + +[error]{"time":"2024-09-30 11:31:04.522647","file":"/mailgun.go:40","func":"Send","gid":"47","content":["Could not send email: UnexpectedResponseError URL=https://api.mailgun.net/v3/sandboxd045b2448880433785c34f72a7fd0d45.mailgun.org/messages ExpectedOneOf=[]int{200, 202, 204} Got=403 Error: {\"message\":\"Domain sandboxd045b2448880433785c34f72a7fd0d45.mailgun.org is not allowed to send: Please activate your Mailgun account. Check your inbox or log in to your control panel to resend the activation email.\"}\n, resp message: , id: "]} \ No newline at end of file diff --git a/mailgun/log/2024-09-30_info.log b/mailgun/log/2024-09-30_info.log new file mode 100644 index 0000000..dbe5e11 --- /dev/null +++ b/mailgun/log/2024-09-30_info.log @@ -0,0 +1,2 @@ + +[info]{"time":"2024-09-30 11:31:03.950305","file":"/mailgun.go:23","func":"InitEmail","gid":"47","content":["params:\u0026{ApiKey:b87ece56257aa282dd3c809f683c60e5-32a0fef1-6327df27 Domain:sandboxd045b2448880433785c34f72a7fd0d45.mailgun.org Sender:zhaoyang@dreaminglife.cn}"]} \ No newline at end of file diff --git a/mailgun/mailgun.go b/mailgun/mailgun.go new file mode 100644 index 0000000..43d334e --- /dev/null +++ b/mailgun/mailgun.go @@ -0,0 +1,46 @@ +package mailgun + +import ( + "context" + "errors" + + "code.yun.ink/pkg/mailx/interfaces" + "github.com/mailgun/mailgun-go/v4" + "github.com/yuninks/loggerx" +) + +type MailGun struct { + interfaces.DefaultEmail + params *interfaces.EmialConfigDataMailgun + mg *mailgun.MailgunImpl + logger loggerx.LoggerInterface +} + +func (l *MailGun) InitEmail(ctx context.Context, params interfaces.EmailConfigData, logger loggerx.LoggerInterface) (interfaces.Email, error) { + + if params.Mailgun == nil { + return nil, errors.New("not mailgun") + } + l.logger.Infof(ctx, "params:%+v", params.Mailgun) + mg := mailgun.NewMailgun(params.Mailgun.Domain, params.Mailgun.ApiKey) + return &MailGun{ + params: params.Mailgun, + mg: mg, + }, nil +} + +func (l *MailGun) Send(ctx context.Context, params interfaces.Message) error { + if l.params == nil { + return errors.New("not init") + } + + message := l.mg.NewMessage(l.params.Sender, params.Subject, params.Body, params.To...) + + resp, id, err := l.mg.Send(ctx, message) + if err != nil { + l.logger.Errorf(ctx, "Could not send email: %v, resp message: %s, id: %s", err, resp, id) + return err + } + + return err +} diff --git a/mailgun/mailgun_test.go b/mailgun/mailgun_test.go new file mode 100644 index 0000000..bb2581e --- /dev/null +++ b/mailgun/mailgun_test.go @@ -0,0 +1,45 @@ +package mailgun_test + +import ( + "context" + "testing" + + "code.yun.ink/pkg/mailx/interfaces" + "code.yun.ink/pkg/mailx/mailgun" + "github.com/yuninks/loggerx" +) + +var ( + apikey = "b87ece56257aa282dd3c809f683c60e5-32a0fef1-6327df27" + domain = "sandboxd045b2448880433785c34f72a7fd0d45.mailgun.org" + sender = "zhaoyang@dreaminglife.cn" +) + +func TestSendEmail(t *testing.T) { + gun := &mailgun.MailGun{} + ctx := context.Background() + + logger := loggerx.NewLogger(ctx) + + ini, err := gun.InitEmail(ctx, interfaces.EmailConfigData{ + Mailgun: &interfaces.EmialConfigDataMailgun{ + ApiKey: apikey, + Domain: domain, + Sender: sender, + }, + }, logger) + + if err != nil { + t.Fatal(err) + } + err = ini.Send(ctx, interfaces.Message{ + To: []string{"995116474@qq.com"}, + Subject: "test mail", + Body: "Hello", + }) + if err != nil { + t.Fatal(err) + } + t.Log("send success") + +} diff --git a/mailx.go b/mailx.go index 0714161..84d31ca 100644 --- a/mailx.go +++ b/mailx.go @@ -1,182 +1,41 @@ package mailx import ( - "bytes" - "encoding/base64" - "fmt" - "net/smtp" - "os" - "path" - "strings" - "time" + "context" + "errors" + + "code.yun.ink/pkg/mailx/aliyun" + "code.yun.ink/pkg/mailx/aws" + "code.yun.ink/pkg/mailx/interfaces" + "code.yun.ink/pkg/mailx/mailgun" + "code.yun.ink/pkg/mailx/smtp" ) -// 邮件发送的封装 -// 1. 支持文本 -// 2. 支持文件 +var platform map[consts.Platform3rdType]interfaces.Email + +// 注册 +func init() { + platform = make(map[consts.Platform3rdType]interfaces.Email) + + // 阿里 + platform[consts.Platform3rdTypeAliyun] = &aliyun.Aliyun{} + + // AWS + platform[consts.Platform3rdTypeAws] = &aws.Aws{} + + // Smtp + platform[consts.Platform3rdTypeSmtp] = &smtp.Smtp{} + + // mailgun + platform[consts.Platform3rdTypeMailgun] = &mailgun.MailGun{} -type Mailx struct { - user string - password string - host string - port string - auth smtp.Auth } -type Attachment struct { - Name string - ContentType string - WithFile bool -} - -type Message struct { - Form string - To []string - Cc []string - Bcc []string - Subject string - Body string - // ContentType string - ReplyTo string - Attachment []Attachment -} - -func NewMailx(user, password, host, port string) *Mailx { - m := &Mailx{ - user: user, - password: password, - host: host, - port: port, - } - m.auth = smtp.PlainAuth("", user, password, host) - return m -} - -func (m *Mailx) Send(message Message) error { - // .Auth() - buffer := bytes.NewBuffer(nil) - boundary := "YunBoundaryYun" - - Header := make(map[string]string) - // Header["From"] = "BOP<" + message.Form + ">" - Header["From"] = m.user - - if len(message.To) > 0 { - str := "" - for _, val := range message.To { - name := "" - s := strings.Split(val, "@") - if len(s) > 0 { - name = s[0] - } - str = str + "," + name + "<" + val + ">" - } - Header["To"] = strings.Trim(str, ",") - // Header["To"] = strings.Join(message.To, ",") - } - if len(message.Cc) > 0 { - str := "" - for _, val := range message.Cc { - name := "" - s := strings.Split(val, "@") - if len(s) > 0 { - name = s[0] - } - str = str + "," + name + "<" + val + ">" - } - Header["Cc"] = strings.Trim(str, ",") - // Header["Cc"] = strings.Join(message.Cc, ",") - } - if len(message.Bcc) > 0 { - str := "" - for _, val := range message.Bcc { - name := "" - s := strings.Split(val, "@") - if len(s) > 0 { - name = s[0] - } - str = str + "," + name + "<" + val + ">" - } - Header["Bcc"] = strings.Trim(str, ",") - // Header["Bcc"] = strings.Join(message.Bcc, ",") - } - - Header["Subject"] = message.Subject - Header["Content-Type"] = "multipart/mixed; charset=UTF-8; boundary=" + boundary - Header["Date"] = time.Now().String() - Header["Reply-To"] = message.ReplyTo - - Header["X-Priority"] = "3" - m.writeHeader(buffer, Header) - - body := "--" + boundary + "\r\n" - // body += "Content-Type: text/plain; charset=UTF-8 \r\n" - body += "Content-Type: text/html;charset=utf-8\r\n" - body += "Content-Transfer-Encoding:quoted-printable\r\n\r\n" - // body += "

    huang

    xin

    \r\n" - body += "" + message.Body + "\r\n" - // body += "--" + boundary + "--\r\n\r\n" - buffer.WriteString(body) - - for _, value := range message.Attachment { - newBuf := bytes.NewBuffer(nil) - err := m.writeFile(newBuf, value.Name) - if err != nil { - fmt.Println("file err:", err) - continue - } - - f_name := path.Base(value.Name) - attachment := "--" + boundary + "\r\n" - attachment += "Content-Transfer-Encoding:base64\r\n" - attachment += "Content-Disposition:attachment;filename=" + f_name + "\r\n" - attachment += "Content-Type: application/octet-stream;charset=utf-8;name=" + f_name + "\r\n" - // attachment += "Contment-Type:" + message.attachment.contentType + ";name=\"" + message.attachment.name + "\"\r\n" - buffer.WriteString(attachment) - - buffer.WriteString(newBuf.String()) - } - - if message.Form == "" { - message.Form = m.user - } - - buffer.WriteString("\r\n--" + boundary + "--\r\n") - b := buffer.Bytes() - err := smtp.SendMail(m.host+":"+m.port, m.auth, message.Form, message.To, b) - fmt.Println("发送结束:", err) - fmt.Println(string(b)) - return err -} - -// 格式化header -func (m *Mailx) writeHeader(buffer *bytes.Buffer, Header map[string]string) string { - header := "" - // header := "Content-Type: multipart/mixed;charset=UTF-8;boundary=\"YunBoundaryYun\" \r\n" - for key, value := range Header { - if value != "" { - header += key + ": " + value + "\r\n" - } - } - header += "\r\n" - buffer.WriteString(header) - return header -} - -// 格式化文件 -func (m *Mailx) writeFile(buffer *bytes.Buffer, fileName string) error { - file, err := os.ReadFile(fileName) - if err != nil { - return err - } - payload := make([]byte, base64.StdEncoding.EncodedLen(len(file))) - base64.StdEncoding.Encode(payload, file) - buffer.WriteString("\r\n") - for index, line := 0, len(payload); index < line; index++ { - buffer.WriteByte(payload[index]) - if (index+1)%76 == 0 { - buffer.WriteString("\r\n") - } - } - return nil +func GetPlatform(ctx context.Context, plat consts.Platform3rdType) (interfaces.Email, error) { + iplat, ok := platform[plat] + if ok { + return iplat, nil + } + + return nil, errors.New("not found") } diff --git a/old/asset/hhh.txt b/old/asset/hhh.txt new file mode 100644 index 0000000..1e4d056 --- /dev/null +++ b/old/asset/hhh.txt @@ -0,0 +1 @@ +hhhhhhhhhhh \ No newline at end of file diff --git a/old/asset/余额宝.png b/old/asset/余额宝.png new file mode 100644 index 0000000000000000000000000000000000000000..43c8e4aaca2d557149ae76faf402a94464827ab8 GIT binary patch literal 39128 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 literal 0 HcmV?d00001 diff --git a/old/html.go b/old/html.go new file mode 100644 index 0000000..b40298a --- /dev/null +++ b/old/html.go @@ -0,0 +1,77 @@ +package mailx + +import ( + "bytes" + + "github.com/PuerkitoBio/goquery" +) + +// 解析HTML资源,响应资源链接 +func ParseHtmlResource(html string) ([]string, error) { + resp := []string{} + + b := bytes.NewBufferString(html) + doc, err := goquery.NewDocumentFromReader(b) + if err != nil { + return nil, err + } + + // 找到所有的 css 标签,并且打印它们的 href 属性 + doc.Find("link").Each(func(i int, s *goquery.Selection) { + // 忽略dns预请求 + r, ok := s.Attr("rel") + if ok && r == "dns-prefetch" { + return + } + + href, ok := s.Attr("href") + if ok && href != "" { + resp = append(resp, href) + } + }) + + // 找到所有的 script 标签,并且打印它们的 src 属性 + doc.Find("script").Each(func(i int, s *goquery.Selection) { + src, ok := s.Attr("src") + if ok && src != "" { + resp = append(resp, src) + } + }) + + // 找到所有的 img 标签,并且打印它们的 src 属性 + doc.Find("img").Each(func(i int, s *goquery.Selection) { + src, ok := s.Attr("src") + if ok && src != "" { + resp = append(resp, src) + } + data_src, ok := s.Attr("data-src") + if ok && data_src != "" { + resp = append(resp, data_src) + } + }) + + // 找到所有的 video 标签,并且打印它们的 src 属性 + doc.Find("video").Each(func(i int, s *goquery.Selection) { + src, ok := s.Attr("src") + if ok && src != "" { + resp = append(resp, src) + } + + data_src, ok := s.Attr("data-src") + if ok && data_src != "" { + resp = append(resp, data_src) + } + }) + + // 找到所有的 audio 标签,并且打印它们的 src 属性 + doc.Find("audio").Each(func(i int, s *goquery.Selection) { + src, ok := s.Attr("src") + + if ok && src != "" { + resp = append(resp, src) + } + }) + + return resp, nil + +} diff --git a/old/html_test.go b/old/html_test.go new file mode 100644 index 0000000..80c6a6f --- /dev/null +++ b/old/html_test.go @@ -0,0 +1,60 @@ +package mailx_test + +import ( + "testing" + + "code.yun.ink/pkg/mailx" +) + +func TestParseHtmlResource(t *testing.T) { + html := ` + + + + + Document + + + +
    + +
    + +
    +
    您的收款方式审核失败
    + +
    + 尊敬的ABpay用户,您好! + 您的收款方式审核失败,失败原因人脸识别失败,请检查您的面部是否被遮挡或处于模糊状态,并再次尝试。 + 如非本人操作,请立即修改密码或联系客服。 +
    + +
    这是一条自动发送的消息,请勿回复
    + +
  • ABpay开发者团队服务
  • + +
    +
    + 本邮件由系统自动发出请勿回复,如需要了解更多服务,欢迎访问ABpay官方网 + 还可以通以下方式联系我们 +
    + + +
    + 客服电话:400-278-2890 +
    +
    2024 ABpay.com.cn . All rightes reserved
    +
    +
    + + + ` + + res, err := mailx.ParseHtmlResource(html) + if err != nil { + t.Fatal(err) + } + + t.Log(res) + +} diff --git a/old/mailx.go b/old/mailx.go new file mode 100644 index 0000000..f507cb9 --- /dev/null +++ b/old/mailx.go @@ -0,0 +1,202 @@ +package mailx + +import ( + "bytes" + "encoding/base64" + "fmt" + "net/smtp" + "os" + "path" + "strings" + "time" +) + +// 邮件发送的封装 +// 1. 支持文本 +// 2. 支持文件 + +type Mailx struct { + user string + password string + host string + port string + auth smtp.Auth +} + +type Attachment struct { + Name string + ContentType string + WithFile bool +} + +type Message struct { + Form string + To []string + Cc []string + Bcc []string + Subject string + Body string + // ContentType string + ReplyTo string + Attachment []Attachment +} + +func NewMailx(user, password, host, port string) *Mailx { + m := &Mailx{ + user: user, + password: password, + host: host, + port: port, + } + m.auth = smtp.PlainAuth("", user, password, host) + return m +} + +func (m *Mailx) Send(message Message) error { + // .Auth() + buffer := bytes.NewBuffer(nil) + boundary := "YunBoundaryYun" + + Header := make(map[string]string) + // Header["From"] = "BOP<" + message.Form + ">" + Header["From"] = m.user + + if len(message.To) > 0 { + str := "" + for _, val := range message.To { + name := "" + s := strings.Split(val, "@") + if len(s) > 0 { + name = s[0] + } + str = str + "," + name + "<" + val + ">" + } + Header["To"] = strings.Trim(str, ",") + // Header["To"] = strings.Join(message.To, ",") + } + if len(message.Cc) > 0 { + str := "" + for _, val := range message.Cc { + name := "" + s := strings.Split(val, "@") + if len(s) > 0 { + name = s[0] + } + str = str + "," + name + "<" + val + ">" + } + Header["Cc"] = strings.Trim(str, ",") + // Header["Cc"] = strings.Join(message.Cc, ",") + } + if len(message.Bcc) > 0 { + str := "" + for _, val := range message.Bcc { + name := "" + s := strings.Split(val, "@") + if len(s) > 0 { + name = s[0] + } + str = str + "," + name + "<" + val + ">" + } + Header["Bcc"] = strings.Trim(str, ",") + // Header["Bcc"] = strings.Join(message.Bcc, ",") + } + + Header["Subject"] = message.Subject + Header["Content-Type"] = "multipart/mixed; charset=UTF-8; boundary=" + boundary + Header["Date"] = time.Now().String() + Header["Reply-To"] = message.ReplyTo + + Header["X-Priority"] = "3" + m.writeHeader(buffer, Header) + + body := "--" + boundary + "\r\n" + // body += "Content-Type: text/plain; charset=UTF-8 \r\n" + body += "Content-Type: text/html;charset=utf-8\r\n" + body += "Content-Transfer-Encoding:quoted-printable\r\n\r\n" + // body += "

    huang

    xin

    \r\n" + body += "" + message.Body + "\r\n" + // body += "--" + boundary + "--\r\n\r\n" + buffer.WriteString(body) + + for _, value := range message.Attachment { + newBuf := bytes.NewBuffer(nil) + err := m.writeFile(newBuf, value.Name) + if err != nil { + fmt.Println("file err:", err) + continue + } + + f_name := path.Base(value.Name) + attachment := "--" + boundary + "\r\n" + attachment += "Content-Transfer-Encoding:base64\r\n" + attachment += "Content-Disposition:attachment;filename=" + f_name + "\r\n" + attachment += "Content-Type: application/octet-stream;charset=utf-8;name=" + f_name + "\r\n" + // attachment += "Contment-Type:" + message.attachment.contentType + ";name=\"" + message.attachment.name + "\"\r\n" + buffer.WriteString(attachment) + + buffer.WriteString(newBuf.String()) + + buffer.WriteString("\r\n") + } + + if message.Form == "" { + message.Form = m.user + } + + imgBuf := bytes.NewBuffer(nil) + err := m.writeFile(imgBuf, "./asset/余额宝.png") + if err != nil { + return fmt.Errorf("file err: %w", err) + } + f_name:= "f_name" + attachment := "--" + boundary + "\r\n" + attachment += "Content-Transfer-Encoding:base64\r\n" + attachment += "Content-ID:myimage \r\n" + attachment += "Content-Disposition:inline;filename=" + f_name + ".png \r\n" + attachment += "Content-Type:image/png \r\n" + buffer.WriteString(attachment) + + buffer.WriteString(imgBuf.String()) + + buffer.WriteString("\r\n--" + boundary + "--\r\n") + + b := buffer.Bytes() + err = smtp.SendMail(m.host+":"+m.port, m.auth, message.Form, message.To, b) + fmt.Println("发送结束:", err) + fmt.Println(string(b)) + return err +} + + + +// 格式化header +func (m *Mailx) writeHeader(buffer *bytes.Buffer, Header map[string]string) string { + header := "" + // header := "Content-Type: multipart/mixed;charset=UTF-8;boundary=\"YunBoundaryYun\" \r\n" + for key, value := range Header { + if value != "" { + header += key + ": " + value + "\r\n" + } + } + header += "\r\n" + buffer.WriteString(header) + return header +} + +// 格式化文件 +func (m *Mailx) writeFile(buffer *bytes.Buffer, fileName string) error { + file, err := os.ReadFile(fileName) + if err != nil { + return err + } + payload := make([]byte, base64.StdEncoding.EncodedLen(len(file))) + base64.StdEncoding.Encode(payload, file) + buffer.WriteString("\r\n") + for index, line := 0, len(payload); index < line; index++ { + buffer.WriteByte(payload[index]) + if (index+1)%76 == 0 { + buffer.WriteString("\r\n") + } + } + return nil +} diff --git a/mailx_test.go b/old/mailx_test.go similarity index 75% rename from mailx_test.go rename to old/mailx_test.go index a03f175..00d6d06 100644 --- a/mailx_test.go +++ b/old/mailx_test.go @@ -4,7 +4,7 @@ import ( "fmt" "testing" - "code.yun.ink/pkg/mailx" + mailx "code.yun.ink/pkg/mailx/old" ) func TestMail(t *testing.T) { @@ -12,17 +12,17 @@ func TestMail(t *testing.T) { msg := mailx.Message{ // Form: "support@email.blueoceanpay.com", - To: []string{"yun@blueoceanpay.com", "995116474@qq.com"}, - Cc: []string{"287852692@qq.com"}, - Bcc: []string{"1362716835@qq.com"}, - Subject: "test mail", - Body: "测试文件", + To: []string{"huangxinyun520@gmail.com", "995116474@qq.com"}, + // Cc: []string{"287852692@qq.com"}, + // Bcc: []string{"1362716835@qq.com"}, + Subject: "test mail", + Body: "dasdsadsasda
    dasdsadsadsa", Attachment: []mailx.Attachment{ - // { - // Name: "/code/statistic/out.xlsx", - // ContentType: "", - // WithFile: true, - // }, + { + Name: "asset/hhh.txt", + ContentType: "", + WithFile: true, + }, // { // Name: "/code/statistic/origin.xlsx", // ContentType: "", diff --git a/smtp/log/2024-09-27_info.log b/smtp/log/2024-09-27_info.log new file mode 100644 index 0000000..90505f7 --- /dev/null +++ b/smtp/log/2024-09-27_info.log @@ -0,0 +1,3 @@ + +[info]{"time":"2024-09-27 18:32:44.687712","file":"/smtp.go:29","func":"InitEmail","gid":"70","content":["params:{Smtp:0xc00013a910 Aws:\u003cnil\u003e Aliyun:\u003cnil\u003e Mailgun:\u003cnil\u003e}"]} +[info]{"time":"2024-09-27 18:54:34.654603","file":"/smtp.go:29","func":"InitEmail","gid":"43","content":["params:{Smtp:0xc0004780f0 Aws:\u003cnil\u003e Aliyun:\u003cnil\u003e Mailgun:\u003cnil\u003e}"]} \ No newline at end of file diff --git a/smtp/log/2024-09-30_info.log b/smtp/log/2024-09-30_info.log new file mode 100644 index 0000000..b53e55b --- /dev/null +++ b/smtp/log/2024-09-30_info.log @@ -0,0 +1,2 @@ + +[info]{"time":"2024-09-30 11:31:05.402488","file":"/smtp.go:33","func":"InitEmail","gid":"54","content":["params:\u0026{Username:test@email.aisz.org Password:FDuSoJKiC9tNSDIG6DFh Host:smtpdm.aliyun.com Port:80 ReplyTo:}"]} \ No newline at end of file diff --git a/smtp/smtp.go b/smtp/smtp.go new file mode 100644 index 0000000..cc8f985 --- /dev/null +++ b/smtp/smtp.go @@ -0,0 +1,177 @@ +package smtp + +import ( + "bytes" + "context" + "encoding/base64" + "errors" + "fmt" + "net/smtp" + "os" + "path" + "strings" + "time" + + "code.yun.ink/pkg/mailx/interfaces" + "github.com/yuninks/loggerx" +) + +// 邮件发送的封装 +// 1. 支持文本 +// 2. 支持文件 + +type Smtp struct { + interfaces.DefaultEmail + params *interfaces.EmailConfigDataSmtp + auth smtp.Auth + logger loggerx.LoggerInterface +} + +func (l *Smtp) InitEmail(ctx context.Context, params interfaces.EmailConfigData, logger loggerx.LoggerInterface) (interfaces.Email, error) { + + if params.Smtp == nil { + return nil, errors.New("not smtp") + } + l.logger.Infof(ctx, "params:%+v", params.Smtp) + + m := &Smtp{ + params: params.Smtp, + } + m.auth = smtp.PlainAuth("", params.Smtp.Username, params.Smtp.Password, params.Smtp.Host) + return m, nil +} + +func (l *Smtp) Send(ctx context.Context, message interfaces.Message) error { + if l.params == nil { + return errors.New("not init") + } + // .Auth() + buffer := bytes.NewBuffer(nil) + boundary := "YunBoundaryYun" + + Header := make(map[string]string) + // Header["From"] = "BOP<" + message.Form + ">" + + if message.Form != "" { + Header["From"] = message.Form + } else { + Header["From"] = l.params.Username + } + + if len(message.To) > 0 { + str := "" + for _, val := range message.To { + name := "" + s := strings.Split(val, "@") + if len(s) > 0 { + name = s[0] + } + str = str + "," + name + "<" + val + ">" + } + Header["To"] = strings.Trim(str, ",") + // Header["To"] = strings.Join(message.To, ",") + } + if len(message.Cc) > 0 { + str := "" + for _, val := range message.Cc { + name := "" + s := strings.Split(val, "@") + if len(s) > 0 { + name = s[0] + } + str = str + "," + name + "<" + val + ">" + } + Header["Cc"] = strings.Trim(str, ",") + // Header["Cc"] = strings.Join(message.Cc, ",") + } + if len(message.Bcc) > 0 { + str := "" + for _, val := range message.Bcc { + name := "" + s := strings.Split(val, "@") + if len(s) > 0 { + name = s[0] + } + str = str + "," + name + "<" + val + ">" + } + Header["Bcc"] = strings.Trim(str, ",") + // Header["Bcc"] = strings.Join(message.Bcc, ",") + } + + Header["Subject"] = message.Subject + Header["Content-Type"] = "multipart/mixed; charset=UTF-8; boundary=" + boundary + Header["Date"] = time.Now().String() + Header["Reply-To"] = message.ReplyTo + + Header["X-Priority"] = "3" + l.writeHeader(buffer, Header) + + body := "--" + boundary + "\r\n" + // body += "Content-Type: text/plain; charset=UTF-8 \r\n" + body += "Content-Type: text/html;charset=utf-8\r\n" + body += "Content-Transfer-Encoding:quoted-printable\r\n\r\n" + // body += "

    huang

    xin

    \r\n" + + // body += "" + message.Body + "\r\n" + + body += message.Body + "\r\n" + + // body += "--" + boundary + "--\r\n\r\n" + buffer.WriteString(body) + + for _, value := range message.Attachment { + newBuf := bytes.NewBuffer(nil) + err := l.writeFile(newBuf, value.Content) + if err != nil { + fmt.Println("file err:", err) + continue + } + + f_name := path.Base(value.Content) + attachment := "--" + boundary + "\r\n" + attachment += "Content-Transfer-Encoding:base64\r\n" + attachment += "Content-Disposition:attachment;filename=" + f_name + "\r\n" + attachment += "Content-Type: application/octet-stream;charset=utf-8;name=" + f_name + "\r\n" + // attachment += "Contment-Type:" + message.attachment.contentType + ";name=\"" + message.attachment.name + "\"\r\n" + buffer.WriteString(attachment) + + buffer.WriteString(newBuf.String()) + } + + buffer.WriteString("\r\n--" + boundary + "--\r\n") + b := buffer.Bytes() + err := smtp.SendMail(l.params.Host+":"+l.params.Port, l.auth, l.params.Username, message.To, b) + return err +} + +// 格式化header +func (l *Smtp) writeHeader(buffer *bytes.Buffer, Header map[string]string) string { + header := "" + // header := "Content-Type: multipart/mixed;charset=UTF-8;boundary=\"YunBoundaryYun\" \r\n" + for key, value := range Header { + if value != "" { + header += key + ": " + value + "\r\n" + } + } + header += "\r\n" + buffer.WriteString(header) + return header +} + +// 格式化文件 +func (l *Smtp) writeFile(buffer *bytes.Buffer, fileName string) error { + file, err := os.ReadFile(fileName) + if err != nil { + return err + } + payload := make([]byte, base64.StdEncoding.EncodedLen(len(file))) + base64.StdEncoding.Encode(payload, file) + buffer.WriteString("\r\n") + for index, line := 0, len(payload); index < line; index++ { + buffer.WriteByte(payload[index]) + if (index+1)%76 == 0 { + buffer.WriteString("\r\n") + } + } + return nil +} diff --git a/smtp/smtp_test.go b/smtp/smtp_test.go new file mode 100644 index 0000000..110c26d --- /dev/null +++ b/smtp/smtp_test.go @@ -0,0 +1,96 @@ +package smtp_test + +import ( + "context" + "fmt" + "io" + "net/http" + "testing" + + "code.yun.ink/pkg/mailx/interfaces" + "code.yun.ink/pkg/mailx/smtp" + "github.com/yuninks/loggerx" +) + +func TestMail(t *testing.T) { + sm := smtp.Smtp{} + ctx := context.Background() + + logger := loggerx.NewLogger(ctx) + + ini, err := sm.InitEmail(ctx, interfaces.EmailConfigData{ + Smtp: &interfaces.EmailConfigDataSmtp{ + Username: "test@email.aisz.org", + Password: "FDuSoJKiC9tNSDIG6DFh", + ReplyTo: "", + Host: "smtpdm.aliyun.com", + Port: "80", + }, + }, logger) + if err != nil { + t.Fatal(err) + } + + req, err := http.Get("https://baidu.com") + if err != nil { + t.Fatal(err) + } + defer req.Body.Close() + + by, err := io.ReadAll(req.Body) + if err != nil { + t.Fatal(err) + } + + msg := interfaces.Message{ + To: []string{"995116474@qq.com"}, + Cc: []string{"287852692@qq.com"}, + Bcc: []string{"1362716835@qq.com"}, + ReplyTo: "huangxinyun@dreaminglife.cn", + Subject: "test mail", + Body: string(by), + Attachment: []interfaces.MessageAttachment{ + // { + // Name: "/code/statistic/out.xlsx", + // ContentType: "", + // WithFile: true, + // }, + // { + // Name: "/code/statistic/origin.xlsx", + // ContentType: "", + // WithFile: true, + // }, + // { + // Name: "/code/statistic/out2.xlsx", + // ContentType: "", + // WithFile: true, + // }, + }, + } + + err = ini.Send(ctx, msg) + fmt.Println(err) +} + +// func TestQQ(t *testing.T) { + +// // 发件人邮箱 +// from := "995116474@qq.com" +// // 授权码,而非密码 +// authCode := "xxxxxxxxxxxxxxxxxxxxxx" +// // 收件人邮箱,可以是多个收件人 +// to := []string{"yun@yun.ink"} +// // 邮件服务器信息 +// smtpHost := "smtp.qq.com" +// smtpPort := "587" // 或使用465,根据你的SMTP服务器要求设置 + +// mail := mailx.NewMailx(from, authCode, smtpHost, smtpPort) + +// msg := mailx.Message{ +// To: to, +// Subject: "test mail", +// Body: "测试", +// } +// err := mail.Send(msg) +// fmt.Println(err) +// }