如何用Java实现短信自动发送功能
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用Java实现短信自动发送功能相关的知识,希望对你有一定的参考价值。
方法一:1.web.xml中配置listener
<listener>
<listener-class>
cn.com.jxlife.shs.web.action.csinquiry.surrender.MyListener
</listener-class>
</listener>
2.创建listener
import java.util.Timer;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class MyListener implements ServletContextListener
private Timer timer = null;
@Override
public void contextInitialized(ServletContextEvent sce)
timer = new Timer(true);
//设置任务计划,启动和间隔时间
timer.schedule(new MyTask(), 0, 3*60*1000);
//3分钟
//timer.schedule(new MyTask(), 0, 3*60*1000);
//在1秒后执行此任务,每次间隔2秒
//timer.schedule(new MyTask(), 1000, 2000);
@Override
public void contextDestroyed(ServletContextEvent sce)
timer.cancel();
3.创建启动的类MyTask
import java.util.Date;
import java.util.TimerTask;
public class MyTask extends TimerTask
@Override
public void run()
System.out.println("call at " + (new Date()));
方法二:
spring 下实现定时工作的调度框架quartz
· 1。从http://quartz-scheduler.org/下载quartz的开源包
quartz-1.7.3.tar.gz
3.07M
· 2。从quartz-1.7.3.tar.gz 找到quartz-1.7.3.jar,放到项目的classpath下
(放到webroot/WEB-INF/lib)下
· 3。定义一个需要时间调度的程序
package com.machome.quartz;
public class CustomJob1
public void onTimeWork()
System.out.println("数据备份任务启动");
System.out.println("...");
System.out.println("数据备份任务完成");
· 4。剩余的工作就都在spring xml文件里完成了
<!-- 被调度的bean -->
<bean id="job1" class="com.machome.quartz.CustomJob1"></bean>
<!-- 定义任务对象 -->
<bean id="jobtask1"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!-- 被调度的bean -->
<property name="targetObject">
<ref bean="job1" />
</property>
<!-- 被调度的bean中的被调度的方法 -->
<property name="targetMethod">
<value>onTimeWork</value>
</property>
</bean>
<!-- 定义触发对象 -->
<bean id="trigger1"
class="org.springframework.scheduling.quartz.CronTriggerBean">
<!-- 任务对象 -->
<property name="jobDetail">
<ref bean="jobtask1" />
</property>
<!-- cron表达式 -->
<property name="cronExpression">
<value>10,15,20,25,30,35,40,45,50,55 * * * * ?</value>
</property>
</bean>
<!-- 调度对象 -->
<!-- 如果将lazy-init='false'那么容器启动就会执行调度程序 -->
<bean id="scheduler" lazy-init="false"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<!-- 触发对象 -->
<property name="triggers">
<list>
<ref bean="trigger1" />
</list>
</property>
</bean>
· 5。 将spring 项目部署到TOMCAT或JBOSS服务器上
deploy项目
重启TOMCAT server
· 6。看结果:
cron表达式参考:Quartz的cron表达式 参考技术A
Java实现短信自动发送功能主要是用httpclient实现的,要有发短信的端口。
1、硬件设备是一个3G网卡;
2、软件方面需要sun提过的java底层通信common包;
3、此外还需要第三方库SMSLib,这个是开源项目,主要用于实现java发短信的功能;
主要代码如下:
HttpClient client = new HttpClient();
PostMethod post = new PostMethod(
"http://cf.lmobile.cn/submitdata/service.asmx/g_Submit");
post.addRequestHeader("Content-Type",
"application/x-www-form-urlencoded;charset=utf-8");// 在头文件中设置转码
NameValuePair[] data = new NameValuePair("sname", "*****"),
new NameValuePair("spwd", "*****"),
new NameValuePair("scorpid", "*****"),
new NameValuePair("sprdid", "*****"),
new NameValuePair("sdst", "*****"),
new NameValuePair("smsg", "*****") ;
post.setRequestBody(data);
client.executeMethod(post);
Header[] headers = post.getResponseHeaders();
int statusCode = post.getStatusCode();
System.out.println("statusCode:" + statusCode);
for (Header h : headers)
System.out.println(h.toString());
String result = new String(post.getResponseBodyAsString().getBytes(
"utf-8"));
System.out.println(result);
post.releaseConnection(); 参考技术B 分两种情况:
1、你要搞网站手机号注册,要用户输入自己的手机号给他们发验证码。
2、你只是需要提醒自己或者给特定的已知号码用户发短信,比如程序跑完成了通知一下自己或者跑这个程序的客户。
是哪种? 参考技术C 写个定时器追问
求详解
参考技术D 百度搜索quartz 很多定时实例,自己去写才能学到东西如何用颤振的 URL_launcher 包发送短信?
【中文标题】如何用颤振的 URL_launcher 包发送短信?【英文标题】:How to send sms with URL_launcher package with flutter? 【发布时间】:2019-01-22 05:46:34 【问题描述】:你好,我搜索一个简单的例子(Android 和 iOS)用这个包发送短信
https://pub.dartlang.org/packages/url_launcher
在插件页面我只看到如何用电话号码打开短信本机应用程序,但没有额外的消息
sms:<phone number>, e.g. sms:5550101234 Send an SMS message to <phone
number> using the default messaging app
【问题讨论】:
您无法在没有用户交互的情况下自动发送短信。在 Android 上,您可以使用正文预先填充文本字段,而在 iOS 上则不能。看我的回答。 【参考方案1】:在 Android 上,支持完整的 sms:
URI,您可以发送带有类似正文 (RFC5724) 的消息:
_textMe() async
// Android
const uri = 'sms:+39 348 060 888?body=hello%20there';
if (await canLaunch(uri))
await launch(uri);
else
// iOS
const uri = 'sms:0039-222-060-888?body=hello%20there';
if (await canLaunch(uri))
await launch(uri);
else
throw 'Could not launch $uri';
在iOS官方文档说你只能使用URI
的数字字段。
正如 Konstantine 指出的那样,如果您使用非标准的 URI
而不是使用 ?
开始查询字符串,而是使用 &
它仍然可以正常工作。这似乎是一个未记录的功能。
短信方案用于启动消息应用程序。 URL 的格式 这种类型是“短信:”,其中是一个可选参数 指定 SMS 消息的目标电话号码。这 参数可以包含数字 0 到 9 以及加号 (+)、连字符 (-) 和句点 (.) 字符。 网址字符串不得包含任何 消息文本或其他信息。
PS。要检查平台,您可以使用dart.io library Platform
class:
_textMe() async
if (Platform.isAndroid)
const uri = 'sms:+39 348 060 888?body=hello%20there';
await launch(uri);
else if (Platform.isIOS)
// iOS
const uri = 'sms:0039-222-060-888&body=hello%20there';
await launch(uri);
【讨论】:
感谢您的快速回复,您知道如何添加变量号吗?我试过这个,但它不起作用: const uri = 'sms:$Phone_Number?body=hello%20there';其中“Phone_Number”是一个字符串变量 @QuentinGuichot 奇怪......它应该可以工作。请参阅this 并尝试使用dartpad。 这不是真的。为了在 iOS 上添加一个 body 你只需要替换 ?用 & 符号符号。所以url必须是这样的:sms:898908098&body=text_to_send。在 Android 上,您使用带有问号的普通 URL @Konstantine 这很奇怪,因为在您阅读的官方文档中 * URL 字符串不得包含任何消息文本或其他信息。*。但如果它工作得很好知道。我会尝试并相应地更新我的答案。 我正在尝试这个,但它无法识别正文。就像它正在重定向到短信,但它没有显示正文【参考方案2】:你可以在安卓和IOS上试试这个:
sendMessage() async
if(Platform.isAndroid)
//FOR Android
url ='sms:+6000000000?body=message';
await launch(url);
else if(Platform.isIOS)
//FOR IOS
url ='sms:+6000000000&body=message';
【讨论】:
【参考方案3】:这个答案是为来这里寻求答案的新人准备的。 以前的答案是正确的,但它们不适用于 iOS。 该应用程序可能会在 iOS 上崩溃,但在 Android 上运行。
所以要解决我们需要按照下面给出的方式来实现发送短信
String? encodeQueryParameters(Map<String, String> params)
return params.entries
.map((e) => '$Uri.encodeComponent(e.key)=$Uri.encodeComponent(e.value)')
.join('&');
Uri smsUri = Uri(
scheme: 'sms',
path: '$phoneNumber',
query: encodeQueryParameters(<String, String>
'body':
'Hey this is message body'
),
);
try
if (await canLaunch(smsUri.toString()))
await launch(smsUri.toString());
catch (e)
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(
content: Text('Some error occured'),
),
);
【讨论】:
以上是关于如何用Java实现短信自动发送功能的主要内容,如果未能解决你的问题,请参考以下文章