diff --git a/smssend/smssend.py b/smssend/smssend.py index 6c0c5e5..ba8816d 100644 --- a/smssend/smssend.py +++ b/smssend/smssend.py @@ -78,18 +78,19 @@ class SMSEngine: self.access_key_secret = os.getenv('BAIDU_SMS_ACCESS_KEY_SECRET') self.host = os.getenv('BAIDU_SMS_HOST') self.signature_id = os.getenv('BAIDU_SMS_SIGNATURE_ID') - - # 检查必需的环境变量是否都已设置,若缺失则抛出异常 - required_vars = [self.access_key, self.access_key_secret, self.host, self.signature_id] - if not all(required_vars): - missing = [name for name, val in zip( - ['BAIDU_SMS_ACCESS_KEY', 'BAIDU_SMS_ACCESS_KEY_SECRET', 'BAIDU_SMS_HOST', 'BAIDU_SMS_SIGNATURE_ID'], - required_vars) if val is None] - raise EnvironmentError(f"Missing required environment variables: {', '.join(missing)}") - - self.sms_client = self.create_client() + self.sms_client = None self.sms_types = {} + # 缺环境变量不抛异常(否则 load_smssend 中断 → sms_engine 未注册 → dspy 里 NameError)。 + # 延迟到真正发送时检查,返回明确错误。 + missing = [name for name, val in zip( + ['BAIDU_SMS_ACCESS_KEY', 'BAIDU_SMS_ACCESS_KEY_SECRET', 'BAIDU_SMS_HOST', 'BAIDU_SMS_SIGNATURE_ID'], + [self.access_key, self.access_key_secret, self.host, self.signature_id]) if not val] + if missing: + error(f'百度短信未配置,缺少环境变量: {", ".join(missing)}(发送短信时会返回错误)') + return + self.sms_client = self.create_client() + def create_client(self): baiDuSmsConfig = BceClientConfiguration( credentials=BceCredentials(self.access_key, self.access_key_secret), @@ -98,6 +99,8 @@ class SMSEngine: return sms.SmsClient(baiDuSmsConfig) async def send(self, stype, template_id, phone, params) -> dict: + if self.sms_client is None: + return {'status': False, 'msg': '百度短信未配置,请设置 BAIDU_SMS_ACCESS_KEY 等环境变量'} try: f = partial(self.sms_client.send_message, signature_id=self.signature_id, template_id=template_id,