如何使用Python实现SMS自动化,导入Excel批量发送带不同序列号的定制短信
完全可以实现,这是非常典型的Python自动化落地场景,整体实现逻辑清晰,没有太高的技术门槛。
核心实现思路
- 读取Excel中存储的「手机号-对应序列号」映射关系
- 将固定短信模板和对应序列号拼接,生成每个收件人专属的短信内容
- 调用短信服务提供商的发送接口,批量提交发送请求
- 可选步骤:将每条短信的发送结果(成功/失败/异常原因)回写到Excel,方便后续核对
前置依赖安装
需要用到三个第三方库,直接执行以下命令安装即可:
pip install pandas openpyxl requests
其中pandas用于快速读取处理Excel数据,openpyxl是处理.xlsx格式文件的依赖,requests用于调用短信服务的HTTP接口。
可直接复用的核心代码示例
注:你需要提前向短信服务提供商开通发送权限,拿到对应的接口地址、API密钥等信息,替换代码中对应占位符即可使用。
import pandas as pd import requests import time # -------------------------- 替换成你自己的配置 -------------------------- SMS_API_URL = "你的短信服务商提供的接口地址" SMS_API_KEY = "你的短信服务接口密钥" # 短信模板,{} 是序列号的占位位置,按需修改模板内容 SMS_TEMPLATE = "您好,您的专属查询序列号为:{},如需咨询可联系客服。" EXCEL_FILE_PATH = "待发送的手机号序列号列表.xlsx" # 你的Excel文件路径 # ---------------------------------------------------------------------- # 读取Excel数据,默认Excel中两列的列名是 phone(手机号)、serial_number(序列号),可根据你的实际表头调整 df = pd.read_excel(EXCEL_FILE_PATH, engine="openpyxl") # 过滤掉手机号或序列号为空的无效行 df = df.dropna(subset=["phone", "serial_number"]) send_result_list = [] for _, row in df.iterrows(): # 取当前行的手机号和序列号 phone = str(row["phone"]).strip() serial_num = str(row["serial_number"]).strip() # 拼接生成当前收件人的专属短信内容 sms_content = SMS_TEMPLATE.format(serial_num) # 调用短信发送接口,请求参数需要根据你使用的服务商的接口文档调整 request_payload = { "api_key": SMS_API_KEY, "mobile": phone, "content": sms_content } try: response = requests.post(SMS_API_URL, data=request_payload, timeout=10) # 成功判断逻辑需要根据服务商的返回规则调整,以下为示例 if response.status_code == 200 and response.json().get("code") == 0: send_result = "发送成功" print(f"手机号{phone}发送成功") else: send_result = f"发送失败:{response.text}" print(f"手机号{phone}发送失败:{response.text}") except Exception as e: send_result = f"发送异常:{str(e)}" print(f"手机号{phone}发送异常:{str(e)}") send_result_list.append(send_result) # 控制发送频率,避免触发服务商的限流规则,间隔时间可按需调整 time.sleep(0.5) # 将发送结果回写到Excel,生成结果文件 df["发送结果"] = send_result_list df.to_excel("短信发送结果汇总.xlsx", index=False, engine="openpyxl")
注意事项
- 正式批量发送前,先填入自己的手机号做测试,确认短信内容展示、接收都正常再全量发送
- 不要将API密钥等敏感信息硬编码在代码中,建议存入环境变量或者单独的非公开配置文件
- 提前确认短信服务商的接口限流规则,调整代码中的发送间隔,避免因请求频率过高被拦截
- 可以增加简单的手机号格式校验逻辑,过滤掉不符合规则的无效号码,避免浪费短信配额
内容的提问来源于stack exchange,提问作者Kiran
相关产品推荐
相关产品推荐

