下载地址:https://www.pan38.com/dow/share.php?code=JCnzE 提取密码:1133
本文将详细介绍如何使用AutoJS开发一个功能完善的短信批量群发工具,包含完整的代码实现和关键功能模块解析。
核心功能模块
短信发送模块:实现基础短信发送功能
联系人管理模块:支持从文件或数据库加载联系人
安全控制模块:防止发送频率过高被系统限制
日志记录模块:记录发送状态和结果
完整代码实现
// 导入必要的Java类
importClass(android.content.Intent);
importClass(android.telephony.SmsManager);
importClass(java.io.File);
importClass(java.io.BufferedReader);
importClass(java.io.FileReader);
// 安全配置参数
const SAFE_CONFIG = {
SEND_INTERVAL: [5000, 10000], // 每条短信发送间隔(毫秒)
MAX_SEND_PER_HOUR: 30, // 每小时最大发送量
MAX_SEND_PER_DAY: 200, // 每天最大发送量
CONTENT_VARIATIONS: [ // 消息内容模板(随机选择)
"尊敬的{name}:您好,这是测试消息",
"{name}您好,请查收重要通知",
"亲爱的{name},祝您生活愉快"
],
LOG_FILE: "/sdcard/sms_broadcast.log" // 日志文件路径
};
// 主函数
function main() {
// 检查短信发送权限
if (!requestSmsPermission()) {
toast("未获取短信发送权限");
return;
}
// 加载联系人列表
let contacts = loadContacts("/sdcard/contacts.txt");
if (contacts.length === 0) {
toast("未找到有效联系人");
return;
}
// 初始化日志
initLog();
// 开始发送流程
startBroadcast(contacts);
}
// 请求短信发送权限
function requestSmsPermission() {
let intent = new Intent();
intent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");
intent.setData(android.net.Uri.parse("package:" + context.getPackageName()));
app.startActivity(intent);
return confirm("请在设置中授予短信发送权限后点击确定");
}
// 从文件加载联系人
function loadContacts(filePath) {
let contacts = [];
let file = new File(filePath);
if (file.exists()) {
let reader = new BufferedReader(new FileReader(file));
let line;
while ((line = reader.readLine()) != null) {
let parts = line.split(",");
if (parts.length >= 2) {
contacts.push({
name: parts[0].trim(),
phone: parts[1].trim(),
group: parts[2] ? parts[2].trim() : "default"
});
}
}
reader.close();
}
return contacts;
}
// 初始化日志文件
function initLog() {
let logFile = new File(SAFE_CONFIG.LOG_FILE);
if (!logFile.exists()) {
files.create(SAFE_CONFIG.LOG_FILE);
}
}
// 记录日志
function logMessage(message) {
let now = new Date();
let timestamp = now.toLocaleString();
files.append(SAFE_CONFIG.LOG_FILE, [${timestamp}] ${message}\n);
}
// 开始群发流程
function startBroadcast(contacts) {
let todayCount = 0;
let lastHourCount = 0;
let lastHourTime = Date.now();
for (let i = 0; i < contacts.length; i++) {
let contact = contacts[i];
// 检查每日发送限制
if (todayCount >= SAFE_CONFIG.MAX_SEND_PER_DAY) {
logMessage("达到每日发送上限,停止发送");
toast("已达到每日发送上限");
break;
}
// 检查每小时发送限制
let currentTime = Date.now();
if (currentTime - lastHourTime > 3600000) {
lastHourCount = 0;
lastHourTime = currentTime;
} else if (lastHourCount >= SAFE_CONFIG.MAX_SEND_PER_HOUR) {
let waitTime = Math.ceil((3600000 - (currentTime - lastHourTime)) / 60000);
logMessage(`达到每小时发送上限,等待${waitTime}分钟`);
toast(`达到每小时上限,等待${waitTime}分钟`);
sleep(3600000 - (currentTime - lastHourTime));
lastHourCount = 0;
lastHourTime = Date.now();
}
// 发送短信
let result = sendSMS(contact);
if (result) {
todayCount++;
lastHourCount++;
}
// 随机延迟
let delay = random(SAFE_CONFIG.SEND_INTERVAL[0], SAFE_CONFIG.SEND_INTERVAL[1]);
sleep(delay);
}
logMessage("短信群发任务完成");
toast("短信群发任务完成");
}
// 发送单条短信
function sendSMS(contact) {
try {
// 随机选择消息模板
let templateIndex = random(0, SAFE_CONFIG.CONTENT_VARIATIONS.length - 1);
let message = SAFE_CONFIG.CONTENT_VARIATIONS[templateIndex]
.replace("{name}", contact.name);
// 获取短信管理器
let smsManager = SmsManager.getDefault();
// 发送短信
smsManager.sendTextMessage(contact.phone, null, message, null, null);
// 记录日志
let logMsg = `发送成功: ${contact.name} (${contact.phone}) - ${message.substring(0, 10)}...`;
logMessage(logMsg);
toastLog(logMsg);
return true;
} catch (e) {
logMessage(`发送失败: ${contact.name} (${contact.phone}) - ${e}`);
toastLog(`发送失败: ${contact.name}`);
return false;
}
}
// 启动主程序
main();