Browse Source

add common notice pkg module

whao 5 years ago
parent
commit
3222e9e520
8 changed files with 305 additions and 0 deletions
  1. 2
    0
      go.mod
  2. 89
    0
      go.sum
  3. 84
    0
      notice/email.go
  4. 18
    0
      notice/email_test.go
  5. 1
    0
      notice/notice.go
  6. 10
    0
      notice/notice_test.go
  7. 84
    0
      notice/sms.go
  8. 17
    0
      notice/sms_test.go

+ 2
- 0
go.mod View File

@@ -1 +1,3 @@
1 1
 module git.links123.net/links123.com/pkg
2
+
3
+require git.links123.net/links123.com/uc v0.0.0-20181021153218-7f58e0f28a1c // indirect

+ 89
- 0
go.sum View File

@@ -0,0 +1,89 @@
1
+git.links123.net/links123.com/pkg v0.0.0-20180730062323-41c11015b7a7/go.mod h1:qTpTu+0bPvaF2g9MGg8yn7aDIZKKk/7OzitnQmC+M68=
2
+git.links123.net/links123.com/pkg v0.0.0-20180919101150-037eea5b1493/go.mod h1:qTpTu+0bPvaF2g9MGg8yn7aDIZKKk/7OzitnQmC+M68=
3
+git.links123.net/links123.com/pkg/middleware/auth v0.0.0-20180919101150-037eea5b1493/go.mod h1:D1WZH6ULNM6Otkb/mqKgqxqPOMXHwG6E85IjiNs4uks=
4
+git.links123.net/links123.com/pkg/middleware/cors v0.0.0-20180919101150-037eea5b1493/go.mod h1:olQHLIsJHOtHuqIz+RtLojXYGyfAxZ6y5xmZOiJUUxM=
5
+git.links123.net/links123.com/pkg/request v0.0.0-20180919101150-037eea5b1493/go.mod h1:eF0R3hZ3ELW9aTBAv4TU2PDbbguByFOqxKNjldftMg4=
6
+git.links123.net/links123.com/pkg/utils v0.0.0-20180919101150-037eea5b1493/go.mod h1:XnN8VQWIlvU8HRsdrYKH0fe3dQ1dgctqGTd+RnIzXoY=
7
+git.links123.net/links123.com/uc v0.0.0-20181021153218-7f58e0f28a1c h1:oVqjjzsMhCrRjAF7RWcSkKpjpgE5TU0rni3tQ8kobxs=
8
+git.links123.net/links123.com/uc v0.0.0-20181021153218-7f58e0f28a1c/go.mod h1:KDsGY1VC3Htm+gFf2U4pqZ4HSVffrRkxZFz0C/xP4Uk=
9
+github.com/BurntSushi/toml v0.3.0/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
10
+github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
11
+github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
12
+github.com/Unknwon/i18n v0.0.0-20171114194641-b64d33658966/go.mod h1:SFtfq0zFPsENI7DpE87QM2hcYu5QQ0fRdCgP+P1Hrqo=
13
+github.com/aliyun/aliyun-oss-go-sdk v0.0.0-20180918114345-ddc87ec2145f/go.mod h1:T/Aws4fEfogEE9v+HPhhw+CntffsBHJ8nXQCwKr0/g8=
14
+github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f/go.mod h1:AuiFmCCPBSrqvVMvuqFuk0qogytodnVFVSN5CeJB8Gc=
15
+github.com/braintree/manners v0.0.0-20160418043613-82a8879fc5fd/go.mod h1:TNehV1AhBwtT7Bd+rh8G6MoGDbBLNs/sKdk3nvr4Yzg=
16
+github.com/bu/gin-access-limit v0.0.0-20180526093834-d85581b8e2c4/go.mod h1:yvTzcu7B9xwo2bXcqaWqzyzsWnofVO5jK8KHvzNAKXY=
17
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
18
+github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
19
+github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
20
+github.com/gin-contrib/cors v0.0.0-20180912121935-a3af05a9b13e/go.mod h1:cw+u9IsAkC16e42NtYYVCLsHYXE98nB3M7Dr9mLSeH4=
21
+github.com/gin-contrib/sse v0.0.0-20170109093832-22d885f9ecc7/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s=
22
+github.com/gin-gonic/gin v1.3.0/go.mod h1:7cKuhb5qV2ggCFctp2fJQ+ErvciLZrIeoOSOm6mUr7Y=
23
+github.com/go-openapi/jsonpointer v0.0.0-20180322222829-3a0015ad55fa/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0=
24
+github.com/go-openapi/jsonreference v0.0.0-20180322222742-3fb327e6747d/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg=
25
+github.com/go-openapi/spec v0.0.0-20180801175345-384415f06ee2/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc=
26
+github.com/go-openapi/swag v0.0.0-20180715190254-becd2f08beaf/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I=
27
+github.com/go-redis/redis v6.14.1+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA=
28
+github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
29
+github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
30
+github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
31
+github.com/gopherjs/gopherjs v0.0.0-20180825215210-0210a2f0f73c/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
32
+github.com/gorilla/websocket v1.2.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
33
+github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
34
+github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
35
+github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
36
+github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
37
+github.com/jinzhu/copier v0.0.0-20180308034124-7e38e58719c3/go.mod h1:yL958EeXv8Ylng6IfnvG4oflryUi3vgA3xPs9hmII1s=
38
+github.com/joho/godotenv v1.2.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg=
39
+github.com/json-iterator/go v1.1.5/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
40
+github.com/jtolds/gls v4.2.1+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
41
+github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
42
+github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
43
+github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
44
+github.com/mitchellh/mapstructure v1.0.0/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
45
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
46
+github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
47
+github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
48
+github.com/onsi/gomega v1.4.2/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
49
+github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
50
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
51
+github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
52
+github.com/sirupsen/logrus v1.0.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc=
53
+github.com/skip2/go-qrcode v0.0.0-20171229120447-cf5f9fa2f0d8/go.mod h1:PLPIyL7ikehBD1OAjmKKiOEhbvWyHGaNDjquXMcYABo=
54
+github.com/smartystreets/assertions v0.0.0-20180820201707-7c9eb446e3cf/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
55
+github.com/smartystreets/goconvey v0.0.0-20180222194500-ef6db91d284a/go.mod h1:XDJAKZRPZ1CvBcN2aX5YOUTYGHki24fSF0Iv48Ibg0s=
56
+github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
57
+github.com/spf13/cast v1.2.0/go.mod h1:r2rcYCSwa1IExKTDiTfzaxqT2FNHs8hODu4LnUfgKEg=
58
+github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
59
+github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
60
+github.com/spf13/pflag v1.0.2/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
61
+github.com/spf13/viper v1.2.0/go.mod h1:P4AexN0a+C9tGAnUFNwDMYYZv3pjFuvmeiMyKRaNVlI=
62
+github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
63
+github.com/swaggo/gin-swagger v1.0.0/go.mod h1:Mt37wE46iUaTAOv+HSnHbJYssKGqbS25X19lNF4YpBo=
64
+github.com/swaggo/swag v1.3.2/go.mod h1:hog2WgeMOrQ/LvQ+o1YGTeT+vWVrbi0SiIslBtxKTyM=
65
+github.com/ugorji/go/codec v0.0.0-20180831062425-e253f1f20942/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
66
+github.com/wpajqz/go-sdk v0.0.0-20180819022515-c5611acbd333/go.mod h1:8Z5OwaDGrREAqXYMHp9WVhDIkZdeJFfNbUyjYQGRg8U=
67
+github.com/wpajqz/linker v0.0.0-20180818151004-5d64412a1130/go.mod h1:1LpNSex7lqvQi8t5uj9LBLKsvxfm3HK2j6o5Ht3BGmQ=
68
+github.com/wpajqz/linker v0.0.0-20180920052826-c21901f38257/go.mod h1:qDGjG+ES9GK54nkt/8PE3SbGtKyZI0U0XSU7B8hvhqM=
69
+golang.org/x/crypto v0.0.0-20180910181607-0e37d006457b/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
70
+golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
71
+golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
72
+golang.org/x/net v0.0.0-20180911220305-26e67e76b6c3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
73
+golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
74
+golang.org/x/sys v0.0.0-20180906133057-8cf3aee42992/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
75
+golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
76
+golang.org/x/sys v0.0.0-20180918153733-ee1b12c67af4/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
77
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
78
+google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
79
+gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U=
80
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
81
+gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
82
+gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo=
83
+gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE=
84
+gopkg.in/go-playground/validator.v8 v8.18.2/go.mod h1:RX2a/7Ha8BgOhfk7j780h4/u/RRjR0eouCJSH80/M2Y=
85
+gopkg.in/ini.v1 v1.38.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
86
+gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA=
87
+gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
88
+gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
89
+upper.io/db.v3 v3.5.4+incompatible/go.mod h1:FgTdD24eBjJAbPKsQSiHUNgXjOR4Lub3u1UMHSIh82Y=

