mail o zachecie do logowania
This commit is contained in:
		
							
								
								
									
										20
									
								
								app.py
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								app.py
									
									
									
									
									
								
							@@ -281,7 +281,7 @@ def get_smtp_config():
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    return 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
 | 
					    import os
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    template_path = "mail_template.html"
 | 
					    template_path = "mail_template.html"
 | 
				
			||||||
@@ -431,6 +431,10 @@ def main():
 | 
				
			|||||||
    parser.add_argument('--stats', action='store_true',
 | 
					    parser.add_argument('--stats', action='store_true',
 | 
				
			||||||
        help='Wyświetl statystyki: aktywność, rok rejestracji, domeny')
 | 
					        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()
 | 
					    args = parser.parse_args()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    inactive_range = None
 | 
					    inactive_range = None
 | 
				
			||||||
@@ -449,7 +453,14 @@ def main():
 | 
				
			|||||||
            'created': int(datetime.now().timestamp()) - (86400 * 365 * 2)
 | 
					            'created': int(datetime.now().timestamp()) - (86400 * 365 * 2)
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        print(f"📬 Wysyłka testowego maila na: {test_user['mail']}")
 | 
					        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
 | 
					        return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if not args.drupal_path:
 | 
					    if not args.drupal_path:
 | 
				
			||||||
@@ -458,7 +469,6 @@ def main():
 | 
				
			|||||||
    if not args.delete and args.dry_run is None:
 | 
					    if not args.delete and args.dry_run is None:
 | 
				
			||||||
        args.dry_run = True
 | 
					        args.dry_run = True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
    if args.flush_cache:
 | 
					    if args.flush_cache:
 | 
				
			||||||
        flush_redis_cache()
 | 
					        flush_redis_cache()
 | 
				
			||||||
        return
 | 
					        return
 | 
				
			||||||
@@ -598,9 +608,11 @@ def main():
 | 
				
			|||||||
            smtp_config,
 | 
					            smtp_config,
 | 
				
			||||||
            args.mails_per_pack,
 | 
					            args.mails_per_pack,
 | 
				
			||||||
            args.time_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:")
 | 
					    print("\n📋 Parametry filtrowania:")
 | 
				
			||||||
    if args.days_inactive:
 | 
					    if args.days_inactive:
 | 
				
			||||||
        print(f"- Nieaktywni: > {args.days_inactive} dni (~{days_to_years(args.days_inactive)} lat)")
 | 
					        print(f"- Nieaktywni: > {args.days_inactive} dni (~{days_to_years(args.days_inactive)} lat)")
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										106
									
								
								mail_template_zacheta.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										106
									
								
								mail_template_zacheta.html
									
									
									
									
									
										Normal 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>
 | 
				
			||||||
		Reference in New Issue
	
	Block a user