2021-03-08 16:49:10 +00:00
|
|
|
""" send emails """
|
2021-03-21 15:54:57 +00:00
|
|
|
from django.core.mail import EmailMultiAlternatives
|
|
|
|
from django.template.loader import get_template
|
2020-10-02 21:55:28 +00:00
|
|
|
|
2021-03-29 15:33:12 +00:00
|
|
|
from bookwyrm import models, settings
|
2022-11-13 15:59:05 +00:00
|
|
|
from bookwyrm.tasks import app, HIGH
|
2021-03-21 18:43:14 +00:00
|
|
|
from bookwyrm.settings import DOMAIN
|
2020-10-02 21:55:28 +00:00
|
|
|
|
2021-03-08 16:49:10 +00:00
|
|
|
|
2021-03-21 18:43:14 +00:00
|
|
|
def email_data():
|
2021-04-26 16:15:42 +00:00
|
|
|
"""fields every email needs"""
|
2021-03-21 16:13:21 +00:00
|
|
|
site = models.SiteSettings.objects.get()
|
2021-03-21 18:43:14 +00:00
|
|
|
return {
|
2021-03-21 16:13:21 +00:00
|
|
|
"site_name": site.name,
|
2021-11-18 04:22:00 +00:00
|
|
|
"logo": site.logo_small_url,
|
2021-03-21 18:43:14 +00:00
|
|
|
"domain": DOMAIN,
|
|
|
|
"user": None,
|
2021-03-21 16:13:21 +00:00
|
|
|
}
|
2021-03-21 18:43:14 +00:00
|
|
|
|
|
|
|
|
2021-08-06 22:38:37 +00:00
|
|
|
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
|
2022-11-02 01:08:45 +00:00
|
|
|
send_email(user.email, *format_email("confirm", data))
|
2021-08-06 22:38:37 +00:00
|
|
|
|
2021-08-06 23:24:57 +00:00
|
|
|
|
2021-03-21 18:43:14 +00:00
|
|
|
def invite_email(invite_request):
|
2021-04-26 16:15:42 +00:00
|
|
|
"""send out an invite code"""
|
2021-03-21 18:43:14 +00:00
|
|
|
data = email_data()
|
|
|
|
data["invite_link"] = invite_request.invite.link
|
2021-03-21 19:06:20 +00:00
|
|
|
send_email.delay(invite_request.email, *format_email("invite", data))
|
2021-03-21 16:13:21 +00:00
|
|
|
|
|
|
|
|
2020-10-02 21:55:28 +00:00
|
|
|
def password_reset_email(reset_code):
|
2021-04-26 16:15:42 +00:00
|
|
|
"""generate a password reset email"""
|
2021-03-21 18:43:14 +00:00
|
|
|
data = email_data()
|
|
|
|
data["reset_link"] = reset_code.link
|
2021-03-21 19:06:20 +00:00
|
|
|
data["user"] = reset_code.user.display_name
|
2022-11-21 03:39:08 +00:00
|
|
|
send_email(reset_code.user.email, *format_email("password_reset", data))
|
2020-10-02 21:55:28 +00:00
|
|
|
|
2021-03-21 19:07:58 +00:00
|
|
|
|
2021-11-18 04:22:00 +00:00
|
|
|
def moderation_report_email(report):
|
|
|
|
"""a report was created"""
|
|
|
|
data = email_data()
|
|
|
|
data["reporter"] = report.reporter.localname or report.reporter.username
|
2022-07-06 00:19:03 +00:00
|
|
|
if report.user:
|
|
|
|
data["reportee"] = report.user.localname or report.user.username
|
2021-11-18 04:22:00 +00:00
|
|
|
data["report_link"] = report.remote_id
|
2022-11-15 02:03:36 +00:00
|
|
|
data["link_domain"] = report.links.exists()
|
2021-11-18 04:22:00 +00:00
|
|
|
|
2022-01-30 16:51:14 +00:00
|
|
|
for admin in models.User.objects.filter(
|
|
|
|
groups__name__in=["admin", "moderator"]
|
|
|
|
).distinct():
|
2021-11-18 04:22:00 +00:00
|
|
|
data["user"] = admin.display_name
|
|
|
|
send_email.delay(admin.email, *format_email("moderation_report", data))
|
|
|
|
|
|
|
|
|
2021-03-21 19:06:20 +00:00
|
|
|
def format_email(email_name, data):
|
2021-04-26 16:15:42 +00:00
|
|
|
"""render the email templates"""
|
2021-09-18 18:33:43 +00:00
|
|
|
subject = get_template(f"email/{email_name}/subject.html").render(data).strip()
|
2021-03-21 16:20:37 +00:00
|
|
|
html_content = (
|
2021-09-18 18:33:43 +00:00
|
|
|
get_template(f"email/{email_name}/html_content.html").render(data).strip()
|
2021-03-21 16:20:37 +00:00
|
|
|
)
|
|
|
|
text_content = (
|
2021-09-18 18:33:43 +00:00
|
|
|
get_template(f"email/{email_name}/text_content.html").render(data).strip()
|
2021-03-21 16:20:37 +00:00
|
|
|
)
|
2021-03-21 19:06:20 +00:00
|
|
|
return (subject, html_content, text_content)
|
2021-03-21 15:54:57 +00:00
|
|
|
|
2021-03-21 19:06:20 +00:00
|
|
|
|
2022-11-13 15:59:05 +00:00
|
|
|
@app.task(queue=HIGH)
|
2021-03-21 19:06:20 +00:00
|
|
|
def send_email(recipient, subject, html_content, text_content):
|
2021-04-26 16:15:42 +00:00
|
|
|
"""use a task to send the email"""
|
2021-03-29 15:33:12 +00:00
|
|
|
email = EmailMultiAlternatives(
|
2022-01-06 01:35:42 +00:00
|
|
|
subject, text_content, settings.EMAIL_SENDER, [recipient]
|
2021-03-29 15:33:12 +00:00
|
|
|
)
|
2021-03-21 15:54:57 +00:00
|
|
|
email.attach_alternative(html_content, "text/html")
|
|
|
|
email.send()
|