下载地址:https://www.pan38.com/dow/share.php?code=JCnzE 提取密码:1133
这个Auto.js脚本实现了完整的批量短信发送功能,包含联系人管理、短信内容编辑、发送状态监控等功能。使用时需要确保已授予Auto.js短信和联系人权限。代码约200行,包含了UI界面、事件处理和核心功能实现。
// 批量短信发送工具 v1.0
// 需要Auto.js 4.1.1及以上版本
// 需要短信和联系人权限
"ui";
ui.layout(
);
// 全局变量
let contacts = [];
let isSending = false;
// 选择联系人按钮点击事件
ui.selectContacts.click(() => {
if (isSending) {
toast("正在发送短信,请稍后再试");
return;
}
let result = dialogs.select("选择联系人来源", ["从通讯录选择", "从文件导入"]);
if (result === 0) {
selectFromContacts();
} else if (result === 1) {
selectFromFile();
}
});
// 从通讯录选择联系人
function selectFromContacts() {
let contactList = contacts.getContacts();
let items = contactList.map(c => c.name + " (" + c.phones[0] + ")");
dialogs.multiChoice("选择联系人", items, []).then(choices => {
choices.forEach(i => {
let contact = contactList[i];
addContact(contact.name, contact.phones[0]);
});
});
}
// 从文件导入联系人
function selectFromFile() {
let path = dialogs.fileChooser("选择联系人文件");
if (!path) return;
try {
let content = files.read(path);
let lines = content.split("\n");
lines.forEach(line => {
let parts = line.split(",");
if (parts.length >= 2) {
addContact(parts[0].trim(), parts[1].trim());
}
});
} catch (e) {
logError("读取文件失败: " + e);
}
}
// 手动输入按钮点击事件
ui.inputManual.click(() => {
if (isSending) {
toast("正在发送短信,请稍后再试");
return;
}
dialogs.rawInput("手动输入", "姓名,手机号\n例如: 张三,13800138000").then(text => {
let parts = text.split(",");
if (parts.length >= 2) {
addContact(parts[0].trim(), parts[1].trim());
} else {
toast("输入格式不正确");
}
});
});
// 添加联系人到列表
function addContact(name, phone) {
// 验证手机号格式
if (!/^1[3-9]\d{9}$/.test(phone)) {
toast("手机号格式不正确: " + phone);
return;
}
// 检查是否已存在
let exists = contacts.some(c => c.phone === phone);
if (exists) {
toast("已存在相同手机号: " + phone);
return;
}
contacts.push({name, phone});
updateContactList();
}
// 更新联系人列表显示
function updateContactList() {
ui.contactList.setDataSource(contacts.map((c, i) => {
return {
name: c.name,
phone: c.phone,
index: i
};
}));
}
// 删除联系人
ui.contactList.on("item_click", function(e, item) {
if (e.getView().id === "remove") {
contacts.splice(item.index, 1);
updateContactList();
}
});
// 发送短信按钮点击事件
ui.sendSms.click(() => {
if (isSending) {
toast("正在发送短信,请稍候");
return;
}
if (contacts.length === 0) {
toast("请先添加联系人");
return;
}
let content = ui.smsContent.text();
if (!content) {
toast("请输入短信内容");
return;
}
isSending = true;
ui.sendSms.text("发送中...");
// 开始发送
sendAllSms(content);
});
// 发送所有短信
function sendAllSms(content) {
let successCount = 0;
let failCount = 0;
let total = contacts.length;
logMessage("开始发送短信,共" + total + "条");
// 逐个发送
for (let i = 0; i < contacts.length; i++) {
let contact = contacts[i];
let status = sendSingleSms(contact.phone, content);
if (status) {
successCount++;
logMessage("发送成功: " + contact.name + " (" + contact.phone + ")");
} else {
failCount++;
logMessage("发送失败: " + contact.name + " (" + contact.phone + ")");
}
// 更新进度
ui.sendSms.text("发送中 " + (i + 1) + "/" + total);
sleep(500); // 防止发送过快
}
// 发送完成
isSending = false;
ui.sendSms.text("发送短信");
logMessage("发送完成: 成功 " + successCount + " 条,失败 " + failCount + " 条");
}
// 发送单条短信
function sendSingleSms(phone, content) {
try {
sms.send(phone, content);
return true;
} catch (e) {
logError("发送短信到 " + phone + " 失败: " + e);
return false;
}
}
// 清空所有按钮点击事件
ui.clearAll.click(() => {
if (isSending) {
toast("正在发送短信,请稍后再试");
return;
}
dialogs.confirm("确认清空", "确定要清空所有联系人和日志吗?").then(ok => {
if (ok) {
contacts = [];
updateContactList();
ui.logText.setText("");
ui.smsContent.setText("");
}
});
});
// 记录日志
function logMessage(msg) {
let time = new Date().toLocaleString();
let log = ui.logText.getText();
ui.logText.setText(time + " - " + msg + "\n" + log);
}
// 记录错误
function logError(msg) {
logMessage("[错误] " + msg);
}
// 初始化
logMessage("批量短信发送工具已启动");