mail o zachecie do logowania

This commit is contained in:
Mateusz Gruszczyński
2025-05-26 13:49:12 +02:00
parent b6e9e65bf1
commit d50466ad87
2 changed files with 122 additions and 4 deletions

20
app.py
View File

@ -281,7 +281,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):
def send_email_batch(users, smtp_config, mails_per_pack=100, time_per_pack=60, dry_run=False, template_path="mail_template.html"):
import os
template_path = "mail_template.html"
@ -431,6 +431,10 @@ def main():
parser.add_argument('--stats', action='store_true',
help='Wyświetl statystyki: aktywność, rok rejestracji, domeny')
parser.add_argument('--mail-template', type=str,
help='Ścieżka do alternatywnego pliku HTML z szablonem maila (domyślnie: mail_template.html)')
args = parser.parse_args()
inactive_range = None
@ -449,7 +453,14 @@ def main():
'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)
send_email_batch(
[test_user],
smtp_config,
mails_per_pack=1,
time_per_pack=0,
dry_run=False,
template_path=args.mail_template
)
return
if not args.drupal_path:
@ -458,7 +469,6 @@ def main():
if not args.delete and args.dry_run is None:
args.dry_run = True
if args.flush_cache:
flush_redis_cache()
return
@ -598,9 +608,11 @@ def main():
smtp_config,
args.mails_per_pack,
args.time_per_pack,
dry_run=args.dry_run
dry_run=args.dry_run,
template_path=args.mail_template
)
print("\n📋 Parametry filtrowania:")
if args.days_inactive:
print(f"- Nieaktywni: > {args.days_inactive} dni (~{days_to_years(args.days_inactive)} lat)")

106
mail_template_zacheta.html Normal file
View File

@ -0,0 +1,106 @@
<!DOCTYPE html>
<html lang="pl">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Zapraszamy ponownie do unitraklub.pl</title>
<style>
body {
font-family: 'Segoe UI', Roboto, sans-serif;
background-color: #f4f4f4;
margin: 0;
padding: 0;
color: #333333;
}
.container {
max-width: 600px;
margin: 40px auto;
background-color: #ffffff;
padding: 30px;
border-radius: 8px;
box-shadow: 0 4px 12px rgba(0,0,0,0.1);
}
h1 {
font-size: 22px;
color: #222222;
}
h2 {
font-size: 18px;
color: #222222;
margin-top: 25px;
}
p {
font-size: 16px;
line-height: 1.6;
}
.footer {
margin-top: 30px;
font-size: 14px;
color: #888888;
text-align: center;
}
.details {
background-color: #f8f9fa;
padding: 12px;
border-left: 4px solid #3498db;
margin: 20px 0;
}
.details-item {
margin-bottom: 8px;
}
.benefits {
background-color: #e8f4fd;
padding: 12px;
border-left: 4px solid #2980b9;
margin: 20px 0;
}
.benefits ul {
padding-left: 20px;
margin: 10px 0;
}
.benefits li {
margin-bottom: 8px;
}
</style>
</head>
<body>
<div class="container">
<h1>Witaj @user,</h1>
<p>
Cieszymy się, że jesteś częścią naszej społeczności <strong>unitraklub.pl</strong>!
</p>
<div class="details">
<div class="details-item"><strong>Data rejestracji:</strong> @rejestracja</div>
<div class="details-item"><strong>Ostatnie logowanie:</strong> @ostatnie_logowanie</div>
</div>
<h2>Odwiedź nas ponownie wiele się zmieniło!</h2>
<div class="benefits">
<p>
W unitraklub.pl stale rozwijamy społeczność miłośników sprzętu Unitra i elektroniki retro. Jeśli dawno nas nie odwiedzałeś to świetny moment, by wrócić i zobaczyć, co nowego!
</p>
<ul>
<li>Nowe materiały w dziale <strong>Download</strong> instrukcje serwisowe, katalogi, schematy</li>
<li>Aktywne dyskusje, porady techniczne i archiwalne zdjęcia sprzętu</li>
<li>Możliwość dzielenia się swoimi projektami i doświadczeniem z innymi pasjonatami</li>
<li>Społeczność, która docenia jakość i historię polskiej elektroniki</li>
</ul>
<p>
<strong>Nie musisz zakładać nowego konta Twoje już czeka.</strong> Wystarczy się zalogować i dołączyć do rozmów!
</p>
</div>
<p>
Do zobaczenia na forum!<br>
Zespół administracyjny unitraklub.pl
</p>
<div class="footer">
Ten e-mail został wygenerowany automatycznie. Prosimy na niego nie odpowiadać.
</div>
</div>
</body>
</html>