Files
natfrp-auto-check-in/SakuraFrpQiandao/send_email.py
T

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