[java] Java로 SMS를 보내는 방법

Java 응용 프로그램에서 SMS를 보내고받을 수있는 방법은 무엇입니까?

어떻게?



답변

(면책 조항 : Twilio에서 일합니다)

Twilio는 Twilio REST API를 통해 SMS를 전송하기위한 Java SDK제공합니다 .


답변

간단한 알림 만 원하는 경우 많은 이동 통신사가 이메일을 통해 SMS를 지원합니다. 이메일을 통한 SMS 참조


답변

Java에서 본 최고의 SMS API는 JSMPP입니다. 강력하고 사용하기 쉬우 며 엔터프라이즈 수준의 응용 프로그램에 매일 사용했습니다 (매일 20K 이상의 SMS 메시지 전송).

이 API는 기존 SMPP API의 세부 정보를 줄이기 위해 작성되었습니다. 링크 요청-응답 자동 조회와 같은 저수준 프로토콜 통신의 복잡성을 숨기므로 매우 간단하고 사용하기 쉽습니다.

Ozeki와 같은 다른 API를 사용해 보았지만 대부분 상용이거나 처리량이 제한적입니다 (예 : 1 초에 3 개 이상의 SMS 메시지를 보낼 수 없음).


답변

SMSLib라는 API가 있는데 정말 훌륭합니다.
http://smslib.org/

이제 API를 사용하여이 서비스를 제공 할 수있는 많은 Saas 제공자가 있습니다.

예 : mailchimp, esendex, Twilio, …


답변

GSM 모뎀과 Java Communications API를 사용하여이 작업을 수행 할 수 있습니다.

  1. 먼저 Java Comm Api를 설정해야합니다.

    이 기사에서는 통신 API를 설정하는 방법에 대해 자세히 설명합니다.

  2. 다음 당신은 GSM 모뎀이 필요합니다 (바람직하게는 sim900 모듈)

  3. Java JDK 최신 버전 선호

  4. AT 명령 안내서

    암호

    패키지 샘플;

        import java.io.*;
        import java.util.*;
    
        import gnu.io.*;
    
        import java.io.*;
    
    
        import org.apache.log4j.chainsaw.Main;
    
        import sun.audio.*;
    
        public class GSMConnect implements SerialPortEventListener, 
         CommPortOwnershipListener {
    
         private static String comPort = "COM6"; // This COM Port must be connect with GSM Modem or your mobile phone
         private String messageString = "";
         private CommPortIdentifier portId = null;
         private Enumeration portList;
         private InputStream inputStream = null;
         private OutputStream outputStream = null;
         private SerialPort serialPort;
         String readBufferTrial = "";
         /** Creates a new instance of GSMConnect */
         public GSMConnect(String comm) {
    
           this.comPort = comm;
    
         }
    
         public boolean init() {
           portList = CommPortIdentifier.getPortIdentifiers();
           while (portList.hasMoreElements()) {
             portId = (CommPortIdentifier) portList.nextElement();
             if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
               if (portId.getName().equals(comPort)) {
                   System.out.println("Got PortName");
                 return true;
               }
             }
           }
           return false;
         }
    
         public void checkStatus() {
           send("AT+CREG?\r\n");
         }
    
    
    
         public void send(String cmd) {
           try {
             outputStream.write(cmd.getBytes());
           } catch (IOException e) {
             e.printStackTrace();
           }
         }
    
         public void sendMessage(String phoneNumber, String message) {
               char quotes ='"';
           send("AT+CMGS="+quotes + phoneNumber +quotes+ "\r\n");
           try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
            //   send("AT+CMGS=\""+ phoneNumber +"\"\r\n");
           send(message + '\032');
           System.out.println("Message Sent");
         }
    
         public void hangup() {
           send("ATH\r\n");
         }
    
         public void connect() throws NullPointerException {
           if (portId != null) {
             try {
               portId.addPortOwnershipListener(this);
    
               serialPort = (SerialPort) portId.open("MobileGateWay", 2000);
               serialPort.setSerialPortParams(115200,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);
             } catch (PortInUseException | UnsupportedCommOperationException e) {
               e.printStackTrace();
             }
    
             try {
               inputStream = serialPort.getInputStream();
               outputStream = serialPort.getOutputStream();
    
             } catch (IOException e) {
               e.printStackTrace();
             }
    
             try {
               /** These are the events we want to know about*/
               serialPort.addEventListener(this);
               serialPort.notifyOnDataAvailable(true);
               serialPort.notifyOnRingIndicator(true);
             } catch (TooManyListenersException e) {
               e.printStackTrace();
             }
    
        //Register to home network of sim card
    
             send("ATZ\r\n");
    
           } else {
             throw new NullPointerException("COM Port not found!!");
           }
         }
    
         public void serialEvent(SerialPortEvent serialPortEvent) {
           switch (serialPortEvent.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:
             case SerialPortEvent.DATA_AVAILABLE:
    
               byte[] readBuffer = new byte[2048];
               try {
                 while (inputStream.available() > 0) 
                 {
                   int numBytes = inputStream.read(readBuffer);
    
                   System.out.print(numBytes);
                   if((readBuffer.toString()).contains("RING")){
                   System.out.println("Enter Inside if RING Loop");    
    
    
    
                   }
                 }
    
                 System.out.print(new String(readBuffer));
               } catch (IOException e) {
               }
               break;
           }
         }
         public void outCommand(){
             System.out.print(readBufferTrial);
         }
         public void ownershipChange(int type) {
           switch (type) {
             case CommPortOwnershipListener.PORT_UNOWNED:
               System.out.println(portId.getName() + ": PORT_UNOWNED");
               break;
             case CommPortOwnershipListener.PORT_OWNED:
               System.out.println(portId.getName() + ": PORT_OWNED");
               break;
             case CommPortOwnershipListener.PORT_OWNERSHIP_REQUESTED:
               System.out.println(portId.getName() + ": PORT_INUSED");
               break;
           }
    
         }
         public void closePort(){
    
            serialPort.close(); 
         }
    
         public static void main(String args[]) {
           GSMConnect gsm = new GSMConnect(comPort);
           if (gsm.init()) {
             try {
                 System.out.println("Initialization Success");
               gsm.connect();
               Thread.sleep(5000);
               gsm.checkStatus();
               Thread.sleep(5000);
    
               gsm.sendMessage("+91XXXXXXXX", "Trial Success");
    
               Thread.sleep(1000);
    
               gsm.hangup();
               Thread.sleep(1000);
               gsm.closePort();
               gsm.outCommand();
               System.exit(1);
    
    
             } catch (Exception e) {
               e.printStackTrace();
             }
           } else {
             System.out.println("Can't init this card");
           }
         }
    
    
            }
    

