Files

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()