+ 84
- 0
notice/email.go View File

@@ -0,0 +1,84 @@
1
+package notice
2
+
3
+import (
4
+	"bytes"
5
+	"encoding/json"
6
+	"errors"
7
+	"io/ioutil"
8
+	"net/http"
9
+	"net/smtp"
10
+	"net/url"
11
+	"strings"
12
+)
13
+
14
+func SendEmailBySMTP(user, host, port, pass, subject, email, content string, html bool) error {
15
+	auth := smtp.PlainAuth("", user, pass, host)
16
+
17
+	contentType := "Content-Type:text/plain;charset=UTF-8"
18
+	if html {
19
+		contentType = "Content-Type:text/html;charset=UTF-8"
20
+	}
21
+
22
+	msg := []byte("To: " + email + "\r\nFrom: " + user + ">\r\nSubject: " + subject + "\r\n" + contentType + "\r\n\r\n" + content)
23
+
24
+	to := strings.Split(email, ";")
25
+
26
+	return smtp.SendMail(strings.Join([]string{host, port}, ":"), auth, user, to, msg)
27
+}
28
+
29
+func SendEmailBySendCloud(uri, apiUser, apiKey, from, fromName, subject, email, content string, html bool) error {
30
+	params := url.Values{
31
+		"apiUser":  strings.Split(apiUser, ";"),
32
+		"apiKey":   strings.Split(apiKey, ";"),
33
+		"from":     strings.Split(from, ";"),
34
+		"fromName": strings.Split(fromName, ";"),
35
+		"to":       strings.Split(email, ";"), //to此时为地址列表
36
+		"subject":  []string{subject},
37
+	}
38
+
39
+	if html {
40
+		params["html"] = []string{content}
41
+	} else {
42
+		params["plain"] = []string{content}
43
+	}
44
+
45
+	postBody := bytes.NewBufferString(params.Encode())
46
+	respHandle, err := http.Post(uri, "application/x-www-form-urlencoded", postBody)
47
+	if err != nil {
48
+		return err
49
+	}
50
+	defer respHandle.Body.Close()
51
+
52
+	bodyByte, err := ioutil.ReadAll(respHandle.Body)
53
+	if err != nil {
54
+		return err
55
+	}
56
+
57
+	// 返回数据格式
58
+	//{
59
+	//	"result": true,
60
+	//	"statusCode": 200,
61
+	//	"message": "请求成功",
62
+	//	"info": {
63
+	//		"emailIdList": ["1530103894330_100557_12907_2084.sc-10_9_63_161-inbound0$15135172753@163.com"]
64
+	//	}
65
+	//}
66
+	resp := &struct {
67
+		Result     bool   `json:"result"`
68
+		StatusCode int    `json:"statusCode"`
69
+		Message    string `json:"message"`
70
+		Info       struct {
71
+			EmailIdList []string `json:"emailIdList"`
72
+		} `json:"info"`
73
+	}{}
74
+
75
+	if err := json.Unmarshal(bodyByte, resp); err != nil {
76
+		return err
77
+	}
78
+
79
+	if resp.Result == true && resp.StatusCode == http.StatusOK {
80
+		return nil
81
+	} else {
82
+		return errors.New(" email send failed.")
83
+	}
84
+}