답변

Nexmo를 사용하여 SMS보내고 SMS받을 수 있습니다.

Nexmo Java Library 로 SMS를 보내는 것은 매우 간단합니다. 후 새로운 계정을 만드는 API 키 및 비밀, 가상 번호를 임대하고, 점점 당신과 같이 SMS를 보낼 수있는 라이브러리를 사용할 수 있습니다 :

  public class SendSMS {

      public static void main(String[] args) throws Exception {
          AuthMethod auth = new TokenAuthMethod(API_KEY, API_SECRET);
          NexmoClient client = new NexmoClient(auth);

          TextMessage message = new TextMessage(FROM_NUMBER, TO_NUMBER, "Hello from Nexmo!");

          //There may be more than one response if the SMS sent is more than 160 characters.
          SmsSubmissionResult[] responses = client.getSmsClient().submitMessage(message);
            for (SmsSubmissionResult response : responses) {
            System.out.println(response);
          }
      }
  }

SMS를 받으려면 웹 후크를 사용하는 서버를 설정해야합니다. 꽤 간단합니다. Java로 SMS 수신에 대한 자습서를 확인하는 것이 좋습니다 .

공개 : 저는 Nexmo에서 일합니다


답변

TextMarks를 사용하면 공유 단축 코드에 액세스하여 API를 통해 앱에서 문자 메시지를주고받을 수 있습니다. 메시지는 임의의 전화 번호 대신 41411에서 시작합니다. 이메일 게이트웨이와 달리 전체 160 개의 문자를 사용할 수 있습니다.

앱에서 다양한 기능을 호출하기 위해 사람들에게 키워드 텍스트 41411 ~ 41411을 지시 할 수도 있습니다. JAVA API 클라이언트는 몇 가지 다른 인기있는 언어와 매우 포괄적 인 문서 및 기술 지원과 함께 있습니다.

14 일 무료 평가판은 아직 테스트하고 앱을 빌드하는 개발자를 위해 쉽게 확장 할 수 있습니다.

여기에서 확인하십시오 : TextMarks API 정보