Skip to content

Commit f0dcf66

Browse files
[WEB-5917] fix: generate clean plain text from HTML email template #8535
1 parent e9b0118 commit f0dcf66

12 files changed

+65
-23
lines changed

apps/api/plane/bgtasks/analytic_plot_export.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
# Django imports
1414
from django.core.mail import EmailMultiAlternatives, get_connection
1515
from django.template.loader import render_to_string
16-
from django.utils.html import strip_tags
1716
from django.db.models import Q, Case, Value, When
1817
from django.db import models
1918
from django.db.models.functions import Concat
@@ -22,6 +21,7 @@
2221
from plane.db.models import Issue
2322
from plane.license.utils.instance_value import get_email_configuration
2423
from plane.utils.analytics_plot import build_graph_plot
24+
from plane.utils.email import generate_plain_text_from_html
2525
from plane.utils.exception_logger import log_exception
2626
from plane.utils.issue_filters import issue_filters
2727
from plane.utils.csv_utils import sanitize_csv_row
@@ -53,7 +53,7 @@ def send_export_email(email, slug, csv_buffer, rows):
5353
"""Helper function to send export email."""
5454
subject = "Your Export is ready"
5555
html_content = render_to_string("emails/exports/analytics.html", {})
56-
text_content = strip_tags(html_content)
56+
text_content = generate_plain_text_from_html(html_content)
5757

5858
csv_buffer.seek(0)
5959

apps/api/plane/bgtasks/email_notification_task.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,12 @@
1515

1616
# Django imports
1717
from django.utils import timezone
18-
from django.utils.html import strip_tags
1918

2019
# Module imports
2120
from plane.db.models import EmailNotificationLog, Issue, User
2221
from plane.license.utils.instance_value import get_email_configuration
2322
from plane.settings.redis import redis_instance
23+
from plane.utils.email import generate_plain_text_from_html
2424
from plane.utils.exception_logger import log_exception
2525

2626

@@ -260,7 +260,7 @@ def send_email_notification(issue_id, notification_data, receiver_id, email_noti
260260
"entity_type": "issue",
261261
}
262262
html_content = render_to_string("emails/notifications/issue-updates.html", context)
263-
text_content = strip_tags(html_content)
263+
text_content = generate_plain_text_from_html(html_content)
264264

