Quellcode durchsuchen

feat: add email template for invite new user in workspace (#1810)

crazywoola vor 1 Jahr
Ursprung
Commit
1521ac5563

+ 1 - 0
api/services/account_service.py

@@ -479,6 +479,7 @@ class RegisterService:
 
         # send email
         send_invite_member_mail_task.delay(
+            language=account.interface_language,
             to=email,
             token=token,
             inviter_name=inviter.name if inviter else 'Dify',

+ 20 - 15
api/tasks/mail_invite_member_task.py

@@ -3,21 +3,20 @@ import time
 
 import click
 from celery import shared_task
-from flask import current_app
-
+from flask import current_app, render_template
 from extensions.ext_mail import mail
 
-
 @shared_task(queue='mail')
-def send_invite_member_mail_task(to: str, token: str, inviter_name: str, workspace_name: str):
+def send_invite_member_mail_task(language: str, to: str, token: str, inviter_name: str, workspace_name: str):
     """
     Async Send invite member mail
+    :param language
     :param to
     :param token
     :param inviter_name
     :param workspace_name
 
-    Usage: send_invite_member_mail_task.delay(to, token, inviter_name, workspace_name)
+    Usage: send_invite_member_mail_task.delay(langauge, to, token, inviter_name, workspace_name)
     """
     if not mail.is_inited():
         return
@@ -27,16 +26,22 @@ def send_invite_member_mail_task(to: str, token: str, inviter_name: str, workspa
     start_at = time.perf_counter()
 
     try:
-        mail.send(
-            to=to,
-            subject="{} invited you to join {}".format(inviter_name, workspace_name),
-            html="""<p>Hi there,</p>
-<p>{inviter_name} invited you to join {workspace_name}.</p>
-<p>Click <a href="{url}">here</a> to join.</p>
-<p>Thanks,</p>
-<p>Dify Team</p>""".format(inviter_name=inviter_name, workspace_name=workspace_name,
-                           url=f'{current_app.config.get("CONSOLE_WEB_URL")}/activate?token={token}')
-        )
+        url = f'{current_app.config.get("CONSOLE_WEB_URL")}/activate?token={token}'
+        if language == 'zh-CN':
+            html_content = render_template('invite_member_mail_template_zh-CN.html',
+                                           to=to,
+                                           inviter_name=inviter_name,
+                                           workspace_name=workspace_name,
+                                           url=url)
+            mail.send(to=to, subject="立即加入 Dify 工作空间", html=html_content)
+        else:
+            html_content = render_template('invite_member_mail_template_en-US.html',
+                                        to=to,
+                                        inviter_name=inviter_name, 
+                                        workspace_name=workspace_name,
+                                        url=url)
+            mail.send(to=to, subject="Join Dify Workspace Now", html=html_content)
+        
 
         end_at = time.perf_counter()
         logging.info(

+ 73 - 0
api/templates/invite_member_mail_template_en-US.html

@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <style>
+        body {
+            font-family: 'Arial', sans-serif;
+            line-height: 16pt;
+            color: #374151;
+            background-color: #E5E7EB;
+            margin: 0;
+            padding: 0;
+        }
+        .container {
+            width: 100%;
+            max-width: 560px;
+            margin: 40px auto;
+            padding: 20px;
+            background-color: #F3F4F6;
+            border-radius: 8px;
+            box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
+        }
+        .header {
+            text-align: center;
+            margin-bottom: 20px;
+        }
+        .header img {
+            max-width: 100px;
+            height: auto;
+        }
+        .button {
+            display: inline-block;
+            padding: 12px 24px;
+            background-color: #2970FF;
+            color: white;
+            text-decoration: none;
+            border-radius: 4px;
+            text-align: center;
+            transition: background-color 0.3s ease;
+        }
+        .button:hover {
+            background-color: #265DD4;
+        }
+        .footer {
+            font-size: 0.9em;
+            color: #777777;
+            margin-top: 30px;
+        }
+        .content {
+            margin-top: 20px;
+        }
+    </style>
+</head>
+<body>
+    <div class="container">
+        <div class="header">
+            <!-- Optional: Add a logo or a header image here -->
+            <img src="https://cloud.dify.ai/logo/logo-site.png" alt="Dify Logo">
+        </div>
+        <div class="content">
+            <p>Dear {{ to }},</p>
+            <p>{{ inviter_name }} is pleased to invite you to join our workspace on Dify, a platform specifically designed for LLM application development. On Dify, you can explore, create, and collaborate to build and operate AI applications.</p>
+            <p>You can now log in to Dify using the GitHub or Google account associated with this email.</p>
+            <p style="text-align: center;"><a class="button" href="{{ url }}">Login Here</a></p>
+        </div>
+        <div class="footer">
+            <p>Best regards,</p>
+            <p>Dify Team</p>
+            <p>Please do not reply directly to this email; it is automatically sent by the system.</p>
+        </div>
+    </div>
+</body>
+
+</html>

+ 72 - 0
api/templates/invite_member_mail_template_zh-CN.html

@@ -0,0 +1,72 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <style>
+        body {
+            font-family: 'Arial', sans-serif;
+            line-height: 16pt;
+            color: #374151;
+            background-color: #E5E7EB;
+            margin: 0;
+            padding: 0;
+        }
+        .container {
+            width: 100%;
+            max-width: 560px;
+            margin: 40px auto;
+            padding: 20px;
+            background-color: #F3F4F6;
+            border-radius: 8px;
+            box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
+        }
+        .header {
+            text-align: center;
+            margin-bottom: 20px;
+        }
+        .header img {
+            max-width: 100px;
+            height: auto;
+        }
+        .button {
+            display: inline-block;
+            padding: 12px 24px;
+            background-color: #2970FF;
+            color: white;
+            text-decoration: none;
+            border-radius: 4px;
+            text-align: center;
+            transition: background-color 0.3s ease;
+        }
+        .button:hover {
+            background-color: #265DD4;
+        }
+        .footer {
+            font-size: 0.9em;
+            color: #777777;
+            margin-top: 30px;
+        }
+        .content {
+            margin-top: 20px;
+        }
+    </style>
+</head>
+
+<body>
+    <div class="container">
+        <div class="header">
+            <img src="https://cloud.dify.ai/logo/logo-site.png" alt="Dify Logo">
+        </div>
+        <div class="content">
+            <p>尊敬的 {{ to }},</p>
+            <p>{{ inviter_name }} 现邀请您加入我们在 Dify 的工作区,这是一个专为 LLM 应用开发而设计的平台。在 Dify 上,您可以探索、创造和合作,构建和运营 AI 应用。</p>
+            <p>您现在可以使用与此邮件相对应的 GitHub 或 Google 账号登录 Dify。</p>
+            <p style="text-align: center;"><a class="button" href="{{ url }}">在此登录</a></p>
+        </div>
+        <div class="footer">
+            <p>此致,</p>
+            <p>Dify 团队</p>
+            <p>请不要直接回复此电子邮件;由系统自动发送。</p>
+        </div>
+    </div>
+</body>
+</html>

Datei-Diff unterdrückt, da er zu groß ist
+ 155 - 378
web/yarn.lock


Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden.