如何在Java中发送短信

153

有哪些可能的方法可以从Java应用程序发送和接收短信?

如何实现?

16个回答

1
这取决于您的工作方式和提供商。如果您与短信网关公司合作,您可能会通过SMPP协议(3.4仍然是最常见的)进行工作,然后可以查看OpenSMPP和jSMPP。这些是强大的库,可用于处理SMPP。如果您要使用自己的硬件(例如gsm-modem),发送消息的最简单方法是通过AT命令,它们取决于型号而有所不同,因此,您应该找出您的调制解调器支持哪些AT命令。接下来,如果您的调制解调器具有IP并且打开连接,则可以通过java socket发送命令。
Socket smppSocket = new Socket("YOUR_MODEM_IP", YOUR_MODEM_PORT);
DataOutputStream os = new DataOutputStream(smppSocket.getOutputStream());
DataInputStream is = new DataInputStream(smppSocket.getInputStream());

os.write(some_byte_array[]);
is.readLine();

否则,您将通过COM端口工作,但方法是相同的(发送AT命令),您可以在这里找到更多有关如何使用串行端口的信息。

1
你可以使用LOGICA SMPP Java API在Java应用程序中发送和接收短信。 LOGICA SMPP是电信应用程序中经过良好验证的API。Logica API还为您提供了TCP/IP连接上的信令能力。 您可以直接与全球各地的各种电信运营商集成。

1
你可以使用 Twilio。但如果你正在寻找一些巧妙的解决方法,可以按照我下面提到的解决方法操作。
这对于接收短信来说是不可能的。但这是一个棘手的方法,可以用来向多个客户发送短信。您可以使用Twitter API。我们可以通过短信从手机关注Twitter账户。我们只需将短信发送给Twitter。想象一下,我们创建了一个用户名为@username的Twitter账户。然后我们可以像下面展示的那样向40404发送短信。 follow @username 然后我们开始获取在该帐户中发布的推文。
因此,在我们创建Twitter帐户之后,我们可以使用Twitter API从该帐户发布推文。然后所有已关注该帐户(如我之前所述)的客户都开始接收推文。
您可以从以下链接中了解如何使用Twitter API发布推文。 Twitter API 在开始开发之前,您必须获得使用Twitter API的许可。您可以从以下链接访问Twitter API。

Twitter开发者控制台

这并不是解决您问题的最佳方案,但希望能对您有所帮助。


0
我们在Wavecell也喜欢Java,但是这个问题可以不涉及具体的编程语言细节来回答,因为我们有一个REST API可以满足大部分需求。
curl -X "POST" https://api.wavecell.com/sms/v1/amazing_hq/single \
    -u amazing:1234512345 \
    -H "Content-Type: application/json" \
    -d $'{ "source": "AmazingDev", "destination": "+6512345678", "text": "Hello, World!" }'

如果您在Java中发送HTTP请求时遇到问题,请查看以下问题:

对于特定情况,您还可以考虑使用SMPP API,已经提到的JSMPP库将有所帮助。


0

有一个 Ogham 库。编写发送短信的代码很容易(它自动处理字符编码和消息分割)。真正的短信是通过 SMPP 协议(标准短信协议)或通过提供商发送的。 您甚至可以使用 SMPP 服务器在本地测试您的代码,以便在付费发送真正的短信之前检查您的短信结果。

package fr.sii.ogham.sample.standard.sms;

import java.util.Properties;

import fr.sii.ogham.core.builder.MessagingBuilder;
import fr.sii.ogham.core.exception.MessagingException;
import fr.sii.ogham.core.service.MessagingService;
import fr.sii.ogham.sms.message.Sms;

public class BasicSample {
    public static void main(String[] args) throws MessagingException {
        // [PREPARATION] Just do it once at startup of your application
        
        // configure properties (could be stored in a properties file or defined
        // in System properties)
        Properties properties = new Properties();
        properties.setProperty("ogham.sms.smpp.host", "<your server host>");                                 // <1>
        properties.setProperty("ogham.sms.smpp.port", "<your server port>");                                 // <2>
        properties.setProperty("ogham.sms.smpp.system-id", "<your server system ID>");                       // <3>
        properties.setProperty("ogham.sms.smpp.password", "<your server password>");                         // <4>
        properties.setProperty("ogham.sms.from.default-value", "<phone number to display for the sender>");  // <5>
        // Instantiate the messaging service using default behavior and
        // provided properties
        MessagingService service = MessagingBuilder.standard()                                               // <6>
                .environment()
                    .properties(properties)                                                                  // <7>
                    .and()
                .build();                                                                                    // <8>
        // [/PREPARATION]
        
        // [SEND A SMS]
        // send the sms using fluent API
        service.send(new Sms()                                                                               // <9>
                        .message().string("sms content")
                        .to("+33752962193"));
        // [/SEND A SMS]
    }
}

还有许多其他功能示例/Spring示例


-2

您可以使用AT&T命令通过GSM调制解调器发送短信。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接