265265
try:
266266
connection = get_connection(

apps/api/plane/bgtasks/forgot_password_task.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@
1212
# Third party imports
1313
from django.core.mail import EmailMultiAlternatives, get_connection
1414
from django.template.loader import render_to_string
15-
from django.utils.html import strip_tags
1615

1716
# Module imports
1817
from plane.license.utils.instance_value import get_email_configuration
18+
from plane.utils.email import generate_plain_text_from_html
1919
from plane.utils.exception_logger import log_exception
2020

2121

@@ -45,7 +45,7 @@ def forgot_password(first_name, email, uidb64, token, current_site):
4545

4646
html_content = render_to_string("emails/auth/forgot_password.html", context)
4747

48-
text_content = strip_tags(html_content)
48+
text_content = generate_plain_text_from_html(html_content)
4949

5050
connection = get_connection(
5151
host=EMAIL_HOST,

apps/api/plane/bgtasks/magic_link_code_task.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@
1212
# Third party imports
1313
from django.core.mail import EmailMultiAlternatives, get_connection
1414
from django.template.loader import render_to_string
15-
from django.utils.html import strip_tags
1615

1716
# Module imports
1817
from plane.license.utils.instance_value import get_email_configuration
18+
from plane.utils.email import generate_plain_text_from_html
1919
from plane.utils.exception_logger import log_exception
2020

2121

@@ -37,7 +37,7 @@ def magic_link(email, key, token):
3737
context = {"code": token, "email": email}
3838

3939
html_content = render_to_string("emails/auth/magic_signin.html", context)
40-
text_content = strip_tags(html_content)
40+
text_content = generate_plain_text_from_html(html_content)
4141

4242
connection = get_connection(
4343
host=EMAIL_HOST,

apps/api/plane/bgtasks/project_add_user_email_task.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@
1111
# Third party imports
1212
from django.core.mail import EmailMultiAlternatives, get_connection
1313
from django.template.loader import render_to_string
14-
from django.utils.html import strip_tags
1514

1615

1716
# Module imports
1817
from plane.license.utils.instance_value import get_email_configuration
18+
from plane.utils.email import generate_plain_text_from_html
1919
from plane.utils.exception_logger import log_exception
2020
from plane.db.models import ProjectMember
2121
from plane.db.models import User
@@ -59,7 +59,7 @@ def project_add_user_email(current_site, project_member_id, invitor_id):
5959

6060
# Render the email template
6161
html_content = render_to_string("emails/notifications/project_addition.html", context)
62-
text_content = strip_tags(html_content)
62+
text_content = generate_plain_text_from_html(html_content)
6363
# Initialize the connection
6464
connection = get_connection(
6565
host=EMAIL_HOST,

apps/api/plane/bgtasks/project_invitation_task.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,11 @@
1212
# Third party imports
1313
from django.core.mail import EmailMultiAlternatives, get_connection
1414
from django.template.loader import render_to_string
15-
from django.utils.html import strip_tags
1615

1716
# Module imports
1817
from plane.db.models import Project, ProjectMemberInvite, User
1918
from plane.license.utils.instance_value import get_email_configuration
19+
from plane.utils.email import generate_plain_text_from_html
2020
from plane.utils.exception_logger import log_exception
2121

2222

@@ -41,7 +41,7 @@ def project_invitation(email, project_id, token, current_site, invitor):
4141

4242
html_content = render_to_string("emails/invitations/project_invitation.html", context)
4343

44-
text_content = strip_tags(html_content)
44+
text_content = generate_plain_text_from_html(html_content)
4545

4646
project_member_invite.message = text_content
4747
project_member_invite.save()

apps/api/plane/bgtasks/user_activation_email_task.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@
88
# Django imports
99
from django.core.mail import EmailMultiAlternatives, get_connection
1010
from django.template.loader import render_to_string
11-
from django.utils.html import strip_tags
1211

1312
# Third party imports
1413
from celery import shared_task
1514

1615
# Module imports
1716
from plane.db.models import User
1817
from plane.license.utils.instance_value import get_email_configuration
18+
from plane.utils.email import generate_plain_text_from_html
1919
from plane.utils.exception_logger import log_exception
2020

2121

@@ -31,7 +31,7 @@ def user_activation_email(current_site, user_id):
3131
# Send email to user
3232
html_content = render_to_string("emails/user/user_activation.html", context)
3333

34-
text_content = strip_tags(html_content)
34+
text_content = generate_plain_text_from_html(html_content)
3535
# Configure email connection from the database
3636
(
3737
EMAIL_HOST,

apps/api/plane/bgtasks/user_deactivation_email_task.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@
88
# Django imports
99
from django.core.mail import EmailMultiAlternatives, get_connection
1010
from django.template.loader import render_to_string
11-
from django.utils.html import strip_tags
1211

1312
# Third party imports
1413
from celery import shared_task
1514

1615
# Module imports
1716
from plane.db.models import User
1817
from plane.license.utils.instance_value import get_email_configuration
18+
from plane.utils.email import generate_plain_text_from_html
1919
from plane.utils.exception_logger import log_exception
2020

2121

@@ -31,7 +31,7 @@ def user_deactivation_email(current_site, user_id):
3131
# Send email to user
3232
html_content = render_to_string("emails/user/user_deactivation.html", context)
3333

34-
text_content = strip_tags(html_content)
34+
text_content = generate_plain_text_from_html(html_content)
3535
# Configure email connection from the database
3636
(
3737
EMAIL_HOST,

apps/api/plane/bgtasks/user_email_update_task.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@
1111
# Django imports
1212
from django.core.mail import EmailMultiAlternatives, get_connection
1313
from django.template.loader import render_to_string
14-
from django.utils.html import strip_tags
1514

1615
# Module imports
1716
from plane.license.utils.instance_value import get_email_configuration
17+
from plane.utils.email import generate_plain_text_from_html
1818
from plane.utils.exception_logger import log_exception
1919

2020

@@ -36,7 +36,7 @@ def send_email_update_magic_code(email, token):
3636
context = {"code": token, "email": email}
3737

3838
html_content = render_to_string("emails/auth/magic_signin.html", context)
39-
text_content = strip_tags(html_content)
39+
text_content = generate_plain_text_from_html(html_content)
4040

4141
connection = get_connection(
4242
host=EMAIL_HOST,
@@ -87,7 +87,7 @@ def send_email_update_confirmation(email):
8787
context = {"email": email}
8888

8989
html_content = render_to_string("emails/user/email_updated.html", context)
90-
text_content = strip_tags(html_content)
90+
text_content = generate_plain_text_from_html(html_content)
9191

9292
connection = get_connection(
9393
host=EMAIL_HOST,

apps/api/plane/bgtasks/webhook_task.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
from django.core.mail import EmailMultiAlternatives, get_connection
2121
from django.core.serializers.json import DjangoJSONEncoder
2222
from django.template.loader import render_to_string
23-
from django.utils.html import strip_tags
2423
from django.core.exceptions import ObjectDoesNotExist
2524

2625
# Module imports
@@ -51,6 +50,7 @@
5150
IssueAssignee,
5251
)
5352
from plane.license.utils.instance_value import get_email_configuration
53+
from plane.utils.email import generate_plain_text_from_html
5454
from plane.utils.exception_logger import log_exception
5555
from plane.settings.mongo import MongoConnection
5656

@@ -222,7 +222,7 @@ def send_webhook_deactivation_email(webhook_id: str, receiver_id: str, current_s
222222
"webhook_url": f"{current_site}/{str(webhook.workspace.slug)}/settings/webhooks/{str(webhook.id)}",
223223
}
224224
html_content = render_to_string("emails/notifications/webhook-deactivate.html", context)
225-
text_content = strip_tags(html_content)
225+
text_content = generate_plain_text_from_html(html_content)
226226

227227
# Set the email connection
228228
connection = get_connection(

0 commit comments

Comments
 (0)