97 lines
2.9 KiB
Python
97 lines
2.9 KiB
Python
import smtplib
|
|
import os
|
|
from email.mime.text import MIMEText
|
|
from email.mime.multipart import MIMEMultipart
|
|
from email.mime.base import MIMEBase
|
|
from email import encoders
|
|
from datetime import datetime
|
|
|
|
|
|
def send_log_email(log_file='checkin.log'):
|
|
"""
|
|
发送签到日志邮件
|
|
|
|
Args:
|
|
log_file: 日志文件路径
|
|
"""
|
|
# 从环境变量读取配置
|
|
smtp_server = os.getenv('SMTP_SERVER', 'smtp.gmail.com')
|
|
smtp_port = int(os.getenv('SMTP_PORT', '587'))
|
|
sender_email = os.getenv('EMAIL_USERNAME', '')
|
|
sender_password = os.getenv('EMAIL_PASSWORD', '')
|
|
receiver_email = os.getenv('RECEIVER_EMAIL', sender_email)
|
|
|
|
# 检查配置
|
|
if not sender_email or not sender_password:
|
|
print("❌ 邮件配置未设置,跳过发送")
|
|
return False
|
|
|
|
try:
|
|
# 读取日志内容
|
|
log_content = ""
|
|
if os.path.exists(log_file):
|
|
with open(log_file, 'r', encoding='utf-8') as f:
|
|
log_content = f.read()
|
|
else:
|
|
log_content = "日志文件不存在"
|
|
|
|
# 判断签到是否成功(根据日志内容)
|
|
is_success = "签到流程完成" in log_content or "验证码验证成功" in log_content
|
|
status_emoji = "✅" if is_success else "❌"
|
|
status_text = "成功" if is_success else "失败"
|
|
|
|
# 创建邮件
|
|
msg = MIMEMultipart()
|
|
msg['From'] = sender_email
|
|
msg['To'] = receiver_email
|
|
msg['Subject'] = f"{status_emoji} SakuraFrp 签到{status_text} - {datetime.now().strftime('%Y-%m-%d')}"
|
|
|
|
# 邮件正文
|
|
body = f"""
|
|
SakuraFrp 自动签到报告
|
|
|
|
状态: {status_emoji} {status_text}
|
|
时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}
|
|
|
|
{'='*50}
|
|
日志内容:
|
|
{'='*50}
|
|
|
|
{log_content[-2000:] if len(log_content) > 2000 else log_content}
|
|
|
|
{'='*50}
|
|
此邮件由自动签到系统发送
|
|
"""
|
|
|
|
msg.attach(MIMEText(body, 'plain', 'utf-8'))
|
|
|
|
# 添加日志附件
|
|
if os.path.exists(log_file):
|
|
with open(log_file, 'rb') as f:
|
|
part = MIMEBase('application', 'octet-stream')
|
|
part.set_payload(f.read())
|
|
encoders.encode_base64(part)
|
|
part.add_header('Content-Disposition', f'attachment; filename= {os.path.basename(log_file)}')
|
|
msg.attach(part)
|
|
|
|
if smtp_port == 465:
|
|
server = smtplib.SMTP_SSL(smtp_server, smtp_port)
|
|
else:
|
|
server = smtplib.SMTP(smtp_server, smtp_port)
|
|
server.starttls()
|
|
|
|
with server:
|
|
server.login(sender_email, sender_password)
|
|
server.send_message(msg)
|
|
|
|
print(f"✅ 邮件发送成功: {receiver_email}")
|
|
return True
|
|
|
|
except Exception as e:
|
|
print(f"❌ 邮件发送失败: {e}")
|
|
return False
|
|
|
|
|
|
if __name__ == "__main__":
|
|
send_log_email()
|