import datetime,time
from email.header import Header
import requests,threading
import ssl, socket
import smtplib
from email.mime.text import MIMEText
from apscheduler.schedulers.blocking import BlockingScheduler
def checkcert(domain):
info=""
c = ssl.create_default_context()
s = c.wrap_socket(socket.socket(), server_hostname=domain)
s.connect((domain, 443))
cert = s.getpeercert()
nowTime = time.time()
expireTime = cert['notAfter']
index = domain.index('.')
yuming=domain[index + 1:]
GMT_FORMAT = '%b %d %H:%M:%S %Y GMT'
forTime = datetime.datetime.strptime(expireTime, GMT_FORMAT) + datetime.timedelta(hours=8)
expireTime = time.mktime(forTime.timetuple())
if expireTime > nowTime:
lastTime = expireTime - nowTime
else:
info = f"{domain}域名 证书已经过期,请更换!"
lastTime = int(lastTime) / 60 / 60 / 24
if lastTime > 90:
info = f"域名{yuming}距离过期时间还有{int(lastTime)}天过期,到期时间{forTime}"
elif lastTime < 90:
info = f"域名{yuming}距离过期时间还有{int(lastTime)}天过期,到期时间{forTime}"
elif lastTime <60:
info = f"域名{yuming}距离过期时间还有{int(lastTime)}天过期,到期时间{forTime}"
elif lastTime <30:
info = f"域名{yuming}距离过期时间还有{int(lastTime)}天过期,到期时间{forTime},请抓紧申请证书"
sendMail("saas证书到期检查",info)
def sendMail(subject, info):
mail_host = "xxxx"
mail_user = "xxxxx"
mail_pass = "xxxxx"
sender = 'xxxxx'
receivers = ['xxxxxx',]
mail_result = str(info)
msg = MIMEText(mail_result, 'plain', 'utf-8')
msg['From'] = Header("证书到期检查", 'utf-8')
msg['To'] = Header("yunlist", 'utf-8')
msg['Subject'] = "%s" % (subject)
try:
smtpObj = smtplib.SMTP()
smtpObj.connect(mail_host, 25)
smtpObj.login(mail_user, mail_pass)
smtpObj.sendmail(sender, receivers, msg.as_string())
print
"邮件发送成功"
except smtplib.SMTPException:
print
"Error: 无法发送邮件"
scheduler = BlockingScheduler()
@scheduler.scheduled_job('cron',minute ='*/2')
def main():
print("当前时间:",time.strftime("%Y-%M-%d %H:%M:%S",time.localtime()))
domain_list=["abc.com","aa.com"]
for i in range(len(domain_list)):
try:
t=threading.Thread(target=checkcert,args=(domain_list[i],))
t.start()
t.join()
except:
print("Error: 无法启动线程")
scheduler.start()
if __name__ == "__main__":
main()