nowy mail i funkcja
This commit is contained in:
		
							
								
								
									
										66
									
								
								app.py
									
									
									
									
									
								
							
							
						
						
									
										66
									
								
								app.py
									
									
									
									
									
								
							@@ -165,7 +165,7 @@ def get_smtp_config():
 | 
			
		||||
 | 
			
		||||
    return config
 | 
			
		||||
 | 
			
		||||
def send_email_batch(users, smtp_config, mails_per_pack=100, time_per_pack=60, dry_run=False, inactive_range=None):
 | 
			
		||||
def send_email_batch(users, smtp_config, mails_per_pack=100, time_per_pack=60, dry_run=False):
 | 
			
		||||
    import os
 | 
			
		||||
 | 
			
		||||
    template_path = "mail_template.html"
 | 
			
		||||
@@ -180,18 +180,6 @@ def send_email_batch(users, smtp_config, mails_per_pack=100, time_per_pack=60, d
 | 
			
		||||
        print(f"❌ Błąd podczas odczytu szablonu HTML: {e}")
 | 
			
		||||
        return
 | 
			
		||||
 | 
			
		||||
    if inactive_range:
 | 
			
		||||
        min_days, max_days = inactive_range
 | 
			
		||||
        now_ts = int(datetime.now().timestamp())
 | 
			
		||||
        filtered_users = []
 | 
			
		||||
        for user in users:
 | 
			
		||||
            last_access = user['access'] or 0
 | 
			
		||||
            days_inactive = (now_ts - last_access) / 86400
 | 
			
		||||
            if min_days <= days_inactive <= max_days:
 | 
			
		||||
                filtered_users.append(user)
 | 
			
		||||
        users = filtered_users
 | 
			
		||||
        print(f"📨 Wysyłka maili tylko dla użytkowników nieaktywnych od {min_days} do {max_days} dni ({len(users)} osób)")
 | 
			
		||||
 | 
			
		||||
    try:
 | 
			
		||||
        smtp = smtplib.SMTP(smtp_config["host"], int(smtp_config["port"]))
 | 
			
		||||
        smtp.ehlo()
 | 
			
		||||
@@ -349,16 +337,15 @@ def main():
 | 
			
		||||
            min_days, max_days = map(int, args.inactive_since.split('-'))
 | 
			
		||||
            inactive_range = (min_days, max_days)
 | 
			
		||||
        except Exception as e:
 | 
			
		||||
            print(f"Błąd parsowania zakresu dni w --inactive-since: {e}")
 | 
			
		||||
            print(f"Błąd parsowania zakresu dni: {e}")
 | 
			
		||||
            exit(1)
 | 
			
		||||
 | 
			
		||||
    if args.send_test:
 | 
			
		||||
        test_user = {
 | 
			
		||||
            'name': 'Testowy Użytkownik',
 | 
			
		||||
            'mail': args.send_test,
 | 
			
		||||
            'created': int(datetime.now().timestamp()) - (86400 * 365 * 2)  # 2 lata temu
 | 
			
		||||
            'created': int(datetime.now().timestamp()) - (86400 * 365 * 2)
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        print(f"📬 Wysyłka testowego maila na: {test_user['mail']}")
 | 
			
		||||
        send_email_batch([test_user], smtp_config, mails_per_pack=1, time_per_pack=0, dry_run=False)
 | 
			
		||||
        return
 | 
			
		||||
@@ -397,12 +384,19 @@ def main():
 | 
			
		||||
        if (user.get('post_count') or 0) > 0:
 | 
			
		||||
            continue
 | 
			
		||||
 | 
			
		||||
        last_access = user['access'] or 0
 | 
			
		||||
        days_inactive = (now_ts - last_access) / 86400
 | 
			
		||||
 | 
			
		||||
        # Nowa logika oznaczania nieaktywnych
 | 
			
		||||
        is_inactive_by_days = (args.days_inactive is not None) and (days_inactive > args.days_inactive)
 | 
			
		||||
        is_inactive_by_range = inactive_range and (inactive_range[0] <= days_inactive <= inactive_range[1])
 | 
			
		||||
        
 | 
			
		||||
        user['inactive'] = is_inactive_by_days or is_inactive_by_range
 | 
			
		||||
        user['temp_email'] = is_temp_email(user['mail'])
 | 
			
		||||
        user['email_valid'] = not is_fake_email(user['mail']) and not user['temp_email']
 | 
			
		||||
 | 
			
		||||
        if args.only_invalid_emails:
 | 
			
		||||
            if not user['email_valid']:
 | 
			
		||||
                user['inactive'] = True
 | 
			
		||||
                final_candidates.append(user)
 | 
			
		||||
            continue
 | 
			
		||||
 | 
			
		||||
@@ -414,11 +408,6 @@ def main():
 | 
			
		||||
                skipped_veterans += 1
 | 
			
		||||
                continue
 | 
			
		||||
 | 
			
		||||
        last_access = user['access'] or 0
 | 
			
		||||
        user['inactive'] = (args.days_inactive is not None) and ((now_ts - last_access) > args.days_inactive * 86400)
 | 
			
		||||
        user['temp_email'] = is_temp_email(user['mail'])
 | 
			
		||||
        user['email_valid'] = not is_fake_email(user['mail']) and not user['temp_email']
 | 
			
		||||
 | 
			
		||||
        if user['inactive']:
 | 
			
		||||
            inactive_count += 1
 | 
			
		||||
        if not user['email_valid']:
 | 
			
		||||
@@ -453,42 +442,37 @@ def main():
 | 
			
		||||
 | 
			
		||||
    if args.send_mails:
 | 
			
		||||
        send_email_batch(
 | 
			
		||||
            final_candidates, 
 | 
			
		||||
            [u for u in final_candidates if u['inactive']],  # Tylko nieaktywni
 | 
			
		||||
            smtp_config, 
 | 
			
		||||
            args.mails_per_pack, 
 | 
			
		||||
            args.time_per_pack,
 | 
			
		||||
            inactive_range=inactive_range
 | 
			
		||||
            args.time_per_pack
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
    print("\n📋 Parametry filtrowania:")
 | 
			
		||||
    if args.days_inactive:
 | 
			
		||||
        print(f"- Nieaktywni: brak logowania przez ≥ {args.days_inactive} dni (~{days_to_years(args.days_inactive)} lat)")
 | 
			
		||||
    print(f"- Weterani: konta zarejestrowane w roku ≤ {args.veteran_year}")
 | 
			
		||||
    print(f"- Pominięci weterani: logowanie w ciągu ostatnich ≤ {args.recent_login_days} dni (~{days_to_years(args.recent_login_days)} lat)")
 | 
			
		||||
    if args.inactive_since:
 | 
			
		||||
        min_days, max_days = map(int, args.inactive_since.split('-'))
 | 
			
		||||
        print(f"- Wysyłka maili tylko dla nieaktywnych od {min_days} do {max_days} dni (~{days_to_years(min_days)}-{days_to_years(max_days)} lat)")
 | 
			
		||||
        print(f"- Nieaktywni: > {args.days_inactive} dni (~{days_to_years(args.days_inactive)} lat)")
 | 
			
		||||
    if inactive_range:
 | 
			
		||||
        print(f"- Zakres nieaktywności: {inactive_range[0]}-{inactive_range[1]} dni (~{days_to_years(inactive_range[0])}-{days_to_years(inactive_range[1])} lat)")
 | 
			
		||||
    print(f"- Weterani: konta przed {args.veteran_year}")
 | 
			
		||||
    print(f"- Pominięci weterani: logowanie w ostatnich {args.recent_login_days} dniach")
 | 
			
		||||
 | 
			
		||||
    print("\n📊 Podsumowanie:")
 | 
			
		||||
    print(f"- Całkowita liczba użytkowników w bazie: {len(users)}")
 | 
			
		||||
    print(f"- Całkowita liczba użytkowników: {len(users)}")
 | 
			
		||||
    print(f"- Pominięci z punktami: {skipped_with_points}")
 | 
			
		||||
    print(f"- Nieaktywni (> {args.days_inactive} dni): {inactive_count}")
 | 
			
		||||
    print(f"- Z niepoprawnym e-mailem (MX lub tymczasowy): {invalid_email_count}")
 | 
			
		||||
    print(f"- Nieaktywni: {inactive_count}")
 | 
			
		||||
    print(f"- Z niepoprawnym e-mailem: {invalid_email_count}")
 | 
			
		||||
    print(f"- Z tymczasowym e-mailem: {temp_email_count}")
 | 
			
		||||
    print(f"- Kandydaci do usunięcia: {len(final_candidates)}")
 | 
			
		||||
    print(f"- Pominięci jako aktywni weterani: {skipped_veterans}")
 | 
			
		||||
 | 
			
		||||
    if args.only_invalid_emails:
 | 
			
		||||
        print("- Tryb: tylko użytkownicy z nieprawidłowymi adresami e-mail")
 | 
			
		||||
    print(f"- Pominięci weterani: {skipped_veterans}")
 | 
			
		||||
 | 
			
		||||
    if args.delete:
 | 
			
		||||
        confirm_delete()
 | 
			
		||||
        if not args.drupal_path:
 | 
			
		||||
            print("❌ Brak parametru --drupal-path. Nie można usunąć użytkowników bez ścieżki do Drupala.")
 | 
			
		||||
            print("❌ Brak ścieżki do Drupala!")
 | 
			
		||||
            sys.exit(1)
 | 
			
		||||
        for u in tqdm(final_candidates, desc="Usuwanie użytkowników"):
 | 
			
		||||
        for u in tqdm(final_candidates, desc="Usuwanie"):
 | 
			
		||||
            delete_user_via_php(u['uid'], args.drupal_path)
 | 
			
		||||
        print(f"✅ Usunięto {len(final_candidates)} użytkowników przez delete_user.php")
 | 
			
		||||
        print(f"✅ Usunięto {len(final_candidates)} użytkowników")
 | 
			
		||||
 | 
			
		||||
if __name__ == '__main__':
 | 
			
		||||
    main()
 | 
			
		||||
		Reference in New Issue
	
	Block a user