import smtplib
from email.mime.text import MIMEText
from email.header import Header
from datetime import datetime

# Default parameter
SMTP_SERVER = "smtp.qq.com"
SMTP_PORT = 465  # SSL 端口

# 发件人信息
SENDER_EMAIL = "你的发件邮箱"
SENDER_PASSWORD = "你的授权码" 

# 收件人信息
RECEIVER_EMAIL = "你的收件邮箱"

def send_email(subject, body, receiver=None):

    if receiver is None:
        receiver = RECEIVER_EMAIL
    
    try:
        # 创建邮件
        msg = MIMEText(body, 'plain', 'utf-8')
        msg['Subject'] = subject
        msg['From'] = SENDER_EMAIL
        msg['To'] = Header(receiver, 'utf-8')
        
        # 发送邮件
        with smtplib.SMTP_SSL(SMTP_SERVER, SMTP_PORT) as server:
            server.login(SENDER_EMAIL, SENDER_PASSWORD)
            server.sendmail(SENDER_EMAIL, [receiver], msg.as_string())
        
        return True, "邮件发送成功"
    except Exception as e:
        return False, f"邮件发送失败: {str(e)}"


def send_task_complete_notify(task_name, start_time, end_time, result_file=None, count=None):
    """
    发送任务完成通知
    """
    duration = end_time - start_time
    hours = int(duration // 3600)
    minutes = int((duration % 3600) // 60)
    seconds = int(duration % 60)
    
    subject = f"任务完成: {task_name}"
    
    body = f"""
任务名称: {task_name}
开始时间: {start_time.strftime('%Y-%m-%d %H:%M:%S')}
结束时间: {end_time.strftime('%Y-%m-%d %H:%M:%S')}
运行时长: {hours}时 {minutes}分 {seconds}秒
"""
    
    if count is not None:
        body += f"找到目标结果: {count:,} 个\n"
    
    if result_file:
        body += f"结果文件: {result_file}\n"
    
    body += "\n---\n[结尾]"
    
    return send_email(subject, body)


def send_progress_notify(task_name, current_targret, total_targret, progress_pct):
    
    subject = f"任务进度: {task_name}"
    
    body = f"""
任务名称: {task_name}
当前进度: {progress_pct:.1f}%
当前对象: {current_targret:,}
已找到符合条件的对象: {total_targret:,}
时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}
"""
    
    return send_email(subject, body)


if __name__ == "__main__":

    print("测试发送邮件...")
    success, msg = send_email(
        "测试邮件",
        f"这是来自[发件人]的测试邮件\n发送时间: {datetime.now()}"
    )
    if success:
        print("邮件发送成功，请检查邮箱")
    else:
        print(f"{msg}")