go-sms一款满足你的多种发送需求的短信发送组件

Go-sms是一个Golang库,支持多家短信服务商,如阿里云、互亿无线等,提供统一的API接口。它允许简单配置以添加或移除服务商,内置轮询策略并支持自定义,返回值格式统一,便于日志和监控。用户还可以自定义网关实现和发送策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

特点


  1. 支持目前市面多家服务商

  1. 一套写法兼容所有平台

  1. 简单配置即可灵活增减服务商

  1. 内置多种服务商轮询策略、支持自定义轮询策略

  1. 统一的返回值格式,便于日志与监控

  1. 更多等你去发现与改进...

平台支持


目前支持

环境需求


  • Golang >= 1.18

安装


$ go get github.com/pkg6/go-sms

使用


package main

import (
	gosms "github.com/pkg6/go-sms"
	"github.com/pkg6/go-sms/gateways"
	"github.com/pkg6/go-sms/gateways/ihuyi"
)

func main() {
	sms := gosms.NewParser(gateways.Gateways{IHuYi: ihuyi.IHuYi{Account: "APIID", Password: "APIKEY"}})
	// 常规
	sms.Send(18888888888, gosms.MapStringAny{
		"content":  "您的验证码是:****。请不要把验证码泄露给其他人。",
		"template": "SMS_001",
		"data": gosms.MapStrings{
			"code": "6379",
		},
	}, nil)
}

短信内容


由于使用多网关发送,所以一条短信要支持多平台发送,每家的发送方式不一样,但是我们抽象定义了以下公用属性:

  • content 文字内容,使用在像云片类似的以文字内容发送的平台

  • sign_name 签名

  • template 模板 ID,使用在以模板ID来发送短信的平台

  • data 模板变量,使用在以模板ID来发送短信的平台

所以,在使用过程中你可以根据所要使用的平台定义发送的内容。

sms.Send(18888888888, gosms.MapStringAny{
    "content":  "您的验证码是:****。请不要把验证码泄露给其他人。",
    "template": "SMS_001",
    "data": gosms.MapStrings{
        "code": "6379",
    },
}, nil)

你也可以使用闭包来返回对应的值:

sms.Send(18888888888, gosms.MapStringAny{
    "content": func(gateway gosms.IGateway) string {
        return "您的验证码是:****。请不要把验证码泄露给其他人。"
    },
    "template": func(gateway gosms.IGateway) string {
        if gateway.GetName() == "aliyun" {
            return "TP2818"
        }
        return "SMS_001"
    },
    "data": func(gateway gosms.IGateway) gosms.MapStrings {
        return map[string]string{
            "code": "1234",
        }
    },
}, nil)

发送网关


默认使用初始化中的网关发送,如果某一条短信你想要覆盖默认的设置。在 send 方法中使用第三个参数即可:

g := gosms.NewGateways([]gosms.IGateway{ihuyi.GateWay("APIID", "APIKEY")})
g.Send(18888888888, gosms.MapStringAny{
    "content": "您的验证码是:****。请不要把验证码泄露给其他人。",
}, []string{"ihuyi"})

自定义网关


本拓展已经支持用户自定义网关,你可以很方便的配置即可当成与其它拓展一样的使用:

g.Extend("ihuyi2", ihuyi.GateWay("APIID", "APIKEY"))
g := gosms.NewGateways([]gosms.IGateway{ihuyi.GateWay("APIID", "APIKEY")})
g.Send(18888888888, gosms.MapStringAny{
  "content": "您的验证码是:****。请不要把验证码泄露给其他人。",
}, []string{"ihuyi2"})
自定义网关实现接口
// IGateway 网关
type IGateway interface {
	// Clone 用于初始化默认值
	Clone() IGateway
	// GetName 网关名称
	GetName() string
	// Send 发送操作
	Send(to IPhoneNumber, message IMessage) (SMSResult, error)
}

通过Sender函数去发送


package main

import (
	"fmt"
	gosms "github.com/pkg6/go-sms"
	"github.com/pkg6/go-sms/gateways/ihuyi"
)

func main() {
	var number = gosms.NoCodePhoneNumber(18888888888)
	//对接相关资源 APIID 为account APIKEY 为password
	var gateway = ihuyi.GateWay("APIID", "APIKEY")
	var message = ihuyi.MessageContent("您的验证码是:****。请不要把验证码泄露给其他人。")
	result, err := gosms.Sender(number, message, gateway)
	if resp, ok := result.ClientResult.Response.(ihuyi.Response); ok {
		fmt.Println(resp)
	}
	fmt.Println(err)
}

加入我们


如果你认可我们的开源项目,有兴趣为 go-sms的发展做贡献,竭诚欢迎加入我们一起开发完善。无论是报告错误或是 Pull Request 开发,那怕是修改一个错别字也是对我们莫大的帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值