command send newsletter (#1184)
This commit is contained in:
parent
6322e03996
commit
125538748d
42
server.py
42
server.py
|
@ -4,6 +4,7 @@ import time
|
||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
|
|
||||||
import arrow
|
import arrow
|
||||||
|
import click
|
||||||
import flask_limiter
|
import flask_limiter
|
||||||
import flask_profiler
|
import flask_profiler
|
||||||
import sentry_sdk
|
import sentry_sdk
|
||||||
|
@ -103,6 +104,7 @@ from app.models import (
|
||||||
NewsletterUser,
|
NewsletterUser,
|
||||||
)
|
)
|
||||||
from app.monitor.base import monitor_bp
|
from app.monitor.base import monitor_bp
|
||||||
|
from app.newsletter_utils import send_newsletter_to_user
|
||||||
from app.oauth.base import oauth_bp
|
from app.oauth.base import oauth_bp
|
||||||
from app.onboarding.base import onboarding_bp
|
from app.onboarding.base import onboarding_bp
|
||||||
from app.phone.base import phone_bp
|
from app.phone.base import phone_bp
|
||||||
|
@ -791,6 +793,46 @@ def register_custom_commands(app):
|
||||||
add_sl_domains()
|
add_sl_domains()
|
||||||
add_proton_partner()
|
add_proton_partner()
|
||||||
|
|
||||||
|
@app.cli.command("send-newsletter")
|
||||||
|
@click.option("-n", "--newsletter_id", type=int, help="Newsletter ID to be sent")
|
||||||
|
def send_newsletter(newsletter_id):
|
||||||
|
newsletter = Newsletter.get(newsletter_id)
|
||||||
|
if not newsletter:
|
||||||
|
LOG.w(f"no such newsletter {newsletter_id}")
|
||||||
|
return
|
||||||
|
|
||||||
|
nb_success = 0
|
||||||
|
nb_failure = 0
|
||||||
|
|
||||||
|
# user_ids that have received the newsletter
|
||||||
|
user_received_newsletter = Session.query(NewsletterUser.user_id).filter(
|
||||||
|
NewsletterUser.newsletter_id == newsletter_id
|
||||||
|
)
|
||||||
|
|
||||||
|
# only send newsletter to those who haven't received it
|
||||||
|
user_query = (
|
||||||
|
User.order_by(User.id)
|
||||||
|
.filter(User.id.notin_(user_received_newsletter))
|
||||||
|
.all()
|
||||||
|
)
|
||||||
|
|
||||||
|
for user in user_query:
|
||||||
|
to_email, unsubscribe_link, via_email = user.get_communication_email()
|
||||||
|
if not to_email:
|
||||||
|
continue
|
||||||
|
|
||||||
|
sent, error_msg = send_newsletter_to_user(newsletter, user)
|
||||||
|
if sent:
|
||||||
|
LOG.d(f"{newsletter} sent to {user}")
|
||||||
|
nb_success += 1
|
||||||
|
else:
|
||||||
|
nb_failure += 1
|
||||||
|
|
||||||
|
# sleep in between to not overwhelm mailbox provider
|
||||||
|
time.sleep(0.2)
|
||||||
|
|
||||||
|
LOG.d(f"Nb success {nb_success}, failures {nb_failure}")
|
||||||
|
|
||||||
|
|
||||||
def setup_do_not_track(app):
|
def setup_do_not_track(app):
|
||||||
@app.route("/dnt")
|
@app.route("/dnt")
|
||||||
|
|
Loading…
Reference in New Issue