#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 独立的短信发送脚本(绕过 eventlet DNS 问题) 使用方式: python sms_sender.py 返回值: 成功返回 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 ") 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)