Sms in java application

How to Send an SMS With Java and SpringBoot

Twilio is a customer engagement platform providing programmable communication tools for making and receiving phone calls, sending and receiving text messages, and performing other communication functions using its web service APIs. Twilio conveniently empowers communication in any language.

With the help of the Twilio SMS API, Java, and the Spring Boot framework, you can send SMS with a text message. This article will help you set up a Spring Boot application that will expose a REST API to send the SMS. You will also be using the Twilio Java Helper Library.

In this article, you will learn how to navigate a Java IDE to set up and build a Spring Boot application and send an SMS to your mobile device. Find the code for the article on GitHub.

Tutorial Requirements

  • Java Development Kit (JDK) version 8 or newer.
  • Spring Tool Suite (STS) for convenient and fast Java project development work.
  • A free or paid Twilio account. If you are new to Twilio get your free account now! (If you sign up through this link, Twilio will give you a $10 credit when you upgrade.)
  • Apache Maven.

Create a new Spring Boot Project

Go to Spring Initializr and start creating your project. Select the project build tool as Maven and language as Java. Mention the Group as com.example.twilio, the Artifact as sms, the Package com.example.twilio.sms, and the Description as «Send SMS using Java and Spring Boot in Twilio». Select the Project as Maven Project, Spring Boot version as 2.6.2, and Language as Java as the same is shown in the picture below:

Читайте также:  Mail test

springboot initializer dashboard

Then click on the Generate button. This will download the Spring Boot project in your Download directory. Go to the Download directory and extract the zipped folder.

Now open your Spring Tool Suite. Click on File -> Import -> Existing Maven Projects. Navigate to the Download directory where you have the extracted project and click on the Finish button.

browse the maven projects for your new project

Set up the Spring Boot Application

After you have imported the project into the IDE, it’s time to configure the project. This article will demonstrate using Apache Maven as the build tool which will download and manage the dependency. There are other tools such as Gradle which will work too, if that’s what you prefer.

Navigate to the pom.xml file. In the dependency tag make sure you add the following dependencies in the project:

  org.springframework.boot spring-boot-starter  org.springframework.boot spring-boot-starter-web  org.springframework.boot spring-boot-starter-test test  com.twilio.sdk twilio 8.8.0  

Write the code

Let’s make a new package com.example.twilio.sms.controller . We will now create a new class SmsController.java in this package. We will now make a REST API that will send the SMS.

The HTTP requests are handled by a controller. These components are identified by the @RestController annotation. This indicates that it is a controller layer of the application. This code uses Spring @RestController annotation which marks the class as a controller where every method returns the domain object instead of a view. It is shorthand for including both @Controller and @ResponseBody.

The @GetMapping annotation ensures that HTTP GET requests to /sendSMS are mapped to the sendSMS() method. Make sure to import the required packages and dependencies to run the program.

