如何使用Java发送短信? 所有例子都已过时

我正在创建一个能够将短信从PC发送到手机的程序。 它是使用在线网关发送短信还是使用加密狗并不重要(但是,你知道,只有当我们使用加密狗时,发送者的原始号码才会存在,不是吗?)。 我发现的互联网上的大多数例子都是在2006-2010编写的,它们都使用JavaMail和Java Communication API,而且目前几乎没有通信api,可能是oracle放弃了。

我正在寻找一些技术,这是最新的,并且正在运行。 这是我的第一次尝试。 我很高兴看到教程。 谢谢

在做了一些Try&Error之后,我在一年前创建了以下代码,它运行正常。 它使用GSM Modem发送短信。 您的GSM调制解调器应连接到您的通信端口。 您将需要Comm.jar库来运行此代码,您可以从http://llk.media.mit.edu/projects/picdev/software/javaxcomm.zip下载它。

我的代码是触发AT命令的简单程序版本。 它只是在GSM调制解调器上触发AT命令发送短信。

import javax.comm.*; import java.io.*; import java.util.*; public class SimpleWrite implements Runnable, SerialPortEventListener { public void run() {} static Enumeration portList; static CommPortIdentifier portId; static String messageString = ""; static char ch = '"'; static String dest = ch + "111111111" + ch; // 10 Digit Mobile Number. static InputStream inputStream; static SerialPort serialPort; static OutputStream outputStream; public void serialEvent(SerialPortEvent event) { switch (event.getEventType()) { case SerialPortEvent.BI: case SerialPortEvent.OE: case SerialPortEvent.FE: case SerialPortEvent.PE: case SerialPortEvent.CD: case SerialPortEvent.CTS: case SerialPortEvent.DSR: case SerialPortEvent.RI: case SerialPortEvent.OUTPUT_BUFFER_EMPTY: break; case SerialPortEvent.DATA_AVAILABLE: { BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); String line = ""; try { while ( (line = reader.readLine()) != null) { System.out.println(line); } } catch (IOException e) { System.err.println("Error while reading Port " + e); } break; } } //switch } public SimpleWrite(SerialPort serial) { try { inputStream = serial.getInputStream(); try { serial.addEventListener(this); } catch (TooManyListenersException e) { System.out.println("Exception in Adding Listener" + e); } serial.notifyOnDataAvailable(true); } catch (Exception ex) { System.out.println("Exception in getting InputStream" + ex); } } public static void main(String[] args) { String line1 = "AT+CMGF=1\r\n"; String line2 = "AT+CMGS=" + dest + "\r\n"; String line3 = messageString + "\r\n"; //String line1 = "AT+CREG=2"; //String line2 = "AT+CGREG?"; portList = CommPortIdentifier.getPortIdentifiers(); while (portList.hasMoreElements()) { portId = (CommPortIdentifier) portList.nextElement(); if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) { if ( portId.getName().equals("COM11")) { System.out.println("SMS Sending....Port Found"); try { serialPort = (SerialPort) portId.open("SimpleWriteApp", 2000); SimpleWrite wr = new SimpleWrite(serialPort); } catch (PortInUseException e) { System.out.println("Port In Use " + e); } try { outputStream = serialPort.getOutputStream(); } catch (IOException e) { System.out.println("Error writing to output stream " + e); } try { serialPort.setSerialPortParams(9600,SerialPort.DATABITS_8,SerialPort.STOPBITS_1, SerialPort.PARITY_NONE); } catch (UnsupportedCommOperationException e) { } try { outputStream.write(line1.getBytes()); outputStream.write(line1.getBytes()); outputStream.write(line2.getBytes()); outputStream.write(line3.getBytes()); outputStream.write(26); outputStream.flush(); } catch (Exception e) { System.out.println("Error writing message " + e); } } } } } /** show text in the text window * @param Text text string to show on the display */ public static void showText(String Text) { System.out.println(Text); } }