+ 18
- 0
notice/email_test.go View File

@@ -0,0 +1,18 @@
1
+package notice
2
+
3
+import (
4
+	"testing"
5
+)
6
+
7
+func TestSendEmail(t *testing.T) {
8
+	err := SendEmailBySMTP("", "", "", "", "test", "471155401@qq.com", "test email", true)
9
+	if err != nil {
10
+		t.Error(err)
11
+	}
12
+}
13
+
14
+func TestSendEmailBySendCloud(t *testing.T) {
15
+	if err := SendEmailBySendCloud("", "", "", "", "", "test", "386621916@qq.com", "test email", true); err != nil {
16
+		t.Error(err)
17
+	}
18
+}

+ 1
- 0
notice/notice.go View File

@@ -0,0 +1 @@
1
+package notice

+ 10
- 0
notice/notice_test.go View File

@@ -0,0 +1,10 @@
1
+package notice
2
+
3
+import (
4
+	"os"
5
+	"testing"
6
+)
7
+
8
+func TestMain(m *testing.M) {
9
+	os.Exit(m.Run())
10
+}

+ 84
- 0
notice/sms.go View File

@@ -0,0 +1,84 @@
1
+package notice
2
+
3
+import (
4
+	"encoding/xml"
5
+	"fmt"
6
+	"io/ioutil"
7
+	"net/http"
8
+	"net/url"
9
+	"strings"
10
+)
11
+
12
+func SendChineseSMS(host, user, pass, mobile, content string) error {
13
+	client := &http.Client{}
14
+	req, err := http.NewRequest("POST", host, strings.NewReader("account="+user+"&password="+pass+"&mobile="+mobile+"&content="+content))
15
+	if err != nil {
16
+		return err
17
+	}
18
+
19
+	req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
20
+
21
+	resp, err := client.Do(req)
22
+	if err != nil {
23
+		return err
24
+	}
25
+
26
+	defer resp.Body.Close()
27
+
28
+	body, err := ioutil.ReadAll(resp.Body)
29
+	if err != nil {
30
+		return err
31
+	}
32
+
33
+	result := struct {
34
+		Code int    `xml:"code"`
35
+		Msg  string `xml:"msg"`
36
+	}{}
37
+
38
+	err = xml.Unmarshal(body, &result)
39
+	if err != nil {
40
+		return err
41
+	}
42
+
43
+	if result.Code != 2 {
44
+		switch result.Code {
45
+		case 406, 4030:
46
+			return fmt.Errorf("phone number format is not correct")
47
+		case 4072:
48
+			return fmt.Errorf("your message must match the templat")
49
+		case 4081:
50
+			return fmt.Errorf("one verification code per minute per phone")
51
+		case 4085:
52
+			return fmt.Errorf("up to 5 verification codes a day")
53
+		default:
54
+			return fmt.Errorf("send sms faild")
55
+		}
56
+	}
57
+
58
+	return nil
59
+}
60
+
61
+func SendForeignSMS(user, pass, mobile, content string) error {
62
+	content = url.QueryEscape(content)
63
+	url := "http://222.73.117.140:8044/mt?dc=15&tf=3&rf=1&un=" + user + "&pw=" + pass + "&da=" + mobile + "&sm=" + content
64
+
65
+	resp, err := http.Get(url)
66
+	if err != nil {
67
+		return err
68
+	}
69
+
70
+	defer resp.Body.Close()
71
+
72
+	body, err := ioutil.ReadAll(resp.Body)
73
+	if err != nil {
74
+		return err
75
+	}
76
+
77
+	result := string(body)
78
+
79
+	if !strings.Contains(result, "id") {
80
+		return fmt.Errorf("phone number format is not correct")
81
+	}
82
+
83
+	return nil
84
+}

+ 17
- 0
notice/sms_test.go View File

@@ -0,0 +1,17 @@
1
+package notice
2
+
3
+import "testing"
4
+
5
+func TestSendChineseSMS(t *testing.T) {
6
+	err := SendChineseSMS("", "", "", "", "")
7
+	if err != nil {
8
+		t.Error(err)
9
+	}
10
+}
11
+
12
+func TestSendForeignSMS(t *testing.T) {
13
+	err := SendForeignSMS("", "", "", "")
14
+	if err != nil {
15
+		t.Error(err)
16
+	}
17
+}