mirror of
https://github.com/bookwyrm-social/bookwyrm.git
synced 2024-05-31 22:58:18 +00:00
1048638e30
This is essentially a revert of 9cbff312a
. The commit was at the advice
of the Celery docs for optimization, but I've since decided that the
downsides in terms of making things harder to debug (it makes Flower
nearly useless, for instance) are bigger than the upsides in performance
gain (which seem extremely small in practice, given how long our tasks
take, and the number of tasks we have).
86 lines
2.7 KiB
Python
86 lines
2.7 KiB
Python
""" send emails """
|
|
from django.core.mail import EmailMultiAlternatives
|
|
from django.template.loader import get_template
|
|
|
|
from bookwyrm import models, settings
|
|
from bookwyrm.tasks import app, HIGH
|
|
from bookwyrm.settings import DOMAIN
|
|
|
|
|
|
def email_data():
|
|
"""fields every email needs"""
|
|
site = models.SiteSettings.objects.get()
|
|
return {
|
|
"site_name": site.name,
|
|
"logo": site.logo_small_url,
|
|
"domain": DOMAIN,
|
|
"user": None,
|
|
}
|
|
|
|
|
|
def test_email(user):
|
|
"""Just an admin checking if emails are sending"""
|
|
data = email_data()
|
|
send_email(user.email, *format_email("test", data))
|
|
|
|
|
|
def email_confirmation_email(user):
|
|
"""newly registered users confirm email address"""
|
|
data = email_data()
|
|
data["confirmation_code"] = user.confirmation_code
|
|
data["confirmation_link"] = user.confirmation_link
|
|
send_email(user.email, *format_email("confirm", data))
|
|
|
|
|
|
def invite_email(invite_request):
|
|
"""send out an invite code"""
|
|
data = email_data()
|
|
data["invite_link"] = invite_request.invite.link
|
|
send_email.delay(invite_request.email, *format_email("invite", data))
|
|
|
|
|
|
def password_reset_email(reset_code):
|
|
"""generate a password reset email"""
|
|
data = email_data()
|
|
data["reset_link"] = reset_code.link
|
|
data["user"] = reset_code.user.display_name
|
|
send_email(reset_code.user.email, *format_email("password_reset", data))
|
|
|
|
|
|
def moderation_report_email(report):
|
|
"""a report was created"""
|
|
data = email_data()
|
|
data["reporter"] = report.reporter.localname or report.reporter.username
|
|
if report.user:
|
|
data["reportee"] = report.user.localname or report.user.username
|
|
data["report_link"] = report.remote_id
|
|
data["link_domain"] = report.links.exists()
|
|
|
|
for admin in models.User.objects.filter(
|
|
groups__name__in=["admin", "moderator"]
|
|
).distinct():
|
|
data["user"] = admin.display_name
|
|
send_email.delay(admin.email, *format_email("moderation_report", data))
|
|
|
|
|
|
def format_email(email_name, data):
|
|
"""render the email templates"""
|
|
subject = get_template(f"email/{email_name}/subject.html").render(data).strip()
|
|
html_content = (
|
|
get_template(f"email/{email_name}/html_content.html").render(data).strip()
|
|
)
|
|
text_content = (
|
|
get_template(f"email/{email_name}/text_content.html").render(data).strip()
|
|
)
|
|
return (subject, html_content, text_content)
|
|
|
|
|
|
@app.task(queue=HIGH)
|
|
def send_email(recipient, subject, html_content, text_content):
|
|
"""use a task to send the email"""
|
|
email = EmailMultiAlternatives(
|
|
subject, text_content, settings.EMAIL_SENDER, [recipient]
|
|
)
|
|
email.attach_alternative(html_content, "text/html")
|
|
email.send()
|