package com.example.twilio.sms.controller; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import com.twilio.Twilio; import com.twilio.rest.api.v2010.account.Message; import com.twilio.type.PhoneNumber; @RestController public class SmsController < @GetMapping(value = "/sendSMS") public ResponseEntitysendSMS() < Twilio.init(System.getenv("TWILIO_ACCOUNT_SID"), System.getenv("TWILIO_AUTH_TOKEN")); Message.creator(new PhoneNumber(""), new PhoneNumber(" > 

Make sure to add the TO and FROM value in the sendSMS() method.

Message.creator(new com.twilio.type.PhoneNumber(""), new com.twilio.type.PhoneNumber(" 

The API returns a string “Message sent successfully” as the body and 200 as the HTTP status code after the message has been sent.

You'll need your ACCOUNT_SID and AUTH_TOKEN from your Twilio Console. It is best practice to store these secrets as environment variables rather than hard-coding them. You can also set them in your operating system. Once they are set in the environment, add the following code in the sendSMS() function body:

Twilio.init(System.getenv("TWILIO_ACCOUNT_SID"), System.getenv("TWILIO_AUTH_TOKEN")); 

If you have not set the environment variables this code will throw the error message: "com.twilio.exception.AuthenticationException: Username can not be null".

Send your first SMS

You will use the REST API for sending a text message. Open the class SmsApplication.java .This class was auto-generated when we had created the project using Spring Initializr.

@SpringBootApplication public class SmsApplication < public static void main(String[] args) < SpringApplication.run(SmsApplication.class, args); >> 

The annotation @SpringBootApplication adds the @Configuration , @EnableAutoConfiguration , and @ComponentScan .

The @Configuration tags the class as a source of bean definitions for the Spring application context.

The @EnableAutoConfiguration tells Spring Boot to add beans based on classpath settings, other beans, and various property settings. For example, if spring-webmvc is on the classpath, this annotation flags the application as a web application and activates key behaviors, such as setting up a DispatcherServlet.

The @ComponentScan allows Spring to look for other components, configurations, and services in the package, letting it find the controllers and other classes stereotype annotation. The main() method uses Spring Boot’s SpringApplication.run() method to launch the application. Click on the highlighted buttons to run the application as shown in the picture.

smsapplication on the java ide

Once you have started the application you can see the following logs in the Console tab.

start springboot on the terminal

You can see the application has started on port 8080.

Open a new browser window and hit the URL http://localhost:8080/sendSMS. You will see the message - “Message sent successfully” on the web browser.

localhost send sms success message

In a few seconds, you will receive a SMS on your mobile device.

message sent from twilio

Congratulations you have successfully sent an SMS using Spring Boot.

Wrap It Up

Now you know how to send an SMS with the Spring Boot framework using Twilio API.

It's time to put your imagination to work. You can send daily reminders, weather forecasts, alerts for parking spaces, or anything else you can imagine.

Whatever you're building, I'd love to hear about it - get in touch.

Bio

Akhil is an enthusiastic software professional with extensive experience in translating business requirements into innovative technological solutions. He is a full-stack developer and has experience in building end-to-end scalable applications using Java, Spring Boot/ Spring Cloud, CI/CD, Azure, AWS, Docker, Kubernetes, OpenShift, Jenkins, Apache Kafka, Apache Spark, Javascript, and others.

Источник

Как отправить СМС в Java?

В данном уроке я научу вас отправлять СМС сообщения на java, обратите внимания, что отправить СМС сообщение бесплатно нельзя.

Не так давно у меня возникла неплохая идея, но для её реализации мне нужно было найти способ отправки СМС в Java.

Я начал искать и выяснилось, что бесплатно это сделать нельзя. Хоть это и так понятно я все же решил поискать. После того как я понял что бесплатного способа не существует, решил найти платный но не очень дорогой и качественный, и вот несколько часов поиска привели меня к сервису, который на мое мнение неплохой как по ценам так и по отзывам.

Сервис который я нашел называется СМСЦЕНТР.

И сейчас я покажу как с его помощью можно отправлять СМС сообщения.

Шаг 1

Первое что мы делаем это идем сюда и регистрируемся.

После чего заполняете регистрационную форму.

Шаг 2

После регистрации вы попадете в админку, где вам нужно зайти Мой кабинет и выбрать пункт Получить 3.95 грн на счет для тестирования:

Выбираем -> Для получения тестовой суммы введите номер телефона в Настройках:

После этого сохраняем и выбираем Подтвердить номер.

Вам на телефон придет СМС сообщение, где будет код подтверждения. Вводим его в поле.

После подтверждения обновляем страницу и видим:

Теперь у нас есть денежные средства для тестирование этого сервиса.

Шаг 3

Создаем в Intellij IDEA новый проект File->New project->Maven Project.

Создаем класс Main и метод main().

Шаг 4

Теперь разберем как использовать API сервиса.

Давай теперь познакомимся с предоставляемым API http://smsc.ru/api/java/

Скачиваем smsc_api.java и кидаем в ваш проект src/main/java/smsc_api.java

Я его переименновал на SMSCSender.java

А также я немного изменил этот файл, так как видно по названием и типу написания, что писал API не Java программист и вот, что получилось:

import java.net.*; import java.io.*; import java.lang.Math; public class SMSCSender < private String SMSC_LOGIN = ""; // логин клиента private String SMSC_PASSWORD = ""; // пароль или MD5-хеш пароля в нижнем регистре private boolean SMSC_HTTPS = false; // использовать HTTPS протокол private String SMSC_CHARSET = "utf-8"; // кодировка сообщения: koi8-r, windows-1251 или utf-8 (по умолчанию) private boolean SMSC_DEBUG = false; // флаг отладки private boolean SMSC_POST = false; // Использовать метод POST public SMSCSender() < >public SMSCSender(String login, String password) < SMSC_LOGIN = login; SMSC_PASSWORD = password; >public SMSCSender(String login, String password, String charset) < SMSC_LOGIN = login; SMSC_PASSWORD = password; SMSC_CHARSET = charset; >public SMSCSender(String login, String password, String charset, boolean debug) < SMSC_LOGIN = login; SMSC_PASSWORD = password; SMSC_CHARSET = charset; SMSC_DEBUG = debug; >public String[] sendSms(String phones, String message, int translit, String time, String id, int format, String sender, String query) < String[] formats = ; String[] m = <>; try < m = SmscSendCmd("send", "cost=3&phones=" + URLEncoder.encode(phones, SMSC_CHARSET) + "&mes=" + URLEncoder.encode(message, SMSC_CHARSET) + "&translit=" + translit + "&id=" + id + (format >0 ? "&" + formats[format] : "") + (sender == "" ? "" : "&sender=" + URLEncoder.encode(sender, SMSC_CHARSET)) + (time == "" ? "" : "&time=" + URLEncoder.encode(time, SMSC_CHARSET)) + (query == "" ? "" : "&" + query)); > catch (UnsupportedEncodingException e) < >if (SMSC_DEBUG) < if (Integer.parseInt(m[1]) >0) < System.out.println("Сообщение отправлено успешно. ID: " + m[0] + ", всего SMS: " + m[1] + ", стоимость: " + m[2] + ", баланс: " + m[3]); >else < System.out.print("Ошибка №" + Math.abs(Integer.parseInt(m[1]))); System.out.println(Integer.parseInt(m[0])>0 ? (", ID: " + m[0]) : ""); > > return m; > public String[] getSmsCost(String phones, String message, int translit, int format, String sender, String query)< String[] formats = ; String[] m = <>; try < m = SmscSendCmd("send", "cost=1&phones=" + URLEncoder.encode(phones, SMSC_CHARSET) + "&mes=" + URLEncoder.encode(message, SMSC_CHARSET) + "&translit=" + translit + (format >0 ? "&" + formats[format] : "") + (sender == "" ? "" : "&sender=" + URLEncoder.encode(sender, SMSC_CHARSET)) + (query == "" ? "" : "&" + query)); > catch (UnsupportedEncodingException e) < >// (cost, cnt) или (0, -error) if (SMSC_DEBUG) < if (Integer.parseInt(m[1]) >0) < System.out.println("Стоимость рассылки: " + m[0] + ", Всего SMS: " + m[1]); >else < System.out.print("Ошибка №" + Math.abs(Integer.parseInt(m[1]))); >> return m; > public String[] getStatus(int id, String phone, int all)< String[] m = <>; String tmp; try < m = SmscSendCmd("status", "phone=" + URLEncoder.encode(phone, SMSC_CHARSET) + "&id=" + id + "&all=" + all); if (SMSC_DEBUG) < if (m[1] != "" && Integer.parseInt(m[1]) >= 0) < java.sql.Timestamp currentTimestamp = new java.sql.Timestamp(Integer.parseInt(m[1])); System.out.println("Статус SMS = " + m[0]); >else System.out.println("Ошибка №" + Math.abs(Integer.parseInt(m[1]))); > if (all == 1 && m.length > 9 && (m.length < 14 || m[14] != "HLR")) < tmp = implode(m, ","); m = tmp.split(",", 9); >> catch (UnsupportedEncodingException e) < >return m; > public String getBalance() < String[] m = <>; m = SmscSendCmd("balance", ""); // (balance) или (0, -error) if (SMSC_DEBUG) < if (m.length == 1) System.out.println("Сумма на счете: " + m[0]); else System.out.println("Ошибка №" + Math.abs(Integer.parseInt(m[1]))); >return m.length == 2 ? "" : m[0]; > private String[] SmscSendCmd(String cmd, String arg)< String[] m = <>; String ret = ","; try < String url = (SMSC_HTTPS ? "https" : "http") + "://smsc.ru/sys/" + cmd +".php?login=" + URLEncoder.encode(SMSC_LOGIN, SMSC_CHARSET) + "&psw=" + URLEncoder.encode(SMSC_PASSWORD, SMSC_CHARSET) + "&fmt=1&charset=" + SMSC_CHARSET + "&" + arg; int i = 0; do < if (i >0) Thread.sleep(2000); ret = SmscReadUrl(url); > while (ret == "" && ++i < 3); >catch (UnsupportedEncodingException e) < >catch (InterruptedException e) < >return ret.split(","); > private String SmscReadUrl(String url) < String line = "", real_url = url; String[] param = <>; boolean is_post = (SMSC_POST || url.length() > 2000); if (is_post) < param = url.split("\\?",2); real_url = param[0]; >try < URL u = new URL(real_url); InputStream is; if (is_post)< URLConnection conn = u.openConnection(); conn.setDoOutput(true); OutputStreamWriter os = new OutputStreamWriter(conn.getOutputStream(), SMSC_CHARSET); os.write(param[1]); os.flush(); os.close(); System.out.println("post"); is = conn.getInputStream(); >else < is = u.openStream(); >InputStreamReader reader = new InputStreamReader(is, SMSC_CHARSET); int ch; while ((ch = reader.read()) != -1) < line += (char)ch; >reader.close(); > catch (MalformedURLException e) < // Неверно урл, протокол. >catch (IOException e) < >return line; > private static String implode(String[] ary, String delim) < String out = ""; for (int i = 0; i < ary.length; i++) < if (i != 0) out += delim; out += ary[i]; >return out; > >

После этого можно добавить ваши данные в данное API:

String SMSC_LOGIN = "demotest"; // логин клиента String SMSC_PASSWORD = ""; // пароль или MD5-хеш пароля в нижнем регистре boolean SMSC_HTTPS = false; // использовать HTTPS протокол String SMSC_CHARSET = "utf-8"; // кодировка сообщения: koi8-r, windows-1251 или utf-8 (по умолчанию) boolean SMSC_DEBUG = false; // флаг отладки boolean SMSC_POST = true; // Использовать метод POST

Но это не обязательно, так как все это можно про инициализировать с помощью конструктора:

SMSCSender sd= new SMSCSender("demotest", "demotest", "utf-8", true);

Шаг 5

public class Main < public static void main(String[] args) < SMSCSender sd= new SMSCSender("", "", "utf-8", true); sd.sendSms("38*********5", "Ваш пароль: 123", 1, "", "", 0, "", ""); sd.getSmsCost("38*********5", "Вы успешно зарегистрированы!", 0, 0, "", ""); sd.getBalance(); > >

После выполнения данного кода мы увидим в консоли:

post Сообщение отправлено успешно. ID: 1, всего SMS: 1, стоимость: 0.16, баланс: 3.79 post Стоимость рассылки: 0.16, Всего SMS: 1 post Сумма на счете: 3.79

СМС пришло в течении 3 сек.

Источник

Оцените статью