我遇到了使用ModemManager(mmcli 1.14.2)以编程方式发送短信的问题,其中包含我尚未识别的特殊字符的特定组合。
我尝试发送的短信如下:
OK({ yRgK1DNXQKo4C7uK43WnHArW1XbNekn6JJ80qgMTRcPM8pgGTJMwYDgseRRYOEA6NdCgQNgiSoheRZnK0czZy5P0GTny3rRrSEE9HTiFepFnhDxM6B2J3bpbHnHJiYbSQt40rt0dwIoZYeiEYyo7glw1kswTrg7He5Ojl8ysyxF4X54SCQomZrKRPsrEHpT2vLjCLfGn9pDGHxodwXbbKADm8j4waiGVnZfRBJBDSx8VUO28Yit068aM32t9a91NC0eUVkyUEGkNsm75cVQ7KJ0rpzucTRSudO7DJLxrgetz })
我在这里使用随机字符串只是为了模拟大的有效负载。实际上,花括号之间的有效负载是一个更加结构化的模型。
问题是,每当我使用花括号封装有效负载时,消息都不会传递给收件人。
我使用以下发送方法面临这个问题。
使用MMCLI
使用 mmcli 发送短信:
mmcli -m 1 --messaging-create-sms="number=<NUMBER>,text='OK({yRgK1DNXQKo4C7uK43WnHArW1XbNekn6JJ80qgMTRcPM8pgGTJMwYDgseRRYOEA6NdCgQNgiSoheRZnK0czZy5P0GTny3rRrSEE9HTiFepFnhDxM6B2J3bpbHnHJiYbSQt40rt0dwIoZYeiEYyo7glw1kswTrg7He5Ojl8ysyxF4X54SCQomZrKRPsrEHpT2vLjCLfGn9pDGHxodwXbbKADm8j4waiGVnZfRBJBDSx8VUO28Yit068aM32t9a91NC0eUVkyUEGkNsm75cVQ7KJ0rpzucTRSudO7DJLxrgetz})'"
进而
mmcli -m 1 --sms <id> --send
给出以下结果:
短信发送成功
使用DBUS
我用消息传递创建新的DBUS接口短信Send()
,设置其“number”和“text”(UTF8字符串)属性,然后使用其方法发送。
我使用 C# 和TMDS.Dbus与总线交互。
问题
使用这两种方法,我都无法在收件人的手机上接收消息。如果我尝试发送相同的消息没有大括号,它可以毫无问题地交付。如果我尝试发送另一条消息和大括号(类似于“好的({测试})“它仍然可以毫无问题地交付。如果我尝试将上述任何消息从手机发送到我正在使用的设备(使用调制解调器管理器),它们就会毫无问题地收到(带或不带花括号,长或短)版本)。
似乎有一种特殊的字符组合会导致 ModemManager 出现问题,因此不会被发送。
事实上,相同的消息可以从手机发送到 ModemManager,这让我认为移动运营商方面没有任何问题。
不幸的是,由于实际有效负载包含 JSON 编码模型,因此花括号很重要。
答案1
您正在尝试发送 309 个字符的缓冲区。 SMS 有限制(最多 104 条)。