nowy mail i funkcja
This commit is contained in:
70
app.py
70
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()
|
||||
@ -340,7 +328,7 @@ def main():
|
||||
type=str,
|
||||
help="Zakres dni nieaktywności w formacie min-max, np. 360-1825 (tylko dla wysyłki maili)"
|
||||
)
|
||||
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
inactive_range = None
|
||||
@ -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']:
|
||||
@ -428,7 +417,7 @@ def main():
|
||||
|
||||
if args.validate or user['inactive'] or not user['email_valid']:
|
||||
final_candidates.append(user)
|
||||
|
||||
|
||||
final_candidates = [u for u in final_candidates if (u.get('points') or 0) == 0]
|
||||
|
||||
if args.report_domains:
|
||||
@ -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