# -*- coding: utf-8 -*- import datetime import sys,time import sys from odps import options import smtplib from email.header import Header from email.mime.text import MIMEText # 设置编码(此设置可修复数据库查询结果中文乱码的问题) reload(sys) sys.setdefaultencoding('utf-8') # 第三方 SMTP 服务 # SMTP服务器 mail_host = "smtp.126.com" # 用户名 mail_user = "123@126.com" # 授权密码,非登录密码 mail_pass = "123456" # 发件人邮箱(最好写全, 不然会失败) sender = '123@126.com' # 接收邮件,可设置为你的QQ邮箱或者其他邮箱 receivers = ['abc@qq.com','bcd@qq.com'] # 邮件主题 title = '邮件标题' # 发送邮件方法 def sendEmail(content): # 内容, 格式, 编码 message = MIMEText(content, 'plain', 'utf-8') message['From'] = "{}".format(sender) message['To'] = ",".join(receivers) message['Subject'] = title try: # 启用SSL发信, 端口一般是465 smtpObj = smtplib.SMTP_SSL(mail_host, 465) # 登录验证 smtpObj.login(mail_user, mail_pass) # 发送 smtpObj.sendmail(sender, receivers, message.as_string()) print("mail has been send successfully.") except smtplib.SMTPException as e: print(e) # 设置ODPS参数 options.sql.settings = {'odps.sql.allow.fullscan': 'true'} qcc_sql = """ SELECT DISTINCT * FROM ( SELECT case WHEN flag1=1 then '正常' ELSE concat(db_name,'中文乱码测试') end as result FROM (select t2.db_name,t2.code,COUNT(1) as flag1 from ods_com_t_organization t2 where t2.is_company=1 and t2.is_deleted=0 AND nvl(t2.code,'')!='' group by t2.db_name,t2.code )t1 )t3 WHERE result != '正常' ; """ # 查询SQL获取结果 resdata = [] with o.execute_sql(qcc_sql).open_reader() as reader: resdata = [record.values for record in reader] # 判断结果是否有数据,如无则正常,如有则发送邮件并报错退出 if resdata == []: print("数据正常") else: result = "|".join(resdata[0]) print(result) sendEmail(result) sys.exit(-1)