91 lines
3.0 KiB
Python
91 lines
3.0 KiB
Python
#!/usr/bin/env python3
|
||
# -*- coding: utf-8 -*-
|
||
"""
|
||
独立的短信发送脚本(绕过 eventlet DNS 问题)
|
||
|
||
使用方式:
|
||
python sms_sender.py <phone> <code> <template_id> <secret_id> <secret_key> <app_id> <sign_name>
|
||
|
||
返回值:
|
||
成功返回 0,失败返回 1
|
||
"""
|
||
|
||
import sys
|
||
import json
|
||
|
||
|
||
def send_sms(phone, code, template_id, secret_id, secret_key, app_id, sign_name):
|
||
"""发送短信验证码"""
|
||
try:
|
||
from tencentcloud.common import credential
|
||
from tencentcloud.common.profile.client_profile import ClientProfile
|
||
from tencentcloud.common.profile.http_profile import HttpProfile
|
||
from tencentcloud.sms.v20210111 import sms_client, models
|
||
from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException
|
||
|
||
cred = credential.Credential(secret_id, secret_key)
|
||
httpProfile = HttpProfile()
|
||
httpProfile.endpoint = "sms.tencentcloudapi.com"
|
||
|
||
clientProfile = ClientProfile()
|
||
clientProfile.httpProfile = httpProfile
|
||
client = sms_client.SmsClient(cred, "ap-beijing", clientProfile)
|
||
|
||
req = models.SendSmsRequest()
|
||
# 登录模板(2386540)需要2个参数:验证码 + 有效期
|
||
# 注册模板(2386557)需要1个参数:验证码
|
||
if template_id == "2386540": # 登录模板
|
||
template_params = [code, "5"]
|
||
else: # 注册模板或其他
|
||
template_params = [code]
|
||
|
||
params = {
|
||
"PhoneNumberSet": [phone],
|
||
"SmsSdkAppId": app_id,
|
||
"TemplateId": template_id,
|
||
"SignName": sign_name,
|
||
"TemplateParamSet": template_params
|
||
}
|
||
req.from_json_string(json.dumps(params))
|
||
|
||
resp = client.SendSms(req)
|
||
resp_json = json.loads(resp.to_json_string())
|
||
|
||
# 检查发送状态
|
||
send_status = resp_json.get('SendStatusSet', [])
|
||
if send_status:
|
||
status = send_status[0]
|
||
if status.get('Code') == 'Ok':
|
||
print(f"SMS sent successfully to {phone}")
|
||
return True
|
||
else:
|
||
print(f"SMS failed: Code={status.get('Code')}, Message={status.get('Message')}")
|
||
return False
|
||
else:
|
||
print(f"SMS response unexpected: {resp.to_json_string()}")
|
||
return False
|
||
|
||
except TencentCloudSDKException as err:
|
||
print(f"SMS SDK Error: {err}")
|
||
return False
|
||
except Exception as e:
|
||
print(f"SMS Unexpected error: {type(e).__name__}: {e}")
|
||
return False
|
||
|
||
|
||
if __name__ == "__main__":
|
||
if len(sys.argv) != 8:
|
||
print("Usage: python sms_sender.py <phone> <code> <template_id> <secret_id> <secret_key> <app_id> <sign_name>")
|
||
sys.exit(1)
|
||
|
||
phone = sys.argv[1]
|
||
code = sys.argv[2]
|
||
template_id = sys.argv[3]
|
||
secret_id = sys.argv[4]
|
||
secret_key = sys.argv[5]
|
||
app_id = sys.argv[6]
|
||
sign_name = sys.argv[7]
|
||
|
||
success = send_sms(phone, code, template_id, secret_id, secret_key, app_id, sign_name)
|
||
sys.exit(0 if success else 1)
|