本文目录导读:

要用脚本自动提醒域名续费,通常的做法是:通过 API 查询域名的到期时间,然后与当前时间比较,如果距离到期日小于设定的阈值(30 天),就通过邮件、钉钉/企业微信机器人或短信发送提醒。
以下是两种主流的实现方案,你可以根据是否使用云厂商来选择:
使用云厂商 API(推荐,最稳定)
如果你在阿里云、腾讯云、AWS 等平台购买的域名,它们都提供了查询域名到期时间的 API。
示例(Python + 阿里云/腾讯云)
准备工作:
- 安装 SDK:
pip install alibabacloud_domain20180129 #阿里云 - 获取 AccessKey 和 SecretKey(需要授予域名查询权限)。
- 配置发信邮箱或 Webhook。
脚本代码(以阿里云为例):
import json
import requests
from datetime import datetime, timedelta
from alibabacloud_domain20180129.client import Client
from alibabacloud_domain20180129 import models as domain_models
from alibabacloud_tea_openapi import models as open_api_models
# ---------- 配置区域 ----------
ALIYUN_ACCESS_KEY = "你的AccessKeyId"
ALIYUN_SECRET_KEY = "你的AccessKeySecret"
DOMAIN_LIST = ["example1.com", "example2.net"] # 要检查的域名列表
DAYS_THRESHOLD = 30 # 提前多少天提醒
# ---------- 通知配置 ----------
NOTIFY_URL = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=XXXX" # 企业微信机器人
# 或 SMTP配置
FROM_EMAIL = "your@email.com"
TO_EMAIL = "admin@email.com"
SMTP_PASSWORD = "xxx"
# 1. 初始化阿里云客户端
config = open_api_models.Config(
access_key_id=ALIYUN_ACCESS_KEY,
access_key_secret=ALIYUN_SECRET_KEY
)
config.endpoint = 'domain.aliyuncs.com'
client = Client(config)
# 2. 查询域名到期时间(批量)
def check_domains():
expired_domains = []
for domain in DOMAIN_LIST:
req = domain_models.QueryDomainByInstanceIdRequest(instance_id=domain)
try:
resp = client.query_domain_by_instance_id(req)
# 解析返回的expirationDate字段
expire_date_str = resp.body.expiration_date
expire_date = datetime.strptime(expire_date_str, "%Y-%m-%dT%H:%M:%SZ")
days_left = (expire_date - datetime.utcnow()).days
print(f"{domain} 到期时间: {expire_date_str}, 剩余 {days_left} 天")
if days_left <= DAYS_THRESHOLD:
expired_domains.append((domain, days_left))
except Exception as e:
print(f"查询 {domain} 失败: {str(e)}")
return expired_domains
# 3. 发送通知(示例:钉钉/微信群机器人)
def send_notification(domains):
if not domains:
print("所有域名均未到期,无需提醒。")
return
msg = "## ⚠️ 域名到期提醒\n"
for domain, days in domains:
msg += f"- **{domain}**: 还剩 **{days}** 天到期,请及时续费!\n"
data = {
"msgtype": "markdown",
"markdown": {"content": msg}
}
requests.post(NOTIFY_URL, json=data)
print("通知已发送。")
if __name__ == "__main__":
expired = check_domains()
send_notification(expired)
注意:
- 对于腾讯云,API 是
DescribeDomains,需要传入域名列表。 - 阿里云的
expiration_date字段可能不包含域名(例如只返回实例ID),建议使用QueryDomainList接口批量查询。
使用 WHOIS 查询(无需 API 密钥,但不可靠)
如果你没有云厂商账号,或者域名在不同注册商,可以通过 WHOIS 协议查询。
依赖库: pip install python-whois
import whois
from datetime import datetime
def check_domain(domain):
try:
w = whois.whois(domain)
expire_date = w.expiration_date
# 有时返回列表
if isinstance(expire_date, list):
expire_date = expire_date[0]
days_left = (expire_date - datetime.now()).days
return days_left
except Exception as e:
print(f"查询 {domain} 失败: {e}")
return None
# 使用示例
domain = "example.com"
days = check_domain(domain)
if days and days <= 30:
print(f"{domain} 仅剩 {days} 天到期,请续费!")
缺点:
- WHOIS 服务可能被屏蔽或限流。
- 有些域名(如 .cn)需要额外处理格式。
- 不适合大批量查询。
利用现有 SaaS 服务(零代码)
如果你不想写代码,可以直接使用现成的监控服务:
- UptimeRobot:免费版支持监控域名到期,会发邮件提醒。
- Domain Health Check:Google Domains 等自带提醒功能。
- 自定义 GitHub Actions(适合程序员):在 GitHub 上定期执行上述脚本,免费且可做持久化记录。
自动化执行(定时任务)
写好的脚本需要定时运行:
Linux(Crontab):
# 每天早上9点执行一次 0 9 * * * /usr/bin/python3 /home/user/domain_check.py >> /var/log/domain_check.log 2>&1
Windows(任务计划程序):
- 打开“任务计划程序”。
- 创建基本任务,设置触发器为每天。
- 操作选择“启动程序”,程序选
python.exe,参数填脚本路径。
总结推荐
- 个人/小公司:用方案一 + 企业微信机器人(免费)即可,5分钟搞定。
- 不想写代码:用 UptimeRobot 或购买域名时开启自动续费 + 注册商邮件提醒。
- 生产环境:建议采用方案一,并添加错误重试和日志告警。
如果你提供具体的云厂商(阿里云、腾讯云、AWS等),我可以给出更精确的 API 调用代码。