@@ -180,18 +180,72 @@ class CmsiHandler(BaseNotifyHandler):
180180 def get_msg_type (cls ):
181181 return [s ["type" ] for s in CmsiApi .get_msg_type ()]
182182
183+ def _build_mail_params (self , ** kwargs ):
184+ """构建邮件参数"""
185+ params = {
186+ "title" : self .title ,
187+ "content" : self .content .replace ("\n " , "<br>" ), # 邮件换行用<br>
188+ "is_content_base64" : False ,
189+ }
190+ params .update (kwargs ) # 更新额外参数(sender, cc__username等)
191+ return params
192+
193+ def _build_sms_params (self , ** kwargs ):
194+ """构建短信参数"""
195+ return {
196+ "content" : f"{ self .title } \n { self .content } " , # 短信合并标题和内容
197+ "is_content_base64" : False ,
198+ }
199+
200+ def _build_voice_params (self , ** kwargs ):
201+ """构建语音参数"""
202+ return {
203+ "auto_read_message" : f"{ self .title } \n { self .content } " , # 语音播报内容
204+ }
205+
206+ def _build_weixin_params (self , ** kwargs ):
207+ """构建微信参数"""
208+ return {
209+ "message_data" : {
210+ "heading" : self .title ,
211+ "message" : self .content ,
212+ "is_message_base64" : False ,
213+ }
214+ }
215+
216+ def _build_default_params (self , ** kwargs ):
217+ """构建默认参数(保留 RTX、企微机器人等功能的参数)"""
218+ params = {
219+ "title" : self .title ,
220+ "content" : self .content ,
221+ }
222+ params .update (kwargs )
223+ return params
224+
183225 def _cmsi_send_msg (self , msg_type : str , ** kwargs ):
184226 """
227+ 统一处理所有消息类型的发送逻辑
185228 @param msg_type: 发送类型
186229 @param kwargs: 额外参数
187230 """
188231 msg_info = {
189232 "msg_type" : msg_type ,
190- "receiver__username" : "," .join (self .receivers ),
191- "title" : self .title ,
192- "content" : self .content ,
233+ "receiver__username" : self .receivers , # 接收者列表
193234 }
194- msg_info .update (kwargs )
235+
236+ # 策略映射:根据消息类型选择对应的参数构建方法
237+ param_builders_map = {
238+ MsgType .MAIL .value : self ._build_mail_params ,
239+ MsgType .SMS .value : self ._build_sms_params ,
240+ MsgType .VOICE .value : self ._build_voice_params ,
241+ MsgType .WEIXIN .value : self ._build_weixin_params ,
242+ }
243+
244+ # 获取对应的参数构建器,如果没有则使用默认构建器
245+ builder = param_builders_map .get (msg_type , self ._build_default_params )
246+ msg_info .update (builder (** kwargs ))
247+
248+ # 调用统一的send_msg接口
195249 CmsiApi .send_msg (msg_info )
196250
197251 def send_mail (self , sender : str = None , cc : list = None ):
@@ -201,12 +255,10 @@ def send_mail(self, sender: str = None, cc: list = None):
201255 """
202256 kwargs = {}
203257 if sender :
204- kwargs . update ( sender = sender )
258+ kwargs [ " sender" ] = sender
205259 if cc :
206- kwargs .update (cc__username = "," .join (cc ))
207- # 邮件的换行要用<br>的html
208- self .content = self .content .replace ("\n " , "<br>" )
209- self ._cmsi_send_msg (MsgType .MAIL , ** kwargs )
260+ kwargs ["cc__username" ] = cc
261+ self ._cmsi_send_msg (MsgType .MAIL .value , ** kwargs )
210262
211263 def send_voice (self ):
212264 """发送语音消息"""
@@ -222,8 +274,6 @@ def send_rtx(self):
222274
223275 def send_sms (self ):
224276 """发送短信消息"""
225- # 短信消息没有标题参数,直接把标题和内容放在一起
226- self .content = f"{ self .title } \n { self .content } "
227277 self ._cmsi_send_msg (MsgType .SMS .value )
228278
229279 def send_wecom_robot (self ):
0 commit comments