only_active_users
This commit is contained in:
32
app.py
32
app.py
@@ -527,11 +527,17 @@ def main():
|
|||||||
parser.add_argument('--mailing-all-users', action='store_true',
|
parser.add_argument('--mailing-all-users', action='store_true',
|
||||||
help='Wyślij mailing do wszystkich użytkowników z poprawnym adresem e-mail')
|
help='Wyślij mailing do wszystkich użytkowników z poprawnym adresem e-mail')
|
||||||
|
|
||||||
|
parser.add_argument('--active-within-days', type=int,
|
||||||
|
help='Wyślij mailing do użytkowników aktywnych w ciągu ostatnich X dni')
|
||||||
|
|
||||||
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
inactive_range = None
|
inactive_range = None
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if args.inactive_since:
|
if args.inactive_since:
|
||||||
try:
|
try:
|
||||||
min_days, max_days = map(int, args.inactive_since.split('-'))
|
min_days, max_days = map(int, args.inactive_since.split('-'))
|
||||||
@@ -664,6 +670,32 @@ def main():
|
|||||||
)
|
)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
if args.active_within_days:
|
||||||
|
users = get_users(db_config)
|
||||||
|
temp_domains_cache = load_temp_domains()
|
||||||
|
now_ts = int(datetime.now().timestamp())
|
||||||
|
threshold = now_ts - args.active_within_days * 86400
|
||||||
|
|
||||||
|
candidates = [
|
||||||
|
u for u in users
|
||||||
|
if u.get('access') and u['access'] >= threshold
|
||||||
|
and (not is_fake_email(u['mail']))
|
||||||
|
and (not is_temp_email(u['mail'], temp_domains_cache))
|
||||||
|
]
|
||||||
|
|
||||||
|
print(f"📨 Wysyłanie mailingu do {len(candidates)} aktywnych użytkowników z ostatnich {args.active_within_days} dni...")
|
||||||
|
|
||||||
|
send_email_batch(
|
||||||
|
candidates,
|
||||||
|
smtp_config,
|
||||||
|
args.mails_per_pack,
|
||||||
|
args.time_per_pack,
|
||||||
|
dry_run=args.dry_run,
|
||||||
|
template_path=args.mail_template
|
||||||
|
)
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
if args.stats:
|
if args.stats:
|
||||||
from collections import Counter
|
from collections import Counter
|
||||||
|
|
||||||
|
|||||||
113
mail_template_firewall.html
Normal file
113
mail_template_firewall.html
Normal file
@@ -0,0 +1,113 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="pl">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<title>Dziękujemy za Twoją aktywność w Unitra-Klubie</title>
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
font-family: Arial, Helvetica, sans-serif;
|
||||||
|
background-color: #f9f9f9;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
color: #111;
|
||||||
|
}
|
||||||
|
.container {
|
||||||
|
max-width: 640px;
|
||||||
|
margin: 30px auto;
|
||||||
|
background-color: #fff;
|
||||||
|
border: 1px solid #ccc;
|
||||||
|
padding: 30px;
|
||||||
|
box-shadow: 0 0 1px rgba(0,0,0,0.2);
|
||||||
|
}
|
||||||
|
.logo {
|
||||||
|
text-align: center;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
.logo img {
|
||||||
|
max-width: 220px;
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
h1 {
|
||||||
|
font-size: 22px;
|
||||||
|
text-align: center;
|
||||||
|
color: #111;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
.highlight {
|
||||||
|
background-color: #fdfdfd;
|
||||||
|
border-left: 3px solid #444;
|
||||||
|
padding: 16px;
|
||||||
|
margin: 25px 0;
|
||||||
|
}
|
||||||
|
.highlight ul {
|
||||||
|
margin: 10px 0 0 20px;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
.highlight li {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
p {
|
||||||
|
font-size: 15px;
|
||||||
|
line-height: 1.6;
|
||||||
|
}
|
||||||
|
.footer {
|
||||||
|
margin-top: 40px;
|
||||||
|
font-size: 13px;
|
||||||
|
color: #777;
|
||||||
|
text-align: center;
|
||||||
|
border-top: 1px solid #ddd;
|
||||||
|
padding-top: 20px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="container">
|
||||||
|
<div class="logo">
|
||||||
|
<img src="https://unitraklub.pl/unitraklub_logo_czyste.png" alt="Unitra Klub logo">
|
||||||
|
</div>
|
||||||
|
<h1>Witaj @user,</h1>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Dziękujemy, że jesteś aktywnym użytkownikiem Unitra-Klubu i regularnie zaglądasz na <strong>unitraklub.pl</strong>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div class="highlight">
|
||||||
|
<p><strong>Dziękujemy za Twoją aktywność!</strong></p>
|
||||||
|
<ul>
|
||||||
|
<li>za udział w dyskusjach na forum i stronie unitraklub.pl,</li>
|
||||||
|
<li>za dzielenie się wiedzą, doświadczeniem i materiałami,</li>
|
||||||
|
<li>za dotychczasowe wsparcie i pomoc przy zbiórkach na rozwój klubu.</li>
|
||||||
|
</ul>
|
||||||
|
<p>
|
||||||
|
To właśnie dzięki takim osobom jak Ty nasza społeczność żyje, rośnie
|
||||||
|
i może dalej rozwijać pasję do sprzętu Unitra.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Obecnie prowadzimy nową zbiórkę na <strong>firewall/router do zmodernizowanej sieci Unitra-Klub</strong>.
|
||||||
|
Jeśli chcesz i możesz nas wesprzeć, znajdziesz wszystkie informacje pod adresem:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<strong>
|
||||||
|
<a href="https://z.unitraklub.pl/zbiorka/14">
|
||||||
|
https://z.unitraklub.pl/zbiorka/14
|
||||||
|
</a>
|
||||||
|
</strong>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Każda, nawet drobna wpłata, realnie pomaga w utrzymaniu i rozwoju infrastruktury klubu.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>Pozdrawiamy serdecznie,<br>Zespół administracyjny Unitra-Klub</p>
|
||||||
|
|
||||||
|
<div class="footer">
|
||||||
|
<i><b>Pomoc jest dobrowolna, opis zbiórki i sposoby wsparcia znajdziesz pod linkiem powyżej.</b></i><br>
|
||||||
|
Ten e-mail został wygenerowany automatycznie. Prosimy na niego nie odpowiadać.
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
Reference in New Issue
Block a user