snapshot of https://github.com/zulip/zulip.git @ 48c69911c7dd4e03b20552eb3bd77ad8151c1357 (2026-09-15)
Some checks failed
Code scanning / CodeQL (push) Failing after 15s
Zulip production suite / Ubuntu 22.04 production build (push) Failing after 26s
Zulip production suite / Debian 12 production install with custom db name and user (push) Has been skipped
Zulip production suite / Ubuntu 22.04 production install and PostgreSQL upgrade with pgroonga (push) Has been skipped
Zulip production suite / Ubuntu 24.04 production install (push) Has been skipped
Zulip production suite / Ubuntu 26.04 production install (push) Has been skipped
Zulip production suite / Debian 13 production install (push) Has been skipped
Zulip production suite / 7.0 Version Upgrade (push) Has been skipped
Zulip production suite / 8.0 Version Upgrade (push) Has been skipped
Zulip production suite / 6.0 Version Upgrade (push) Has been skipped
Zulip production suite / 10.0 Version Upgrade (push) Has been skipped
Zulip production suite / 9.0 Version Upgrade (push) Has been skipped
Zulip production suite / 12.0 Version Upgrade (push) Has been skipped
Zulip production suite / 11.0 Version Upgrade (push) Has been skipped
GitHub Actions Security Analysis with zizmor / zizmor (push) Failing after 3s
Zulip CI / Debian 12 (Python 3.11, backend + documentation) (push) Failing after 26s
Zulip CI / Ubuntu 22.04 (Python 3.10, backend + frontend) (push) Failing after 3s
Zulip CI / Ubuntu 24.04 (Python 3.12, backend) (push) Failing after 25s
Zulip CI / Ubuntu 26.04 (Python 3.14, backend) (push) Failing after 25s
Zulip CI / Debian 13 (Python 3.13, backend) (push) Failing after 28s
Zulip production suite / Required jobs (push) Has been cancelled
Zulip CI / Required jobs (push) Has been cancelled
API Documentation Update Check / check-feature-level-updated (push) Has been cancelled
API Documentation Update Check / notify-if-api-docs-changed (push) Has been cancelled

This commit is contained in:
upstream-mirror
2026-09-15 15:05:30 +05:00
commit 64898b2c79
8999 changed files with 1757358 additions and 0 deletions

1
templates/zerver/emails/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
custom

View File

@@ -0,0 +1,54 @@
{% extends "zerver/emails/email_base_default.html" %}
{% block illustration %}
<img src="{{ email_images_base_url }}/email_logo.png" alt=""/>
{% endblock %}
{% block content %}
{% if realm_creation %}
<p>
{% trans %}Congratulations, you have created a new Zulip
organization: <b>{{ realm_name }}</b>.{% endtrans %}
</p>
{% else %}
<p>{{ _('Welcome to Zulip!') }}</p>
<p>
{% trans %}You've joined the Zulip organization <b>{{ realm_name }}</b>.
{% endtrans %}
</p>
{% endif %}
<p>
{% trans apps_page_link="https://zulip.com/apps/" %}You will use the following info to log into the Zulip web, <a href="{{ apps_page_link }}">mobile and desktop</a> apps:{% endtrans %}
</p>
<ul>
<li>{% trans organization_url=macros.link_tag(realm_url) %}Organization URL: {{ organization_url }}{% endtrans %}<br /></li>
{% if ldap %}
{% if ldap_username %}
<li>{% trans %}Your username: {{ ldap_username }}{% endtrans %}<br /></li>
{% else %}
<li>{{ _('Use your LDAP account to log in') }}<br /></li>
{% endif %}
{% else %}
<li>{% trans email=macros.email_tag(email) %}Your account email: {{ email }}{% endtrans %}<br /></li>
{% endif %}
</ul>
<p>
<a class="button" href="{{ realm_url }}">{{ _('Go to organization') }}</a>
</p>
<p>
{% trans %}If you are new to Zulip, check out our <a href="{{ getting_user_started_link }}">getting started guide</a>!{% endtrans %}
{% if is_realm_admin %}
{% trans %}We also have a guide for <a href="{{ getting_organization_started_link }}">moving your organization to Zulip</a>.{% endtrans %}
{% endif %}
</p>
<p>
{% if corporate_enabled %}
{% trans %}Questions? <a href="mailto:{{ support_email }}">Contact us</a> — we'd love to help!{% endtrans %}
{% else %}
{{macros.contact_us_self_hosted(support_email)}}
{% endif %}
</p>
{% endblock %}

View File

@@ -0,0 +1,9 @@
{% if realm_creation %}
{% trans -%}
{{ realm_name }} on Zulip: Your new organization details
{%- endtrans %}
{% else %}
{% trans -%}
{{ realm_name }} on Zulip: Your new account details
{%- endtrans %}
{% endif %}

View File

@@ -0,0 +1,35 @@
{{ _('Welcome to Zulip!') }}
{% if realm_creation %}
{% trans %}Congratulations, you have created a new Zulip organization: {{ realm_name }}.{% endtrans %}
{% else %}
{% trans %}You've joined the Zulip organization {{ realm_name }}.{% endtrans %}
{% endif %}
{% trans apps_page_link="https://zulip.com/apps/" %}You will use the following info to log into the Zulip web, mobile and desktop apps ({{ apps_page_link}}):{% endtrans %}
* {% trans organization_url=realm_url %}Organization URL: {{ organization_url }}{% endtrans %}
{% if ldap %}
{% if ldap_username %}
* {% trans %}Your username: {{ ldap_username }}{% endtrans %}
{% else %}
* {{ _('Use your LDAP account to log in') }}
{% endif %}
{% else %}
* {% trans %}Your account email: {{ email }}{% endtrans %}
{% endif %}
{% trans %}If you are new to Zulip, check out our getting started guide ({{ getting_user_started_link }})!{% endtrans %}
{% if is_realm_admin %}
{% trans %} We also have a guide for moving your organization to Zulip ({{ getting_organization_started_link }}).{% endtrans %}
{% endif %}
{% if corporate_enabled %}
{% trans %}Questions? Contact us at {{ support_email }} — we'd love to help!{% endtrans %}
{% else %}
{% trans %}If you have any questions, please contact this Zulip server's administrators at {{ support_email }}.{% endtrans %}
{% endif %}

View File

@@ -0,0 +1,14 @@
{% extends "zerver/emails/email_base_default.html" %}
{% block illustration %}
<img src="{{ email_images_base_url }}/email_logo.png" alt=""/>
{% endblock %}
{% block content %}
<p>{% trans %}Hi,{% endtrans %}</p>
<p>{% trans realm_url=macros.link_tag(realm_url), new_email=macros.email_tag(new_email) %}We received a request to add the email address {{ new_email }} to your Zulip demo organization account on {{ realm_url }}. To confirm this update and set a password for this account, please click below:{% endtrans %}
<a class="button" href="{{ activate_url }}">{{_('Confirm and set password') }}</a></p>
<p>{% trans support_email=macros.email_tag(support_email) %}If you did not request this change, please contact us immediately at {{ support_email }}.{% endtrans %}</p>
{% endblock %}

View File

@@ -0,0 +1 @@
{{ _("Verify your email address for your Zulip demo organization") }}

View File

@@ -0,0 +1,15 @@
{% trans -%}
Hi,
{%- endtrans %}
{% trans -%}
We received a request to add the email address {{ new_email }} to your Zulip demo organization account on {{ realm_url }}. To confirm this update and set a password for this account, please click below:
{%- endtrans %}
{{ activate_url }}
{% trans -%}
If you did not request this change, please contact us immediately at <{{ support_email }}>.
{%- endtrans %}

View File

@@ -0,0 +1,14 @@
{% extends "zerver/emails/email_base_default.html" %}
{% block illustration %}
<img src="{{ email_images_base_url }}/email_logo.png" alt=""/>
{% endblock %}
{% block content %}
<p>{% trans %}Hi,{% endtrans %}</p>
<p>{% trans realm_url=macros.link_tag(realm_url), old_email=macros.email_tag(old_email), new_email=macros.email_tag(new_email) %}We received a request to change the email address for the Zulip account on {{ realm_url }} from {{ old_email }} to {{ new_email }}. To confirm this change, please click below:{% endtrans %}
<a class="button" href="{{ activate_url }}">{{_('Confirm email change') }}</a></p>
<p>{% trans support_email=macros.email_tag(support_email) %}If you did not request this change, please contact us immediately at {{ support_email }}.{% endtrans %}</p>
{% endblock %}

View File

@@ -0,0 +1 @@
{% trans %}Verify your new email address for {{ organization_host }}{% endtrans %}

View File

@@ -0,0 +1,15 @@
{% trans -%}
Hi,
{%- endtrans %}
{% trans -%}
We received a request to change the email address for the Zulip account on {{ realm_url }} from {{ old_email }} to {{ new_email }}. To confirm this change, please click below:
{%- endtrans %}
{{ activate_url }}
{% trans -%}
If you did not request this change, please contact us immediately at <{{ support_email }}>.
{%- endtrans %}

View File

@@ -0,0 +1,36 @@
{% extends "zerver/emails/email_base_default.html" %}
{% block illustration %}
<img src="{{ email_images_base_url }}/registration_confirmation.png" alt=""/>
{% endblock %}
{% block content %}
{% if create_realm %}
<p>
{{ _("You have requested a new Zulip organization:") }}
</p>
<ul>
<li>{% trans %}Organization URL: {{ organization_url }}{% endtrans %}</li>
<li>{% trans %}Organization type: {{ organization_type }}{% endtrans %}</li>
</ul>
{% else %}
<p>
{{ _("You recently signed up for Zulip. Awesome!") }}
</p>
{% endif %}
<p>
{% if create_realm %}
{{ _("Click the button below to create the organization and register your account. You'll be able to update the information above if you like.") }}
{% else %}
{{ _("Click the button below to complete registration.") }}
{% endif %}
<a class="button" href="{{ activate_url }}">{{ _("Complete registration") }}</a>
</p>
<p>
{% if corporate_enabled %}
{{macros.contact_us_zulip_cloud(support_email)}}
{% else %}
{{macros.contact_us_self_hosted(support_email)}}
{% endif %}
</p>
{% endblock %}

View File

@@ -0,0 +1,5 @@
{% if create_realm %}
{{ _("Create your Zulip organization") }}
{% else %}
{{ _("Activate your Zulip account") }}
{% endif %}

View File

@@ -0,0 +1,22 @@
{% if create_realm %}
{{ _("You have requested a new Zulip organization:") }}
* {% trans %}Organization URL: {{ organization_url }}{% endtrans %}
* {% trans %}Organization type: {{ organization_type }}{% endtrans %}
{% else %}
{{ _("You recently signed up for Zulip. Awesome!") }}
{% endif %}
{% if create_realm %}
{{ _("Click the button below to create the organization and register your account. You'll be able to update the information above if you like.") }}
{% else %}
{{ _("Click the link below to complete registration.") }}
{% endif %}
<{{ activate_url }}>
{% if corporate_enabled %}
{% trans %}Do you have questions or feedback to share? Contact us at {{ support_email }} — we'd love to help!{% endtrans %}
{% else %}
{% trans %}If you have any questions, please contact this Zulip server's administrators at {{ support_email }}.{% endtrans %}
{% endif %}

View File

@@ -0,0 +1,25 @@
{% extends "zerver/emails/email_base_marketing.html" %}
{% block illustration %}
<img src="{{ email_images_base_url }}/email_logo.png" alt=""/>
{% endblock %}
{% block content %}
{# Note: The below code is substituted by `manage.py send_custom_email` #}
{{ rendered_input }}
{% endblock %}
{% block manage_preferences %}
{% if remote_server_email %}
{% if released_version %}
<p>You are receiving this email because you opted into release notifications.</p>
{% else %}
<p>You are receiving this email to update you about important changes to Zulip's Terms of Service.</p>
<a href="{{ unsubscribe_link }}">Unsubscribe</a>
{% endif %}
{% elif unsubscribe_link %}
<p><a href="{{ realm_url }}/#settings/notifications">{{ _("Manage email preferences") }}</a> | <a href="{{ unsubscribe_link }}">{{ _("Unsubscribe from marketing emails") }}</a></p>
{% endif %}
{% endblock %}

View File

@@ -0,0 +1,19 @@
---
{% if remote_server_email %}
{% if released_version %}
You are receiving this email because you opted into release notifications.
{% else %}
You are receiving this email to update you about important changes to Zulip's Terms of Service.
Unsubscribe: {{ unsubscribe_link }}
{% endif %}
{% elif unsubscribe_link %}
{{ _("Manage email preferences") }}:
{{ realm_url }}/#settings/notifications
{{ _("Unsubscribe from marketing emails") }}:
{{ unsubscribe_link }}
{% endif %}

View File

@@ -0,0 +1,20 @@
{% extends "zerver/emails/email_base_default.html" %}
{% block illustration %}
<img src="{{ email_images_base_url }}/email_logo.png" alt=""/>
{% endblock %}
{% block content %}
{% trans %}
Your Zulip account on <a href="{{ realm_url }}">{{ realm_url }}</a> has been deactivated, and you will no longer be able to log in.
{% endtrans %}
<br/><br/>
{% if deactivation_notification_comment %}
{{ _("The administrators provided the following comment:") }}
<pre class="deactivated-user-text">{{ deactivation_notification_comment }}</pre>
{% endif %}
{% endblock %}

View File

@@ -0,0 +1 @@
{% trans %}Notification of account deactivation on {{ realm_name }}{% endtrans %}

View File

@@ -0,0 +1,9 @@
{% trans %}
Your Zulip account on {{ realm_url }} has been deactivated, and you will no longer be able to log in.
{% endtrans %}
{% if deactivation_notification_comment %}
{{ _("The administrators provided the following comment:") }}
{{ deactivation_notification_comment }}
{% endif %}

View File

@@ -0,0 +1,23 @@
{% extends "zerver/emails/email_base_messages.html" %}
{% block content %}
<b>Subject</b>: Demo request for {{ organization_name }}
<br />
<b>Full name</b>: {{ full_name }}
<br />
<b>Email</b>: {{ email }}
<br />
<b>Role</b>: {{ role }}
<br />
<b>Organization type</b>: {{ organization_type }}
<br />
<b>Organization website</b>: {{ organization_website }}
<br />
<b>Expected user count</b>: {{ expected_user_count }}
<br />
<b>Cloud or self-hosting?</b>: {{ type_of_hosting }}
<br />
<b>Message</b>: {{ message }}
<br />
{% endblock %}

View File

@@ -0,0 +1 @@
Demo request for {{organization_name}}

View File

@@ -0,0 +1,17 @@
Subject: Demo request for {{ organization_name }}
Full name: {{ full_name }}
Email: {{ email }}
Role: {{ role }}
Organization type: {{ organization_type }}
Organization website: {{ organization_website }}
Expected user count: {{ expected_user_count }}
Cloud or self-hosting?: {{ type_of_hosting }}
Message: {{ message }}

View File

@@ -0,0 +1,58 @@
{% extends "zerver/emails/email_base_messages.html" %}
{% block content %}
{% if show_message_content %}
{% if hot_conversations %}
{% for convo in hot_conversations %}
<div class='messages'>
{% with recipient_block=convo.first_few_messages %}
<div class='hot_convo_recipient_block'>
<div class='hot_convo_recipient_header'>{{ recipient_block.header.html|safe }}</div>
<div class='hot_convo_message_content'>
{% for sender_block in recipient_block.senders %}
{% for message_block in sender_block.content %}
<div class='hot_convo_message_content_block'>
{{ message_block.html|safe }}
</div>
{% endfor %}
{% endfor %}
</div>
</div>
{% if convo.count > 0 %}<p class="digest_paragraph">+ {{ convo.count }} more message{{ convo.count|pluralize }} by {{ convo.participants|display_list(4) }}.</p>{% endif %}
{% endwith %}
</div>
{% endfor %}
{% endif %}
{% if new_channels.html %}
<p class="digest_paragraph"><b>{% trans %}New channels{% endtrans %}</b></p>
<p class="digest_paragraph">{{ new_channels.html|display_list(1000)|safe }}.</p>
{% endif %}
{% else %}
<p class="digest_paragraph">
{% if new_messages_count > 0 and new_streams_count > 0 %}
{% trans %}You have {{ new_messages_count }} new messages, and there are {{ new_streams_count }} new channels in <a href="{{ realm_url }}">{{ realm_name }}</a>.{% endtrans %}
{% elif new_messages_count > 0 and new_streams_count == 0 %}
{% trans %}You have {{ new_messages_count }} new messages in <a href="{{ realm_url }}">{{ realm_name }}</a>.{% endtrans %}
{% else %}
{% trans %}There are {{ new_streams_count }} new channels in <a href="{{ realm_url }}">{{ realm_name }}</a>.{% endtrans %}
{% endif %}
</p>
<p class="digest_paragraph">
{% if message_content_disabled_by_realm %}
{% trans help_url=realm_url + "/help/hide-message-content-in-emails" %}This email does not include message content because your organization <a class="content_disabled_help_link" href="{{ help_url }}">hides message content</a> in email notifications.{% endtrans %}
{% elif message_content_disabled_by_user %}
{% trans help_url=realm_url + "/help/email-notifications#hide-message-content" %}This email does not include message content because you have chosen to <a class="content_disabled_help_link" href="{{ help_url }}">hide message content</a> in email notifications.{% endtrans %}
{% endif %}
</p>
{% endif %}
<p class="digest_paragraph">{% trans %}<a href="{{ realm_url }}">Log in</a> to Zulip to catch up.{% endtrans %}</p>
{% endblock %}
{% block manage_preferences %}
<p class="digest_paragraph">
<a href="{{ realm_url }}/#settings/notifications">{% trans %}Manage email preferences{% endtrans %}</a> |
<a href="{{ unsubscribe_link }}">{% trans %}Unsubscribe from digest emails{% endtrans %}</a>
</p>
{% endblock %}

View File

@@ -0,0 +1 @@
{% trans %}Zulip digest for {{ realm_name }}{% endtrans %}

View File

@@ -0,0 +1,41 @@
{% if show_message_content %}
{% if hot_conversations %}
{% for convo in hot_conversations %}{% with recipient_block=convo.first_few_messages %}{{ recipient_block.header.plain }}
{% for sender_block in recipient_block.senders %}
{% for message_block in sender_block.content %}{{ message_block.plain }}
{% endfor %}{% endfor %}
{% if convo.count > 0 %}+ {{ convo.count }} more message{{ convo.count|pluralize }} by {{ convo.participants|display_list(4) }}.{% endif %}{% endwith %}{% endfor %}{% endif %}
{% if new_channels.plain %}** {% trans %}New channels{% endtrans %} **
{{ new_channels.plain|display_list(1000) }}.
{% endif %}
{% else %}
{% if new_messages_count > 0 and new_streams_count > 0 %}
{% trans %}You have {{ new_messages_count }} new messages, and there are {{ new_streams_count }} new channels in {{ realm_name }}.{% endtrans %}
{% elif new_messages_count > 0 and new_streams_count == 0 %}
{% trans %}You have {{ new_messages_count }} new messages in {{ realm_name }}.{% endtrans %}
{% else %}
{% trans %}There are {{ new_streams_count }} new channels in {{ realm_name }}.{% endtrans %}
{% endif %}
{% if message_content_disabled_by_realm %}
{% trans hide_content_url=realm_url + "/help/hide-message-content-in-emails" %}
This email does not include message content because your organization hides message content in email notifications. See {{ hide_content_url }} for more details.
{% endtrans %}
{% elif message_content_disabled_by_user %}
{% trans help_url=realm_url + "/help/email-notifications#hide-message-content" %}
This email does not include message content because you have chosen to hide message content in email notifications. See {{ help_url }} for more details.
{% endtrans %}
{% endif %}
{% endif %}
{% trans organization_url=realm_url %}Log in to Zulip to catch up: {{ organization_url }}.{% endtrans %}
--
{% trans %}Manage email preferences:{% endtrans %}
{{ realm_url }}/#settings/notifications
{% trans %}Unsubscribe from digest emails:{% endtrans %}
{{ unsubscribe_link }}

View File

@@ -0,0 +1,358 @@
/* stylelint-disable color-no-hex, media-feature-range-notation */
/* Hex color codes are used instead of our standard of hsl colors,
because hex color codes are rendered by all email clients
consistently; HSL colors aren't supported by Hotmail. */
.illustration img,
img.bottom-illustration {
border: none;
-ms-interpolation-mode: bicubic;
max-width: 100%;
vertical-align: bottom;
}
body.default-email-font-settings {
font-family: sans-serif;
font-size: 14px;
line-height: 1.4;
margin: 0;
padding: 0;
-ms-text-size-adjust: 100%;
-webkit-text-size-adjust: 100%;
}
/* These .layout tables are used to create sections within the email;
see for example: https://templates.mailchimp.com/development/html/
*/
table.layout {
border-collapse: separate;
mso-table-lspace: 0;
mso-table-rspace: 0;
width: 100%;
}
table.layout > tbody > tr > td {
font-family: sans-serif;
font-size: 14px;
vertical-align: top;
}
/* After email clients strip the actual body tag out of the email, the
.body element will be the equivalent of our outer element. */
.body {
width: 100%;
background-color: #f5f9f8;
}
.container {
display: block;
margin: 0 auto !important;
max-width: 500px;
padding: 10px;
}
/* This class is used to ensure that the images' width
does not exceed the actual email layout width. */
img.responsive-width {
max-width: 100%;
}
/* Our newsletters/marketing emails use a wider content width, to
support more complex content with text to the side of images. */
.container.wide-container {
max-width: 700px;
}
/* Mystery: .container contains .content, but the max-widths for this
element are 80px wider than those for .container. */
.content {
box-sizing: border-box;
display: block;
margin: 20px auto 0;
max-width: 580px;
padding: 10px;
}
.content.wide-content {
max-width: 780px;
}
/*
The main content region for the email; excludes the preheader and footer.
*/
.main {
background-color: #fff;
border-radius: 3px;
width: 100%;
}
/* Right/left padding to keep content away from edges of email client winder. */
.wrapper {
box-sizing: border-box;
padding: 0 20px 20px;
}
/* Footer section, containing unsubscribe links and the like. */
.footer {
clear: both;
padding-top: 10px;
text-align: center;
width: 100%;
margin-top: 20px;
}
/*
Apple mail and other popular email clients will convert the physical
address into a link, so we set link color on it.
*/
.footer-content-block,
.physical-address {
color: #5f5ec7;
font-size: 12px;
text-align: center;
}
/*
Styles for the content section of Zulip newsletters and other custom emails.
*/
.custom-email-content h1 {
font-size: 1.6em;
margin-top: 25px;
margin-bottom: 5px;
}
.content ul,
.content ol {
/* Override excessive indentation seen in Gmail. */
padding-left: 5px;
}
.body p,
p.digest_paragraph,
.content ul,
.content ol {
font-family: sans-serif;
font-size: 14px;
font-weight: normal;
margin: 10px 0;
}
.messages p.digest_paragraph {
line-height: normal;
margin: 4px 0 0;
}
.body p li,
.content ul li,
.content ol li {
list-style-position: outside;
margin-left: 15px;
}
/* Link color styling carefully tuned to not apply to user content
inside missed-message emails. */
.body a,
.digest_paragraph a,
.sponsorship_request_link,
.support_request_link,
.email-preferences a,
.missed_message.no-content-explanation a {
color: #5f5ec7;
text-decoration: underline;
}
.body a:hover,
.digest_paragraph a:hover,
.sponsorship_request_link:hover,
.support_request_link:hover,
.email-preferences a:hover,
.missed_message.no-content-explanation a:hover {
color: #434388 !important;
}
.body .button {
display: block;
padding: 10px 0;
margin: 20px auto;
width: 200px;
color: #5f5ec7;
border: 2px solid #5f5ec7;
background-color: #fff;
border-radius: 4px;
font-size: 16px;
outline: none;
font-family: sans-serif;
text-decoration: none;
text-align: center;
text-shadow: none;
}
.body a.button:hover {
background-color: #5f5ec7;
color: #fff;
text-decoration: none;
}
/* The preheader is an invisible region that is used to control what
email clients display as the textual preview of the email's content
in inbox views. */
.preheader {
color: transparent;
display: none;
height: 0;
max-height: 0;
max-width: 0;
opacity: 0;
overflow: hidden;
mso-hide: all;
visibility: hidden;
width: 0;
}
/* Illustrations appear over the top of the boundary between the
blank space at the top of the email and the content box; for
that reason they need a high z-index. */
.illustration {
pointer-events: none;
cursor: default !important;
z-index: 100;
}
/* Styling for empty topic placeholders. */
.empty-topic-display {
font-style: italic;
}
/* CSS for digest email content. */
.messages {
width: 600px;
font-size: 12px;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
overflow-y: auto;
margin-bottom: 12px;
}
.hot_convo_recipient_block {
border: 1px solid #000;
}
.hot_convo_recipient_header {
background-color: #9ec9ff;
border-bottom: 1px solid #000;
font-weight: bold;
padding: 2px;
}
.hot_convo_message_content {
margin-left: 1px;
margin-right: 2px;
}
.hot_convo_message_content_block {
padding-left: 6px;
font-weight: normal;
}
/* Text and link colors for missed-message emails. */
.email-preferences {
color: #666;
}
.email-preferences a {
color: #15c;
}
.content_disabled_help_link {
color: #15c;
}
/* Quoted block for text written by an organization administrator to
explain to the end user why their account got deactivated. */
.deactivated-user-text {
padding: 0 0 0 15px;
margin: 0 0 20px;
border-left: 5px solid #eee;
white-space: pre-line;
font-family: sans-serif;
font-size: 14px;
}
@media only screen and (max-width: 620px) {
table[class="body"] h1 {
font-size: 28px !important;
margin-bottom: 10px !important;
}
table[class="body"] p,
table[class="body"] ul,
table[class="body"] ol,
table[class="body"] td,
table[class="body"] span,
table[class="body"] a {
font-size: 16px !important;
}
table[class="body"] .wrapper {
padding: 0 10px 10px;
}
table[class="body"] .content {
padding: 0 !important;
}
table[class="body"] .container {
padding: 0 !important;
width: 100% !important;
}
table[class="body"] .main {
border-left-width: 0 !important;
border-radius: 0 !important;
border-right-width: 0 !important;
}
}
@media all {
/* See https://templates.mailchimp.com/development/css/client-specific-styles/;
ExternalClass is something Microsoft Outlook adds to emails. */
.ExternalClass {
width: 100%;
}
.ExternalClass,
.ExternalClass p,
.ExternalClass span,
.ExternalClass font,
.ExternalClass td,
.ExternalClass div {
line-height: 100%;
}
/* iOS converts physical addresses in emails to links automatically,
so this CSS has an effect on iOS even though we don't actually
have a link inside the .physical-address element. */
.physical-address a {
color: inherit !important;
font-family: inherit !important;
font-size: inherit !important;
font-weight: inherit !important;
line-height: inherit !important;
text-decoration: none !important;
}
}
/* Mechanism for images alongside content, mainly for use in newsletters. */
.float-right-image {
float: right;
}
/* The 450px cutoff was determined by testing in Gmail as a point
where an image looks good in either state. Logically it makes sense
since then the text still has the majority of the space in the
side-by-side view. */
@media only screen and (min-width: 450px) {
.float-right-image {
max-width: 200px;
}
}

View File

@@ -0,0 +1,53 @@
{% import 'zerver/emails/macros.html' as macros %}
{% import 'zerver/emails/email.css' as css_styles %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta name="viewport" content="width=device-width" />
<meta charset="UTF-8" />
<title>Zulip</title>
<style>{{css_styles}}</style>
</head>
<body class="default-email-font-settings">
<table border="0" cellpadding="0" cellspacing="0" class="body layout">
<tr>
<td>&nbsp;</td>
<td class="container">
<div class="content">
<a href="#" class="illustration">
{% block illustration %}{% endblock %}
</a>
<span class="preheader">
{% block preheader %}{% endblock %}
</span>
<table class="main layout">
<tr>
<td class="wrapper">
<table border="0" cellpadding="0" cellspacing="0" class="layout">
<tr>
<td>
{% block content %}{% endblock %}
</td>
</tr>
</table>
<img class="bottom-illustration" src="{{ email_images_base_url }}/footer.png" alt="{{ _('Swimming fish') }}"/>
</td>
</tr>
</table>
<div class="footer">
<table border="0" cellpadding="0" cellspacing="0" class="layout">
<tr>
<td class="footer-content-block">
<span class="physical-address">{{physical_address}}</span>
{% block manage_preferences %}{% endblock %}
</td>
</tr>
</table>
</div>
</div>
</td>
<td>&nbsp;</td>
</tr>
</table>
</body>
</html>

View File

@@ -0,0 +1,53 @@
{% import 'zerver/emails/macros.html' as macros %}
{% import 'zerver/emails/email.css' as css_styles %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta name="viewport" content="width=device-width" />
<meta charset="UTF-8" />
<title>Zulip</title>
<style>{{css_styles}}</style>
</head>
<body class="default-email-font-settings">
<table border="0" cellpadding="0" cellspacing="0" class="body layout">
<tr>
<td>&nbsp;</td>
<td class="container wide-container">
<div class="content wide-content">
<a href="#" class="illustration">
{% block illustration %}{% endblock %}
</a>
<span class="preheader">
{% block preheader %}{% endblock %}
</span>
<table class="main layout">
<tr>
<td class="wrapper">
<table border="0" cellpadding="0" cellspacing="0" class="layout">
<tr>
<td class="custom-email-content">
{% block content %}{% endblock %}
</td>
</tr>
</table>
<img src="{{ email_images_base_url }}/footer.png" alt="{{ _('Swimming fish') }}"/>
</td>
</tr>
</table>
<div class="footer">
<table border="0" cellpadding="0" cellspacing="0" class="layout">
<tr>
<td class="footer-content-block">
<span class="physical-address">{{physical_address}}</span>
{% block manage_preferences %}{% endblock %}
</td>
</tr>
</table>
</div>
</div>
</td>
<td>&nbsp;</td>
</tr>
</table>
</body>
</html>

View File

@@ -0,0 +1,30 @@
{% import 'zerver/emails/email.css' as css_styles %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Zulip</title>
<style>{{css_styles}}</style>
</head>
<body>
{% if has_preheader %}
<span style="display:none !important;
visibility:hidden;
color:transparent;
mso-hide:all;
font-size:1px;
color:hsl(0, 0%, 100%);
line-height:1px;
max-height:0px;
height:0px;
max-width:0px;
width:0px;
opacity:0;
overflow:hidden;">
{% block preheader %}{% endblock %}
</span>
{% endif %}
{% block content %}{% endblock %}
{% block manage_preferences %}{% endblock %}
</body>
</html>

View File

@@ -0,0 +1,7 @@
{% extends "zerver/emails/email_base_messages.html" %}
{% block content %}
{{ message }}
{% endblock %}

View File

@@ -0,0 +1 @@
Error processing paid customer invoice

View File

@@ -0,0 +1 @@
{{ message }}

View File

@@ -0,0 +1,41 @@
{% extends "zerver/emails/email_base_default.html" %}
{% block illustration %}
<img src="{{ email_images_base_url }}/email_logo.png" alt=""/>
{% endblock %}
{% block content %}
{% if account_found %}
<p>{{ _("Thanks for your request!") }}</p>
{% if corporate_enabled %}
<p>{% trans %}Your email address {{ email }} has accounts with the following Zulip Cloud organizations:{% endtrans %}</p>
{% else %}
<p>{% trans %}Your email address {{ email }} has accounts with the following Zulip organizations hosted by {{ external_host }}:{% endtrans %}</p>
{% endif %}
<ul>
{% for realm_data in realms %}
<li><a href="{{ realm_data.url }}">{{ realm_data.name }} ({{ realm_data.host }})</a></li>
{% endfor %}
</ul>
<p>
{% trans %}If you have trouble logging in, you can <a href="{{ help_reset_password_link }}">reset your password</a>.{% endtrans %}
</p>
{% else %}
<p>
{{ _("You have requested a list of Zulip accounts for this email address.") }}
{% if corporate_enabled %}
{{ _("Unfortunately, no Zulip Cloud accounts were found.") }}
{% else %}
{% trans%}Unfortunately, no accounts were found in Zulip organizations hosted by {{external_host}}.{% endtrans %}
{% endif %}
</p>
<p>
{% trans %}You can <a href = "{{ find_accounts_link }}" >check for accounts</a> with another email, or <a href ="{{ help_logging_in_link }}">try another way</a> to find your account.{% endtrans %}
{{ _("If you do not recognize this request, you can safely ignore this email.") }}
</p>
{% endif %}
{% endblock %}

View File

@@ -0,0 +1,5 @@
{% if account_found %}
{{ _("Your Zulip accounts") }}
{% else %}
{{ _("No Zulip accounts found") }}
{% endif %}

View File

@@ -0,0 +1,36 @@
{% if account_found %}
{{ _("Thanks for your request!") }}
{% if corporate_enabled %}
{% trans %}Your email address {{ email }} has accounts with the following Zulip Cloud organizations:{% endtrans %}
{% else %}
{% trans %}Your email address {{ email }} has accounts with the following Zulip organizations hosted by {{ external_host }}:{% endtrans %}
{% endif %}
{% for realm_data in realms %}
* {{ realm_data.name }}: {{ realm_data.url }}
{% endfor %}
{% trans %}If you have trouble logging in, you can reset your password.{% endtrans %}
{{ help_reset_password_link }}
{% else %}
{% if corporate_enabled %}
{{ _("You have requested a list of Zulip accounts for this email address.") }} {{ _("Unfortunately, no Zulip Cloud accounts were found.") }}
{% trans %}You can check for accounts with another email ({{ find_accounts_link }}), or try another way to find your account ({{ help_logging_in_link }}).{% endtrans %}
{{ _("If you do not recognize this request, you can safely ignore this email.") }}
{% else %}
{{ _("You have requested a list of Zulip accounts for this email address.") }} {% trans%}Unfortunately, no accounts were found in Zulip organizations hosted by {{external_host}}.{% endtrans %}
{% trans %}You can check for accounts with another email ({{ find_accounts_link }}), or try another way to find your account ({{ help_logging_in_link }}).{% endtrans %}
{{ _("If you do not recognize this request, you can safely ignore this email.") }}
{% endif %}
{% endif %}

View File

@@ -0,0 +1,28 @@
{% extends "zerver/emails/email_base_default.html" %}
{% block content %}
<p>Internal billing notice for {{ billing_entity }}.</p>
{% if notice_reason == "fixed_price_plan_ends_soon" %}
<p>Reminder to re-evaluate the pricing and configure a new fixed-price plan accordingly.</p>
{% elif notice_reason == "stale_audit_log_data" %}
{% if fixed_price_plan %}
<p>Unable to verify current licenses in use, but invoicing not delayed because customer has a fixed-price plan.</p>
{% else %}
<p>Unable to verify current licenses in use, which delays invoicing for this customer.</p>
{% endif %}
<b>Last data upload</b>: {{ last_audit_log_update }}
{% elif notice_reason == "locally_deleted_realm_on_paid_plan" %}
<p>Investigate why remote realm is marked as locally deleted when it's on a paid plan.</p>
{% elif notice_reason == "license_discrepancy" %}
<p>Discrepancy in licenses when upgraded to current plan.</p>
<b>Licenses paid for</b>: {{ paid_licenses }}.
<b>Reported licenses in use</b>: {{ current_licenses }}.
{% endif %}
<br /><br />
<b>Support URL</b>: <a href="{{ support_url }}">{{ support_url }}</a>
{% endblock %}

View File

@@ -0,0 +1,9 @@
{% if notice_reason == "fixed_price_plan_ends_soon" %}
Fixed-price plan for {{ billing_entity }} ends on {{ end_date }}
{% elif notice_reason == "stale_audit_log_data" %}
Stale audit log data for {{ billing_entity }}'s plan
{% elif notice_reason == "locally_deleted_realm_on_paid_plan" %}
{{ billing_entity }} on paid plan marked as locally deleted
{% elif notice_reason == "license_discrepancy" %}
Check initial licenses invoiced for {{ billing_entity }}
{% endif %}

View File

@@ -0,0 +1,24 @@
Internal billing notice for {{ billing_entity }}.
{% if notice_reason == "fixed_price_plan_ends_soon" %}
Reminder to re-evaluate the pricing and configure a new fixed-price plan accordingly.
{% elif notice_reason == "stale_audit_log_data" %}
{% if fixed_price_plan %}
Unable to verify current licenses in use, but invoicing not delayed because customer has a fixed-price plan.
Last data upload: {{ last_audit_log_update }}
{% else %}
Unable to verify current licenses in use, which delays invoicing for this customer.
Last data upload: {{ last_audit_log_update }}
{% endif %}
{% elif notice_reason == "locally_deleted_realm_on_paid_plan" %}
Investigate why remote realm is marked as locally deleted when it's on a paid plan.
{% elif notice_reason == "license_discrepancy" %}
Discrepancy in licenses when upgraded to current plan.
Licenses paid for: {{ paid_licenses }}.
Reported licenses in use: {{ current_licenses }}.
{% endif %}
Support URL: {{ support_url }}

View File

@@ -0,0 +1,25 @@
{% extends "zerver/emails/email_base_default.html" %}
{% block illustration %}
<img src="{{ email_images_base_url }}/registration_confirmation.png" alt=""/>
{% endblock %}
{% block content %}
<p>{{ _("Hi there,") }}</p>
<p>
{% trans referrer_name=macros.referrer_email_tag(referrer_email, referrer_full_name) %}{{ referrer_name }} wants you to join them on Zulip &mdash; the team communication tool designed for productivity.{% endtrans %}
</p>
<p>
{{ _("To get started, click the button below.") }}
<a class="button" href="{{ activate_url }}">{{ _("Complete registration") }}</a>
</p>
<p>
{% if corporate_enabled %}
{{macros.contact_us_zulip_cloud(support_email)}}
{% else %}
{{macros.contact_us_self_hosted(support_email)}}
{% endif %}
</p>
{% endblock %}

View File

@@ -0,0 +1 @@
{% trans %}{{referrer_full_name}} has invited you to join {{ referrer_realm_name }}{% endtrans %}

View File

@@ -0,0 +1,12 @@
{{ _("Hi there,") }}
{% trans %}{{ referrer_full_name }} ({{ referrer_email }}) wants you to join them on Zulip -- the team communication tool designed for productivity.{% endtrans %}
{{ _("To get started, click the link below.") }}
<{{ activate_url }}>
{% if corporate_enabled %}
{% trans %}Do you have questions or feedback to share? Contact us at {{ support_email }} — we'd love to help!{% endtrans %}
{% else %}
{% trans %}If you have any questions, please contact this Zulip server's administrators at {{ support_email }}.{% endtrans %}
{% endif %}

View File

@@ -0,0 +1,27 @@
{% extends "zerver/emails/email_base_default.html" %}
{% block illustration %}
<img src="{{ email_images_base_url }}/invitation_reminder.png" alt=""/>
{% endblock %}
{% block content %}
<p>{{ _("Hi again,") }}</p>
<p>{% trans referrer_name=macros.referrer_email_tag(referrer_email, referrer_name) %}This is a friendly reminder that {{ referrer_name }} wants you to join them on Zulip &mdash; the team communication tool designed for productivity.{% endtrans %}</p>
<p>
{{ _("To get started, click the button below.") }}
<a class="button" href="{{ activate_url }}">{{ _("Complete registration") }}</a>
</p>
<p>
{{ _("This is the last reminder you'll receive for this invitation.") }}
</p>
<p>
{% trans referrer_name=macros.email_tag(referrer_email, referrer_name) %}
This invitation expires in two days. If the invitation expires,
you'll need to ask {{ referrer_name }} for another one.
{% endtrans %}
</p>
{% endblock %}

View File

@@ -0,0 +1 @@
{% trans %}Reminder: Join {{referrer_name}} at {{ referrer_realm_name }}{% endtrans %}

View File

@@ -0,0 +1,10 @@
{{ _("Hi again,") }}
{% trans %}This is a friendly reminder that {{ referrer_name }} ({{ referrer_email }}) wants you to join them on Zulip -- the team communication tool designed for productivity.{% endtrans %}
{{ _("To get started, click the link below.") }}
<{{ activate_url }}>
{{ _("This is the last reminder you'll receive for this invitation.") }}
{% trans %}This invitation expires in two days. If the invitation expires, you'll need to ask {{ referrer_name }} for another one.{% endtrans %}

View File

@@ -0,0 +1,19 @@
{% macro email_tag(email, text) -%}
<a href="mailto:{{ email }}">{{ text | default(email) }}</a>
{%- endmacro %}
{% macro referrer_email_tag(referrer_email, referrer_name) -%}
<a href="mailto:{{ referrer_email }}">{{ referrer_name }} ({{ referrer_email }})</a>
{%- endmacro %}
{% macro link_tag(url, text) -%}
<a href="{{ url }}">{{ text | default(url) }}</a>
{%- endmacro %}
{% macro contact_us_self_hosted(email) -%}
{% trans %}If you have any questions, please contact this Zulip server's administrators at <a href="mailto:{{ email }}">{{ email }}</a>.{% endtrans %}
{%- endmacro %}
{% macro contact_us_zulip_cloud(email) -%}
{% trans %}Do you have questions or feedback to share? <a href="mailto:{{ email }}">Contact us</a> — we'd love to help!{% endtrans %}
{%- endmacro %}

View File

@@ -0,0 +1,58 @@
{% extends "zerver/emails/email_base_messages.html" %}
{% block content %}
{% if show_message_content %}
{% with recipient_block=messages %}
{% for sender_block in recipient_block.senders %}
<div class="missed_message">
{% for message_block in sender_block.content %}
{{ message_block.html|safe }}
{% endfor %}
</div>
{% endfor %}
{% endwith %}
{% else %}
<div class="missed_message no-content-explanation">
{% if message_content_disabled_by_realm %}
{% trans help_url=realm_url + "/help/hide-message-content-in-emails" %}This email does not include message content because your organization <a class="content_disabled_help_link" href="{{ help_url }}">hides message content</a> in email notifications.{% endtrans %}
{% elif message_content_disabled_by_user %}
{% trans help_url=realm_url + "/help/email-notifications#hide-message-content" %}This email does not include message content because you have chosen to <a class="content_disabled_help_link" href="{{ help_url }}">hide message content</a> in email notifications.{% endtrans %}
{% endif %}
</div>
{% endif %}
{% endblock %}
{% block manage_preferences %}
<div class="email-preferences">
&mdash;<br />
{% if personal_mentioned %}
{% trans %}You are receiving this because you were personally mentioned.{% endtrans %}<br />
{% elif mentioned_user_group_name %}
{% trans %}You are receiving this because @{{ mentioned_user_group_name }} was mentioned.{% endtrans %}<br />
{% elif topic_wildcard_mentioned_in_followed_topic %}
{% trans %}You are receiving this because all topic participants were mentioned in #{{ channel_name }} > {{ topic_name }}.{% endtrans %}<br />
{% elif stream_wildcard_mentioned_in_followed_topic %}
{% trans %}You are receiving this because you have wildcard mention notifications enabled for topics you follow.{% endtrans %}<br />
{% elif topic_wildcard_mentioned %}
{% trans %}You are receiving this because all topic participants were mentioned in #{{ channel_name }} > {{ topic_name }}.{% endtrans %}<br />
{% elif stream_wildcard_mentioned %}
{% trans %}You are receiving this because everyone was mentioned in #{{ channel_name }}.{% endtrans %}<br />
{% elif followed_topic_email_notify %}
{% trans %}You are receiving this because you have email notifications enabled for topics you follow.{% endtrans %}<br />
{% elif stream_email_notify %}
{% trans %}You are receiving this because you have email notifications enabled for #{{ channel_name }}.{% endtrans %}<br />
{% endif %}
{% if reply_to_zulip %}
{% trans notif_url=realm_url + "/#settings/notifications" %}Reply to this email directly, <a href="{{ narrow_url }}">view it in {{ realm_name }} Zulip</a>, or <a href="{{ notif_url }}">manage email preferences</a>.{% endtrans %}
{% elif not show_message_content %}
{% trans notif_url=realm_url + "/#settings/notifications" %}<a href="{{ narrow_url }}">View or reply in {{ realm_name }} Zulip</a>, or <a href="{{ notif_url }}">manage email preferences</a>.{% endtrans %} <br />
{% else %}
{% trans notif_url=realm_url + "/#settings/notifications" %}<a href="{{ narrow_url }}">Reply in {{ realm_name }} Zulip</a>, or <a href="{{ notif_url }}">manage email preferences</a>.{% endtrans %} <br />
<br />
{% trans url="https://zulip.readthedocs.io/en/latest/production/email-gateway.html" %}
Do not reply to this email. This Zulip server is not configured to accept incoming emails (<a href="{{ url }}">help</a>).
{% endtrans %}
{% endif %}
</div>
{% endblock %}

View File

@@ -0,0 +1,20 @@
{% if show_message_content %}
{% if group_pm %} {% trans %}Group DMs with {{ direct_message_group_display_name }}{% endtrans %}
{% elif private_message %} {% trans %}DMs with {{ sender_str }}{% endtrans %}
{% elif stream_email_notify or mention or followed_topic_email_notify %}
{#
Some email clients, like Gmail Web (as of 2022), will auto-thread
emails that share a subject and recipients, but will disregard
[Bracketed Prefixes] in the style of old-school mailing lists. We take
advantage of this to retain thread continuity in email notifications
even after a topic is resolved.
#}
{% if topic_resolved %}{% trans %}[resolved] #{{ channel_name }} > {{ topic_name }}{% endtrans %}
{% else %}#{{ channel_name }} > {{ topic_name }}
{% endif %}
{% endif %}
{% else %}
{% trans %}New messages{% endtrans %}
{% endif %}
{% if include_realm_name_in_missedmessage_emails_subject %} [{{ realm_str }}]
{% endif %}

View File

@@ -0,0 +1,62 @@
{% if show_message_content %}
{% with recipient_block=messages %}
{% for sender_block in recipient_block.senders %}
{% for message_block in sender_block.content %}
{{ message_block.plain }}
{% endfor %}
{% endfor %}
{% endwith %}
{% else %}
{% if message_content_disabled_by_realm %}
{% trans hide_content_url=realm_url + "/help/hide-message-content-in-emails" %}
This email does not include message content because your organization hides message content in email notifications. See {{ hide_content_url }} for more details.
{% endtrans %}
{% elif message_content_disabled_by_user %}
{% trans help_url=realm_url + "/help/email-notifications#hide-message-content" %}
This email does not include message content because you have chosen to hide message content in email notifications. See {{ help_url }} for more details.
{% endtrans %}
{% endif %}
{% endif %}
--
{% if personal_mentioned %}
{% trans %}You are receiving this because you were personally mentioned.{% endtrans %}
{% elif mentioned_user_group_name %}
{% trans %}You are receiving this because @{{ mentioned_user_group_name }} was mentioned.{% endtrans %}
{% elif topic_wildcard_mentioned_in_followed_topic %}
{% trans %}You are receiving this because all topic participants were mentioned in #{{ channel_name }} > {{ topic_name }}.{% endtrans %}
{% elif stream_wildcard_mentioned_in_followed_topic %}
{% trans %}You are receiving this because you have wildcard mention notifications enabled for topics you follow.{% endtrans %}
{% elif topic_wildcard_mentioned %}
{% trans %}You are receiving this because all topic participants were mentioned in #{{ channel_name }} > {{ topic_name }}.{% endtrans %}
{% elif stream_wildcard_mentioned %}
{% trans %}You are receiving this because everyone was mentioned in #{{ channel_name }}.{% endtrans %}
{% elif followed_topic_email_notify %}
{% trans %}You are receiving this because you have email notifications enabled for topics you follow.{% endtrans %}
{% elif stream_email_notify %}
{% trans %}You are receiving this because you have email notifications enabled for #{{ channel_name }}.{% endtrans %}
{% endif %}
{% if reply_to_zulip %}
{% trans %}Reply to this email directly, or view it in {{ realm_name }} Zulip:{% endtrans %}
{{ narrow_url }}
{% elif not show_message_content %}
{% trans %}View or reply in {{ realm_name }} Zulip:{% endtrans %}
{{ narrow_url }}
{% else %}
{% trans %}Reply in {{ realm_name }} Zulip:{% endtrans %}
{{ narrow_url }}
{% trans %}
Do not reply to this email. This Zulip server is not configured to accept
incoming emails. Help:
{% endtrans %}
https://zulip.readthedocs.io/en/latest/production/email-gateway.html
{% endif %}
{% trans %}Manage email preferences:{% endtrans %}
{{ realm_url }}/#settings/notifications

View File

@@ -0,0 +1,16 @@
{% extends "zerver/emails/email_base_default.html" %}
{% block illustration %}
<img src="{{ email_images_base_url }}/email_logo.png" alt=""/>
{% endblock %}
{% block content %}
<p>{{ _("Hi,") }}</p>
<p>
{% trans new_email=macros.email_tag(new_email), support_email=macros.email_tag(support_email) %}The email associated with your Zulip account was recently changed to {{ new_email }}. If you did not request this change, please contact us immediately at {{ support_email }}.{% endtrans %}
</p>
<p>
{{ _("Best,") }}<br />
{{ _("Team Zulip") }}
</p>
{% endblock %}

View File

@@ -0,0 +1 @@
{% trans %}Zulip email changed for {{ realm_name }}{% endtrans %}

View File

@@ -0,0 +1,7 @@
{{ _("Hi,") }}
{% trans %}The email associated with your Zulip account was recently changed to {{ new_email }}. If you did not request this change, please contact us immediately at <{{ support_email }}>.{% endtrans %}
{{ _("Best,") }}
{{ _("Team Zulip") }}

View File

@@ -0,0 +1,45 @@
{% extends "zerver/emails/email_base_default.html" %}
{% block preheader %}
{% trans organization_url=realm_url %}Organization: {{ organization_url }} Time: {{ login_time }} Email: {{ user_email }}{% endtrans %}
{% endblock %}
{% block illustration %}
<img src="{{ email_images_base_url }}/email_logo.png" alt=""/>
{% endblock %}
{% block content %}
<p>{{ _("We noticed a recent login for the following Zulip account.") }}</p>
<ul>
<li>
{% trans organization_link=macros.link_tag(realm_url) %}Organization: {{ organization_link }}{% endtrans %}
</li>
<li>
{% trans user_email=macros.email_tag(user_email) %}Email: {{ user_email }}{% endtrans %}
</li>
<li>
{% trans %}Time: {{ login_time }}{% endtrans %}
</li>
<li>
{% trans %}Device: {{ device_browser }} on {{ device_os }}.{% endtrans %}
</li>
<li>
{% trans %}IP address: {{ device_ip }}{% endtrans %}
</li>
</ul>
<p>{{ _("If this was you, great! There's nothing else you need to do.") }}</p>
<p>
{% trans support_email=macros.email_tag(support_email), reset_link=realm_url + "/accounts/password/reset/" %}If you do not recognize this login, or think your account may have been compromised, please <a href="{{ reset_link }}">reset your password</a> or contact us immediately at {{ support_email }}.{% endtrans %}
</p>
<p>
{{ _("Thanks,") }}<br />
{{ _("Zulip Security") }}
</p>
{% endblock %}
{% block manage_preferences %}
<p><a href="{{ realm_url }}/#settings/notifications">{{ _("Manage email preferences") }}</a> | <a href="{{ unsubscribe_link }}">{{ _("Unsubscribe from login notifications") }}</a></p>
{% endblock %}

View File

@@ -0,0 +1 @@
{% trans %}New login from {{ device_browser }} on {{ device_os }}{% endtrans %}

View File

@@ -0,0 +1,22 @@
{{ _("We noticed a recent login for the following Zulip account.") }}
{% trans organization_url=realm_url %}Organization: {{ organization_url }}{% endtrans %}
{% trans %}Email: {{ user_email }}{% endtrans %}
{% trans %}Time: {{ login_time }}{% endtrans %}
{% trans %}Device: {{ device_browser }} on {{ device_os }}.{% endtrans %}
{% trans %}IP address: {{ device_ip }}{% endtrans %}
{{ _("If this was you, great! There's nothing else you need to do.") }}
{% trans reset_link=realm_url + "/accounts/password/reset/" %}
If you do not recognize this login, or think your account may have been compromised, please reset your password at {{ reset_link }} or contact us immediately at {{ support_email }}.
{%- endtrans %}
{{ _("Thanks,") }}
{{ _("Zulip Security") }}

View File

@@ -0,0 +1,40 @@
{% extends "zerver/emails/email_base_default.html" %}
{% block illustration %}
<img src="{{ email_images_base_url }}/email_logo.png" alt=""/>
{% endblock %}
{% block content %}
<p>
{% trans %}If you've already decided to use Zulip for your organization, welcome! You can use our <a href="{{ get_organization_started }}">guide for moving to Zulip</a> to get started.{% endtrans %}
</p>
<p>
{% trans %}Otherwise, here is some advice we often hear from customers for evaluating <i>any</i> team chat product:{% endtrans %}
</p>
<ol>
<li>{% trans %}<a href="{{ invite_users }}"><b>Invite your teammates</b></a> to explore with you and share their unique perspectives.{% endtrans %}
{% trans %}Use the app itself to chat about your impressions.{% endtrans %}
</li>
<li>{% trans %}<a href="{{ trying_out_zulip}}"><b>Run a week-long trial</b></a> with your team, without using any other chat tools. This is the only way to truly experience how a new chat app will help your team communicate.{% endtrans %}
</li>
</ol>
<p>
{% trans %}Zulip is designed to <a href="{{ why_zulip }}">enable efficient communication</a>, and we hope these tips help your team experience it in action.{% endtrans %}
</p>
<p>
{% if corporate_enabled %}
{{macros.contact_us_zulip_cloud(support_email)}}
{% else %}
{{macros.contact_us_self_hosted(support_email)}}
{% endif %}
</p>
{% endblock %}
{% block manage_preferences %}
<p><a href="{{ unsubscribe_link }}">{% trans %}Unsubscribe from welcome emails for {{ realm_name }}{% endtrans %}</a></p>
{% endblock %}

View File

@@ -0,0 +1 @@
{{ _("Choosing the chat app for your team") }}

View File

@@ -0,0 +1,19 @@
{% trans %}If you've already decided to use Zulip for your organization, welcome! You can use our guide for moving to Zulip to get started.{% endtrans %} [ {{ get_organization_started }} ]
{% trans %}Otherwise, here is some advice we often hear from customers for evaluating any team chat product:{% endtrans %}
1. {% trans %}Invite your teammates to explore with you and share their unique perspectives.{% endtrans %} [ {{ invite_users }} ] {% trans %}Use the app itself to chat about your impressions.{% endtrans %}
2. {% trans %}Run a week-long trial with your team, without using any other chat tools. This is the only way to truly experience how a new chat app will help your team communicate.{% endtrans %} [ {{ trying_out_zulip }} ]
{% trans %}Zulip is designed to enable efficient communication, and we hope these tips help your team experience it in action.{% endtrans %} [ {{ why_zulip }} ]
{% if corporate_enabled %}
{% trans %}Do you have questions or feedback to share? Contact us at {{ support_email }} — we'd love to help!{% endtrans %}
{% else %}
{% trans %}If you have any questions, please contact this Zulip server's administrators at {{ support_email }}.{% endtrans %}
{% endif %}
----
{% trans %}Unsubscribe from welcome emails for {{ realm_name }}{% endtrans %}: {{ unsubscribe_link }}

View File

@@ -0,0 +1,42 @@
{% extends "zerver/emails/email_base_default.html" %}
{% block illustration %}
<img src="{{ email_images_base_url }}/email_logo.png" alt=""/>
{% endblock %}
{% block content %}
<p>{{ _("As you are getting started with Zulip, we'd love to help you discover how it can work best for your needs. Check out this guide to key Zulip features for organizations like yours!") }}</p>
{% if organization_type == "business" %}
<a class="button" href="{{ zulip_guide_link }}">{{ _("View Zulip guide for businesses") }}</a>
{% elif organization_type == "opensource" %}
<a class="button" href="{{ zulip_guide_link }}">{{ _("View Zulip guide for open-source projects") }}</a>
{% elif organization_type == "education" %}
<a class="button" href="{{ zulip_guide_link }}">{{ _("View Zulip guide for education") }}</a>
{% elif organization_type == "research" %}
<a class="button" href="{{ zulip_guide_link }}">{{ _("View Zulip guide for research") }}</a>
{% elif organization_type == "event" %}
<a class="button" href="{{ zulip_guide_link }}">{{ _("View Zulip guide for events and conferences") }}</a>
{% elif organization_type == "nonprofit" %}
<a class="button" href="{{ zulip_guide_link }}">{{ _("View Zulip guide for non-profits") }}</a>
{% elif organization_type == "community" %}
<a class="button" href="{{ zulip_guide_link }}">{{ _("View Zulip guide for communities") }}</a>
{% endif %}
<p>
{% if corporate_enabled %}
{{macros.contact_us_zulip_cloud(support_email)}}
{% else %}
{{macros.contact_us_self_hosted(support_email)}}
{% endif %}
</p>
{% endblock %}
{% block manage_preferences %}
<p><a href="{{ unsubscribe_link }}">{% trans %}Unsubscribe from welcome emails for {{ realm_name }}{% endtrans %}</a></p>
{% endblock %}

View File

@@ -0,0 +1,15 @@
{% if organization_type == "business" %}
{{ _("Zulip guide for businesses") }}
{% elif organization_type == "opensource" %}
{{ _("Zulip guide for open-source projects") }}
{% elif organization_type == "education" %}
{{ _("Zulip guide for education") }}
{% elif organization_type == "research" %}
{{ _("Zulip guide for research") }}
{% elif organization_type == "event" %}
{{ _("Zulip guide for events and conferences") }}
{% elif organization_type == "nonprofit" %}
{{ _("Zulip guide for non-profits") }}
{% elif organization_type == "community" %}
{{ _("Zulip guide for communities") }}
{% endif %}

View File

@@ -0,0 +1,28 @@
{{ _("As you are getting started with Zulip, we'd love to help you discover how it can work best for your needs. Check out this guide to key Zulip features for organizations like yours!") }}
{% if organization_type == "business" %}
{{ _("View Zulip guide for businesses") }}:
{% elif organization_type == "opensource" %}
{{ _("View Zulip guide for open-source projects") }}:
{% elif organization_type == "education" %}
{{ _("View Zulip guide for education") }}:
{% elif organization_type == "research" %}
{{ _("View Zulip guide for research") }}:
{% elif organization_type == "event" %}
{{ _("View Zulip guide for events and conferences") }}:
{% elif organization_type == "nonprofit" %}
{{ _("View Zulip guide for non-profits") }}:
{% elif organization_type == "community" %}
{{ _("View Zulip guide for communities") }}:
{% endif %}
<{{ zulip_guide_link }}>
{% if corporate_enabled %}
{% trans %}Do you have questions or feedback to share? Contact us at {{ support_email }} — we'd love to help!{% endtrans %}
{% else %}
{% trans %}If you have any questions, please contact this Zulip server's administrators at {{ support_email }}.{% endtrans %}
{% endif %}
----
{% trans %}Unsubscribe from welcome emails for {{ realm_name }}{% endtrans %}:
{{ unsubscribe_link }}

View File

@@ -0,0 +1,36 @@
{% extends "zerver/emails/email_base_default.html" %}
{% block illustration %}
<img src="{{ email_images_base_url }}/day2_1.png" alt=""/>
{% endblock %}
{% block content %}
<p>
{{ _("Here are some tips for keeping your Zulip conversations organized with topics.") }}
</p>
<p>
{{ _("In Zulip, <b>channels</b> determine who gets a message. <b>Topics</b> tell you what the message is about.")}} {{ _("Using topics, you can read Zulip one conversation at a time. You'll see each message in context, no matter how many different discussions are going on.") }}
</p>
<img class="responsive-width" src="{{ email_images_base_url }}/channels-and-topics.png" alt="{{ _('Channels and topics in the Zulip app') }}"/>
<p>
{{ _("To kick off a new conversation, just pick a channel and start a new topic. This way, the new conversation thread won't interrupt ongoing discussions. For a good topic name, think about finishing the sentence: “Hey, can we chat about…?”") }}
</p>
<img class="responsive-width" src="{{ email_images_base_url }}/day2_2.png" alt="{{ _('Examples of short topics') }}"/>
<p>
{% trans %}Don't stress about picking the perfect name for your topic. If anything is out of place, it's easy to <a href="{{ move_messages_link }}">move messages</a>, <a href="{{ rename_topics_link }}">rename topics</a>, or even <a href="{{ move_channels_link }}">move a topic to a different channel</a>.{% endtrans %}
</p>
<a class="button" href="{{ realm_url }}">{{ _("Go to Zulip") }}</a>
{% endblock %}
{% block manage_preferences %}
<p><a href="{{ unsubscribe_link }}">{% trans %}Unsubscribe from welcome emails for {{ realm_name }}{% endtrans %}</a></p>
{% endblock %}

View File

@@ -0,0 +1 @@
{{ _("Keep your conversations organized with topics") }}

View File

@@ -0,0 +1,15 @@
{{ _("Here are some tips for keeping your Zulip conversations organized with topics.") }}
{{ _("In Zulip, channels determine who gets a message. Topics tell you what the message is about.") }} {{ _("Using topics, you can read Zulip one conversation at a time. You'll see each message in context, no matter how many different discussions are going on.") }}
{{ _("To kick off a new conversation, just pick a channel and start a new topic. This way, the new conversation thread won't interrupt ongoing discussions. For a good topic name, think about finishing the sentence: “Hey, can we chat about…?”") }}
{% trans %}Don't stress about picking the perfect name for your topic. If anything is out of place, it's easy to move messages ({{ move_messages_link }}), rename topics ({{ rename_topics_link }}), or even move a topic to a different channel ({{ move_channels_link }}).{% endtrans %}
{{ _("Go to Zulip") }}:
<{{ realm_url }}>
----
{% trans %}Unsubscribe from welcome emails for {{ realm_name }}{% endtrans %}:
{{ unsubscribe_link }}

View File

@@ -0,0 +1,42 @@
{% extends "zerver/emails/email_base_default.html" %}
{% block illustration %}
<img src="{{ email_images_base_url }}/email_logo.png" alt=""/>
{% endblock %}
{% block content %}
<p>
{% trans email=macros.email_tag(email), realm_url=macros.link_tag(realm_url) %}Somebody (possibly you) requested a new password for the Zulip account {{ email }} on {{ realm_url }}.{% endtrans %}
</p>
{% if active_account_in_realm %}
<p>
{{ _('Click the button below to reset your password.') }}
<a class="button" href="{{ reset_url }}">{{ _("Reset password") }}</a>
</p>
{% else %}
<p>
{% if user_deactivated %}
{% trans organization_url=macros.link_tag(realm_url), help_link=realm_url + "/help/deactivate-or-reactivate-a-user" %}You previously had an account on {{ organization_url }}, but it has been deactivated. You can contact an organization administrator to <a href="{{ help_link }}">reactivate your account</a>.{% endtrans %}
{% else %}
{% trans %}You do not have an account in that Zulip organization.{% endtrans %}
{% endif %}
</p>
{% if other_realm_urls %}
<p>
{{ _("You do have active accounts in the following organization(s).") }}
</p>
<ul>
{% for realm_url in other_realm_urls %}
<li>{{ realm_url }}</li>
{% endfor %}
</ul>
<p>
{% trans %}You can try logging in or resetting your password in the organization(s) above.{% endtrans %}
</p>
{% endif %}
{% endif %}
<p>
{% trans %}If you do not recognize this activity, you can safely ignore this email.{% endtrans %}
</p>
{% endblock %}

View File

@@ -0,0 +1 @@
{% trans %}Password reset request for {{ realm_name }}{% endtrans %}

View File

@@ -0,0 +1,35 @@
{% trans -%}
Somebody (possibly you) requested a new password for the Zulip account {{ email }} on {{ realm_url }}.
{%- endtrans %}
{% if active_account_in_realm %}
{{ _('Click the link below to reset your password.') }}
{{ reset_url }}
{% else %}
{% if user_deactivated %}
{% trans -%}
You previously had an account on {{ realm_url }}, but it has been deactivated. You can contact an organization administrator to reactivate your account.
{%- endtrans %}
{{ realm_url }}/help/deactivate-or-reactivate-a-user
{% else %}
{% trans -%}
You do not have an account in that Zulip organization.
{%- endtrans %}
{% endif %}
{% if other_realm_urls %}
{{ _("You do have active accounts in the following organization(s).") }}
{% for realm_url in other_realm_urls %}
{{ realm_url }}
{% endfor %}
{% trans -%}
You can try logging in or resetting your password in the organization(s) above.
{%- endtrans %}
{% endif %}
{% endif %}
{% trans -%}
If you do not recognize this activity, you can safely ignore this email.
{%- endtrans %}

View File

@@ -0,0 +1,25 @@
{% extends "zerver/emails/email_base_default.html" %}
{% block illustration %}
<img src="{{ email_images_base_url }}/email_logo.png" alt=""/>
{% endblock %}
{% block content %}
{% trans organization_name_with_link=macros.link_tag(realm_url, string_id) %}
Your organization, {{ organization_name_with_link }}, has been downgraded to the Zulip Cloud
Free plan because of unpaid invoices. The unpaid invoices have been voided.
{% endtrans %}
<br/>
<br/>
{% trans upgrade_url=macros.link_tag(upgrade_url) %}
To continue on the Zulip Cloud Standard plan, please upgrade again by going to {{ upgrade_url }}.
{% endtrans %}
<br/>
<br/>
{% trans support_email=macros.email_tag(support_email) %}
If you think this was a mistake or need more details, please reach out to us at {{ support_email }}.
{% endtrans %}
{% endblock %}

View File

@@ -0,0 +1 @@
{{ string_id }}: Your organization has been downgraded to Zulip Cloud Free

View File

@@ -0,0 +1,8 @@
Your organization, {{ realm_url }}, has been downgraded to the Zulip Cloud
Free plan because of unpaid invoices. The unpaid invoices have been voided.
To continue on the Zulip Cloud Standard plan, please upgrade again by going
to {{ upgrade_url }}.
If you think this was a mistake or need more details, please reach out
to us at support@zulip.com.

View File

@@ -0,0 +1,39 @@
{% extends "zerver/emails/email_base_default.html" %}
{% set localized_date = event_date|localize %}
{% if scheduled_deletion_date %}
{% set deletion_date = scheduled_deletion_date|localize %}
{% endif %}
{% block illustration %}
<img src="{{ email_images_base_url }}/email_logo.png" alt=""/>
{% endblock %}
{% block content %}
<p>
{% if is_demo_organization %}
{% if acting_user and initiated_deactivation %}
{% trans %}You have deactivated your Zulip demo organization, {{ realm_name }}, on {{ localized_date }}.{% endtrans %}
{% elif acting_user %}
{% trans %}Your Zulip demo organization, {{ realm_name }}, was deactivated by {{ deactivating_owner }} on {{ localized_date }}.{% endtrans %}
{% else %}
{% trans %}Your Zulip demo organization, {{ realm_name }}, was deactivated on {{ localized_date }}.{% endtrans %}
{% endif %}
{% else %}
{% if acting_user and initiated_deactivation %}
{% trans %}You have deactivated your Zulip organization, {{ realm_name }}, on {{ localized_date }}.{% endtrans %}
{% elif acting_user %}
{% trans %}Your Zulip organization, {{ realm_name }}, was deactivated by {{ deactivating_owner }} on {{ localized_date }}.{% endtrans %}
{% else %}
{% trans %}Your Zulip organization, {{ realm_name }}, was deactivated on {{ localized_date }}.{% endtrans %}
{% endif %}
{% endif %}
{% if data_already_deleted %}
{% trans %}All data associated with this organization has been permanently deleted.{% endtrans %}
{% elif scheduled_deletion_date %}
{% trans %}All data associated with this organization will be permanently deleted on {{ deletion_date }}.{% endtrans %}
{% endif %}
</p>
<p>
{% trans %}If you have any questions or concerns, please reply to this email as soon as possible.{% endtrans %}
</p>
{% endblock %}

View File

@@ -0,0 +1 @@
{% trans %}Your Zulip organization {{ realm_name }} has been deactivated{% endtrans %}

View File

@@ -0,0 +1,29 @@
{% set localized_date = event_date|localize %}
{% if scheduled_deletion_date %}
{% set deletion_date = scheduled_deletion_date|localize %}
{% endif %}
{% if is_demo_organization %}
{% if acting_user and initiated_deactivation %}
{% trans %}You have deactivated your Zulip demo organization, {{ realm_name }}, on {{ localized_date }}.{% endtrans %}
{% elif acting_user %}
{% trans %}Your Zulip demo organization, {{ realm_name }}, was deactivated by {{ deactivating_owner }} on {{ localized_date }}.{% endtrans %}
{% else %}
{% trans %}Your Zulip demo organization, {{ realm_name }}, was deactivated on {{ localized_date }}.{% endtrans %}
{% endif %}
{% else %}
{% if acting_user and initiated_deactivation %}
{% trans %}You have deactivated your Zulip organization, {{ realm_name }}, on {{ localized_date }}.{% endtrans %}
{% elif acting_user %}
{% trans %}Your Zulip organization, {{ realm_name }}, was deactivated by {{ deactivating_owner }} on {{ localized_date }}.{% endtrans %}
{% else %}
{% trans %}Your Zulip organization, {{ realm_name }}, was deactivated on {{ localized_date }}.{% endtrans %}
{% endif %}
{% endif %}
{% if data_already_deleted %}
{% trans %}All data associated with this organization has been permanently deleted.{% endtrans %}
{% elif scheduled_deletion_date %}
{% trans %}All data associated with this organization will be permanently deleted on {{ deletion_date }}.{% endtrans %}
{% endif %}
{% trans%}If you have any questions or concerns, please reply to this email as soon as possible.{% endtrans %}

View File

@@ -0,0 +1,30 @@
{% extends "zerver/emails/email_base_default.html" %}
{% block illustration %}
<img src="{{ email_images_base_url }}/registration_confirmation.png" alt=""/>
{% endblock %}
{% block content %}
<p>{% trans %}Dear former administrators of {{ realm_name }},{% endtrans %}</p>
{% if is_demo_organization %}
<p>{% trans realm_url=macros.link_tag(realm_url) %}One of your administrators requested reactivation of the previously deactivated Zulip demo organization hosted at {{ realm_url }}.{% endtrans %}</p>
{% else %}
<p>{% trans realm_url=macros.link_tag(realm_url) %}One of your administrators requested reactivation of the previously deactivated Zulip organization hosted at {{ realm_url }}.{% endtrans %}</p>
{% endif %}
<p>
{{ _('Click the button below to reactivate your organization.') }}
<a class="button" href="{{ confirmation_url }}">{{ _('Reactivate organization') }}</a>
</p>
<p>{% trans %}If the request was in error, you can take no action and this link will expire in 24 hours.{% endtrans %}</p>
<p>
{% if corporate_enabled %}
{{macros.contact_us_zulip_cloud(support_email)}}
{% else %}
{{macros.contact_us_self_hosted(support_email)}}
{% endif %}
</p>
{% endblock %}

View File

@@ -0,0 +1,5 @@
{% if is_demo_organization %}
{% trans %}Reactivate your Zulip demo organization{% endtrans %}
{% else %}
{% trans %}Reactivate your Zulip organization{% endtrans %}
{% endif %}

View File

@@ -0,0 +1,21 @@
{% trans %}Dear former administrators of {{ realm_name }},{% endtrans %}
{% if is_demo_organization %}
{% trans %}One of your administrators requested reactivation of the previously deactivated Zulip demo organization hosted at {{ realm_url }}.{% endtrans %}
{% else %}
{% trans %}One of your administrators requested reactivation of the previously deactivated Zulip organization hosted at {{ realm_url }}.{% endtrans %}
{% endif %}
{{ _('Click the link below to reactivate your organization.') }}
<{{ confirmation_url }}>
{% trans %}If the request was in error, you can take no action and this link will expire in 24 hours.{% endtrans %}
{% if corporate_enabled %}
{% trans %}Do you have questions or feedback to share? Contact us at {{ support_email }} — we'd love to help!{% endtrans %}
{% else %}
{% trans %}If you have any questions, please contact this Zulip server's administrators at {{ support_email }}.{% endtrans %}
{% endif %}

View File

@@ -0,0 +1,26 @@
{% extends "zerver/emails/email_base_default.html" %}
{% block illustration %}
<img src="{{ email_images_base_url }}/registration_confirmation.png" alt=""/>
{% endblock %}
{% block content %}
<p>
{% trans %}Either you, or someone on your behalf, has requested a log in link to manage the Zulip plan for <b>{{ remote_server_hostname }}</b>.{% endtrans %}
</p>
<p>
{% trans %}
Click the button below to log in.
{% endtrans %}
{% trans %}
This link will expire in {{ validity_in_hours }} hours.
{% endtrans %}
</p>
<p>
<a class="button" href="{{ confirmation_url }}">{{ _("Log in") }}</a>
</p>
<p>
{% trans billing_contact_email=macros.email_tag(billing_contact_email) %}Questions? <a href="{{ billing_help_link }}">Learn more</a> or contact {{ billing_contact_email }}.{% endtrans %}
</p>
{% endblock %}

View File

@@ -0,0 +1 @@
{% trans %}Log in to Zulip plan management{% endtrans %}

View File

@@ -0,0 +1,8 @@
{% trans %}Either you, or someone on your behalf, has requested a log in link to manage the Zulip plan for {{ remote_server_hostname }}.{% endtrans %}
{% trans %}Click the link below to log in.{% endtrans %} {% trans %}This link will expire in {{ validity_in_hours }} hours.{% endtrans %}
{{ _("Log in") }}: {{ confirmation_url }}
{% trans %}Questions? Learn more at {{ billing_help_link }} or contact {{ billing_contact_email }}.{% endtrans %}

View File

@@ -0,0 +1,19 @@
{% extends "zerver/emails/email_base_default.html" %}
{% block illustration %}
<img src="{{ email_images_base_url }}/registration_confirmation.png" alt=""/>
{% endblock %}
{% block content %}
<p>
{% trans %}
Click the button below to confirm your email and log in to Zulip plan management for <b>{{ remote_realm_host }}</b>.
{% endtrans %}
</p>
<p>
<a class="button" href="{{ confirmation_url }}">{{ _("Confirm and log in") }}</a>
</p>
<p>
{% trans billing_contact_email=macros.email_tag(billing_contact_email) %}Questions? <a href="{{ billing_help_link }}">Learn more</a> or contact {{ billing_contact_email }}.{% endtrans %}
</p>
{% endblock %}

View File

@@ -0,0 +1 @@
{% trans %}Confirm email for Zulip plan management{% endtrans %}

View File

@@ -0,0 +1,6 @@
{% trans %}Click the link below to confirm your email and log in to Zulip plan management for {{remote_realm_host}}.{% endtrans %}
{{ _("Confirm and log in") }}: {{ confirmation_url }}
{% trans %}Questions? Learn more at {{ billing_help_link }} or contact {{ billing_contact_email }}.{% endtrans %}

View File

@@ -0,0 +1,23 @@
{% extends "zerver/emails/email_base_messages.html" %}
{% block content %}
<b>Subject</b>: Sales support request for {{ organization_name }}
<br />
<b>Full name</b>: {{ full_name }}
<br />
<b>Email</b>: {{ email }}
<br />
<b>Role</b>: {{ role }}
<br />
<b>Organization type</b>: {{ organization_type }}
<br />
<b>Organization website</b>: {{ organization_website }}
<br />
<b>Expected user count</b>: {{ expected_user_count }}
<br />
<b>Message</b>: {{ message }}
<br />
<b>Support link</b>: {{ support_link }}
<br />
{% endblock %}

View File

@@ -0,0 +1 @@
Sales support request for {{organization_name}}

View File

@@ -0,0 +1,17 @@
Subject: Sales support request for {{ organization_name }}
Full name: {{ full_name }}
Email: {{ email }}
Role: {{ role }}
Organization type: {{ organization_type }}
Organization website: {{ organization_website }}
Expected user count: {{ expected_user_count }}
Message: {{ message }}
Support link: {{ support_link }}

View File

@@ -0,0 +1,15 @@
{% extends "zerver/emails/email_base_default.html" %}
{% block illustration %}
<img src="{{ email_images_base_url }}/email_logo.png" alt=""/>
{% endblock %}
{% block content %}
<p>
{% trans %}Your request for Zulip sponsorship has been approved! Your organization has been upgraded to the <a href="{{ plans_link }}">Zulip Community plan</a>.{% endtrans %}
</p>
<p>
{% trans %}If you could <a href="{{ link_to_zulip }}">list Zulip as a sponsor on your website</a>, we would really appreciate it!{% endtrans %}
</p>
{% endblock %}

View File

@@ -0,0 +1 @@
{% trans %}Community plan sponsorship approved for {{ billing_entity }}!{% endtrans %}

View File

@@ -0,0 +1,5 @@
{{ _("Your request for Zulip sponsorship has been approved! Your organization has been upgraded to the Zulip Community plan.") }}
{{ plans_link }}
{{ _("If you could list Zulip as a sponsor on your website, we would really appreciate it!") }}
{{ link_to_zulip }}

View File

@@ -0,0 +1,57 @@
{% extends "zerver/emails/email_base_messages.html" %}
{% block content %}
<br />
{% if is_cloud_organization %}
<b>Zulip Cloud</b>
{% else %}
<b>Self-hosted</b>
{% endif %}
<br /><br />
<b>Support URL</b>: <a class="sponsorship_request_link" href="{{ support_url }}">{{ support_url }}</a>
<br /><br />
<b>Website</b>: <a class="sponsorship_request_link" href="{{ website }}">{{ website }}</a>
<br /><br />
<b>Organization type</b>: {{ organization_type }}
<br /><br />
<b>Description</b>:
<br />
{{ description }}
<br /><br />
<b>How do you plan to use Zulip?</b>
<br />
{{ plan_to_use_zulip }}
<br /><br />
<b>Expected users</b>: {{ expected_total_users }}
<br /><br />
<b>Paid staff</b>: {{ paid_users_count }}
<br />
<b>Description of paid staff</b>:
<br />
{{ paid_users_description }}
<br /><br />
<b>Requested by</b>: {{ requested_by }} ({{ user_role }})
{% if requested_plan %}
<br /><br />
<b>Requested plan</b>: {{ requested_plan }}
{% endif %}
{% endblock %}

View File

@@ -0,0 +1 @@
Sponsorship request for {{ billing_entity }}

View File

@@ -0,0 +1,20 @@
Support URL: {{ support_url }}
Website: {{ website }}
Organization type: {{ organization_type }}
Description:
{{ description }}
How do you plan to use Zulip?
{{ plan_to_use_zulip }}
Expected users:
- Total: {{ expected_total_users }}
- Paid: {{ paid_users_count }}
Description of paid users:
{{ paid_users_description }}
Requested by: {{ requested_by }} ({{ user_role }})

View File

@@ -0,0 +1,17 @@
// @ts-check
/** @type {import("stylelint").Config} */
export default {
extends: ["../../../stylelint.config"],
rules: {
// Add some exceptions for recommended rules
"property-no-unknown": [true, {ignoreProperties: [/^mso-/]}],
// We don't run autoprefixer on email CSS
"at-rule-no-vendor-prefix": null,
"media-feature-name-no-vendor-prefix": null,
"property-no-vendor-prefix": null,
"selector-no-vendor-prefix": null,
"value-no-vendor-prefix": null,
},
};

View File

@@ -0,0 +1,21 @@
{% extends "zerver/emails/email_base_messages.html" %}
{% block content %}
<b>Support URL</b>: <a class="support_request_link" href="{{ support_url }}">{{ support_url }}</a>
<br /><br />
<b>Subject</b>: {{ request_subject }}
<br /><br />
<b>Message</b>:
<br />
{{ request_message }}
<br /><br />
<b>Requested by</b>: {{ requested_by }} ({{ user_role }})
{% endblock %}

View File

@@ -0,0 +1 @@
Support request for {{ realm_string_id }}

View File

@@ -0,0 +1,8 @@
Support URL: {{ support_url }}
Subject: {{ request_subject }}
Message:
{{ request_message }}
Requested by: {{ requested_by }} ({{ user_role }})