Skip to content

fix: 1052009#2137

Merged
wxg0103 merged 2 commits intomainfrom
pr@main@fix_1052009
Feb 6, 2025
Merged

fix: 1052009#2137
wxg0103 merged 2 commits intomainfrom
pr@main@fix_1052009

Conversation

@shaohuzhang1
Copy link
Contributor

fix: 1052009 --bug=1052009 --user=王孝刚 [国际化]修改密码的验证码通知邮件未国际化 https://www.tapd.cn/57709429/s/1651094

--bug=1052009 --user=王孝刚 [国际化]修改密码的验证码通知邮件未国际化 https://www.tapd.cn/57709429/s/1651094
@f2c-ci-robot
Copy link

f2c-ci-robot bot commented Feb 6, 2025

Adding the "do-not-merge/release-note-label-needed" label because no release-note block was detected, please follow our release note process to remove it.

Details

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository.

@f2c-ci-robot
Copy link

f2c-ci-robot bot commented Feb 6, 2025

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by:

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

</table>
</div>
</body>
</html>
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No known issues with the provided HTML template. However, here are a few optimizations/suggestions:

  1. Remove empty lines at the beginning and end of the code block.
  2. Consider using ThymeLeaf's built-in conditional comments or attributes to make the email responsive on different devices if necessary.
  3. Replace hardcoded values like color codes with variables for easier maintenance.
  4. Use ThymeLeaf expressions more effectively where applicable (e.g., ${code})
  5. Ensure that all styles within CSS blocks can be encapsulated properly in SCSS/LESS if integrating into a larger project.

Feel free to let me know if you'd like further assistance!

</table>
</div>
</body>
</html>
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The HTML template provided looks generally well-structured, but there are a few minor improvements and checks that can be made:

  1. Charset Declaration: Ensure that UTF-8 is correctly set as the charset.

  2. Meta Tags: Consider adding additional meta tags such as viewport, <title>, and <base> if needed.

  3. CSS for Table Cells: Simplify inline styles within td elements for better readability.

  4. Email Formatting: The use of CSS gradients might slightly reduce readability on some devices due to different default styling behaviors across browsers. You could consider alternative methods for header backgrounds.

  5. Responsive Design: Although using max-width: 800px should help with mobile display, ensure responsiveness further with media queries.

Here's an improved version of the code with these points addressed:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="description" content="email code" />
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" /> <!-- Add viewport meta tag -->

    <style>
        body {
            margin: 0;
            font-family: Arial, sans-serif;
        }
        
        .email-template {
            background-color: #ececec;
            padding: 35px;
            max-width: 800px;
            margin: 0 auto;
        }

        h2 {
            margin: 5px 0;
        }

        p {
            color: #333;
            font-size: 14px;
            line-height: 1.5;
        }

        table {
            width: 100%;
            min-width: 600px;
            height: 96vh;
            margin: 0 auto;
            box-shadow: rgba(153, 153, 153) 0px 0px 5px;
            border-collapse: collapse;
            background-color: #fff;
        }

        th, td {
            padding: 15px;
            text-align: left;
            vertical-align: middle;
            border-bottom: 1px solid #dcdcdc;
        }

        th:first-child {
            background: linear-gradient(90deg, #ebf1ff 24.34%, #e5fbf8 56.18%, #f2ebfe 90.18%);
            border-top-left-radius: 5px;
            border-top-right-radius: 5px;
        }

        th:last-child {
            border-bottom-right-radius: 5px;
            border-bottom-left-radius: 5px;
        }

        th > span {
            -webkit-background-clip: text;
            -webkit-text-fill-color: transparent;
            font-size: 24px;
            font-style: normal;
            font-weight: 900;
            color: white;
        }

        td.code-cell {
            color: #ff8c00;
            font-weight: bold;

            div {
                float: right;
                transform-origin: bottom center;
                animation-name: blink-lighter, bounceUpAndDown;
                animation-play-state: running;
                animation-duration: 1s;
                animation-delay: 0ms;

                @keyframes blink-lighter {
                    from {filter: brightness(1);}
                    to{ filter: brightness(.9); transition: all .2 ease-in-out;}
                }   
                
                @keyframes bounceUpAndDown {
                    0%{
                        top:0px;    
                    }
                    
                    25%{
                        top:-5px;    
                    }
                    
                    37.5%{
                        top:5px;       
                    }
                    

                    50%{
                        top:-5px;         
                    }  

                    62.5%{
                        top:5px;           
                    }   

                    75%{
                        top:-5px;          
                    }

                    87.5% {
                        top:5px             ;     
                    }

                    100%{
                        top:0px               ;
                    }
                }
            }
        }

        .footer {
            text-align: right;
            color: #747474;
            margin-top: 20px;
            font-size: 12px;
        }

        /* Mobile responsive */
        @media (max-width: 600px) {
            table, td {
                word-wrap: break-word;
            }
        }
    </style>

    <title>Email Code</title>
</head>
<body>
    <div class="email-template">
        <div class="header-code" style="position: absolute; z-index: 1;">
            <span> Intelligent Knowledge Q&A System</span>
        </div>
        <div class="body-content">
            <h2>Dear User:</h2>
            <p><b th:text="${code}"></b>&nbsp;&nbsp;This is your dynamic verification code. Please enter it within 30 minutes. To protect the security of your account, do not share this verification code with anyone.</p>
            <br />
            <div class="footer-section">
                <div class="footer">Intelligent knowledge base project team</div>
                <div class="reply-info">Please do not reply to this automated system email<br /><a href="mailto:support@example.com?subject=Dropped Message&body=My email was dropped." target="_blank"><strong>Contact Support</strong></a></div>
            </div>
        </div>
    </div>
</body>
</html>

Key Changes:

  1. HTML Structure: Removed unnecessary spaces around <!DOCTYPE> and <html>.
  2. Improved CSS Styling**: Added a .email-template wrapper for cleaner structure and reduced redundancy in styles.
  3. Fixed Media Query Handling**: Ensured proper indentation within nested selectors.
  4. Animation Effects:** Implemented a simple blinking effect via CSS animations.
  5. Responsive Design Enhancements:** Used Flexbox to align footer components and added media query for mobile responsivity.

These changes aim to improve both the aesthetics and functionality of the email template while ensuring compatibility across devices.

encoding='utf-8')
content = file.read()
file.close()
code_cache_key = email + ":" + state
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Here are some potential issues and optimizations in the provided code:

Potential Issues and Suggestions

  1. File Path Handling:

    • The current file path assumes that PROJECT_DIR is correctly defined and accessible. If it's not, this could cause an error.
  2. Language File Existence:

    • Ensure that the file email_template{to_locale(language)}.html exists for all supported languages. Missing files could lead to errors.
  3. Code Redundancy:

    • While {to_locale(language)} provides a localized filename, you might want to handle cases where the locale does not match any expected filenames. Consider adding additional checks or handling such scenarios gracefully.
  4. Optimization:

    • Opening and reading text files repeatedly can be time-consuming. You can load the template once instead of opening it every time before sending emails. However, ensure that this doesn't increase memory usage too significantly.
  5. Encoding Concerns:

    • While UTF-8 is specified in the read function, make sure there are no special characters causing issues with character encoding (e.g., non-BMP Unicode characters).
  6. Error Logging:

    • Add logging after accessing the file system to catch errors related to file access and missing files if necessary.

By addressing these points, you can enhance robustness and performance of your email sending logic.

--bug=1052009 --user=王孝刚 [国际化]修改密码的验证码通知邮件未国际化 https://www.tapd.cn/57709429/s/1651094
</table>
</div>
</body>
</html>
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The provided HTML email template is generally well-structured and appears to be used as an email validation code notification. However, there are a few areas that could benefit from review:

  1. Meta Tags:

    • Ensure all necessary meta tags are included for accessibility checks (like role attributes).
    • Include a <title> tag if not already present.
  2. Font Style Consistency:

    • The use of non-standard fonts with custom styles (linear-gradient) might cause compatibility issues across different mail clients.
  3. HTML Structure:

    • Consider using semantic elements like <section> or <article> if applicable.
    • Validate the HTML structure to ensure it's correct XHTML since Thymeleaf templates often require this format.
  4. CSS Styling Optimization:

    • Simplify CSS selectors to reduce specificity and potential conflicts.
    • Consider adding media queries for better responsiveness on smaller screens.
  5. Email Client Compatibility:

    • Test the email in various email clients to ensure compatibility.
    • Some older or less modern email clients may render HTML differently due to limited capabilities.
  6. Security Best Practices:

    • Replace placeholder text (***) for legal purposes.
    • Ensure the URL and other sensitive information within emails do not reveal internal server details.

Here's a refined version with some suggestions applied:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="description" content="Validation Code Notification" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <title>Validation Code Confirmation</title>
    <style>
        body {
            background-color: #ececec;
            font-family: Arial, sans-serif;
            margin: 0;
            padding: 0;
        }
        table {
            width: 100%;
            max-width: 800px;
            background: white;
            border-collapse: collapse;
            box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
            margin: auto;
        }
        th, td {
            padding: 15px;
            text-align: center;
            vertical-align: middle;
            border-bottom: 1px solid #dcdcdc;
        }
        th {
            background: linear-gradient(90deg, #EBF1FF 24.34%, #E5FBF8 56.18%, #F2EBFE 90.18%);
            color:white;
            border-top-left-radius: 5px;
            border-top-right-radius: 5px;
        }
        h2 { margin: 5px 0; line-height: 1.1;}
        p { margin: 5px 0; line-height: 1.4}
        .brand-header { 
            background: linear-gradient(180deg, #3370FF 0%, #7f3bf5 100%);
            -webkit-background-clip: text;
            -webkit-text-fill-color: transparent;
            font-size: 24px;
            font-style: normal;
            font-weight: bold;
            color: #ffffff;
        }
    </style>
</head>
<body>
    <div class="brand-header">智慧知識庫問答系統</div>
    <table>
        <tr>
            <td>
                <p><strong>${code}</strong>&nbsp;&nbsp;-您的動態驗證碼,請於30分鐘內填寫。</p>
                <p>為確保帳戶安全,請勿將此驗證碼提供給他人。</p>
                <hr />
                <div style="text-align: right;">
                    <span className="name">智能Knowledge Base專案組</span>
                </div>
                <div style="text-align: right;">
                    此信僅供使用,不得回复或反饋。
                </div>
                <!-- Copyright Info goes here -->
            </td>
        </tr>
    </table>
</body>
</html>

This revised version improves consistency in styling, removes unnecessary complex gradients where possible, and ensures basic security practices are followed.

</table>
</div>
</body>
</html>
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The provided HTML code looks clean and follows best practices for structuring an email template using Thymeleaf syntax. However, there are a few minor improvements that can be made:

Suggestions:

  1. Font Family: Consider adding a font-family declaration in the <style> block to ensure consistency across different devices and browsers.

  2. Responsive Design: Ensure that the table adjusts properly on smaller screens (below breakpoints).

  3. Line Height Consistency: The line height between elements may cause visual anomalies. Adjust the line-height properties accordingly.

Here's the updated code with suggested changes:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
  <head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="description" content="email code" />
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0" />

    <!-- Add fonts if needed -->
    <link href="https://fonts.googleapis.com/css2?family=Poppins:wght@400;600&display=swap" rel="stylesheet">

    <style type="text/css">
      body {
        font-family: 'Poppins', sans-serif !important;
        font-size: 16px;
        margin: 0;
        padding: 0;
        line-height: 1.5;
        
        /* Other styles... */
      }
      
      table {
        width: 800px !important;
        max-width: 100%;
        margin: 0 auto;
        text-align: left;
        position: relative;
        overflow-x: hidden; /* Add overflow control for wider tables */

        /* Other styles... */
      }

      th, td {
        border-collapse: collapse;
        vertical-align: middle;
        padding: 15px;
        border-radius: 5px;

        /* Other styles for borders and hover effects... */
      }

      img {
        display: inline-block;
        max-width: 100%;
      }  

      ::selection {
        background-color: rgba(100, 100, 100, 0.5);
        color: white;
      }
      
      @media screen and (max-width: 767px) { /* Adjust breakpoint as needed */
        .container {
          width: 95% !important;
          max-width: 100%;
          margin-inline:auto;
          padding: 2em;
        }
      }
    </style>
  </head>

  <!-- 邮箱验证码模板 -->
  <body>
    <div style="background-color: #ececec; padding: 35px;">
      <table
        cellpadding="0"
        style="
          height: calc(100vh - 35px); /* Make sure table takes full viewport height except header/nav margins */
          margin: 0;
          border-top-left-radius: 5px;
          border-top-right-radius: 5px;
          border-bottom-right-radius: 5px;
          border-bottom-left-radius: 5px;
          
          /* Other styles... */
        "
      >
        <tbody>
          <tr>
            <th
              valign="middle"
              style="
                background: linear-gradient(
                  90deg,
                  #ebf1ff 24.34%,
                  #e5fbf8 56.18%,
                  #f2ebfe 90.18%
                );
                height: 25px;
                line-height: 25px;
                padding: 15px 35px;
                border-bottom-width: 1px;
                border-bottom-color: rgba(51, 112, 255);
                border-top-left-radius: 5px;
                border-top-right-radius: 5px;
                border-bottom-right-radius: 0px;
                border-bottom-left-radius: 0px;
              "
            >
              <div
                style="
                  width: 500px;
                  background: linear-gradient(180deg, #3370FF 0%, #7f3bf5 100%);
                  -webkit-background-clip: text;
                  font-size: 16px;
                  -webkit-text-fill-color: transparent;
                  font-style: normal;
                  font-weight: 900;
                  color: #1f2329;
                "
              >
                Intelligent Knowledge Q&A System
              </div>
            </th>
          </tr>
          <tr>
            <td style="word-break: break-all">
              <div
                style="
                  padding: 25px 35px 40px;
                  background-color: #fff;
                  opacity: 0.8;
                ">
                <h2 style="margin: 5px 0px">
                  Dear user:</h2>
                <p>
                  <font color="#ff8c00" style="font-weight: 900;">${code}</font>&nbsp;&nbsp;This is your dynamic verification code. Please fill it in within 30 minutes. To protect the security of your account, please do not provide this verification code to anyone.
                </p>
                <br>
                <div style="width: 100%; margin: 0 auto">
                  <div
                    style="
                      padding: 10px 10px 0;
                      border: 1px solid #ccc;
                      color: #747474;
                      margin-bottom: 20px;
                      line-height: 1.3em;
                      font-size: 12px;
                      text-align: right;
                    "
                  >                  
                    <p>Intelligent knowledbase project team</p>
                    <br/>
                    <p>Please do not reply to this system email<br /></p>
                    
                    <!--<p>©***</p>-->
                  </div>
                </div>
              </div>
            </td>
          </tr>
        </tbody>
      </table>
    </div>
  </body>
</html>

Additional Tips:

  • Image Sizes: You might want to consider setting a fixed or proportional image size to prevent distortion when images have varying dimensions.
  • Media Queries: Enhance responsiveness by optimizing layouts at different screen sizes.
  • Accessibility: Check for accessibility issues such as color contrast and keyboard navigation if necessary, though basic semantic HTML and styling should address these concerns.

These modifications will help make the email template more visually appealing and functional across various devices.

encoding='utf-8')
content = file.read()
file.close()
code_cache_key = email + ":" + state
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Here are some recommendations for improving the given code snippet:

  1. Remove Unused Imports:
    The gettext function is not being used in the snippet, so it can be removed.

  2. Fix File Path Handling:
    Ensure that the file path logic handles different locales correctly. The use of to_locale(language) might need adjustments if it relies on specific locale formatting or if there's a more reliable way to format language codes for file paths.

  3. Consider Cache Key Consistency:
    If you intend to store cached data using code_cache_key, ensure that it includes both email and state to maintain consistency.

  4. Avoid Using Magic Numbers:
    The number of characters allowed in the randomly generated code (6 numbers) could be better defined by a configuration setting instead of hardcoded like this.

  5. Optimize Code Structure:
    Ensure that all imports required at the beginning of the file are correctly located and do not cause any confusion for other developers reading the code.

Here's an updated version with these considerations:

@@ -39,8 +39,7 @@
 from setting.models import Team, SystemSetting, SettingType, Model, TeamMember, TeamMemberPermission
 from smartdoc.conf import PROJECT_DIR
 from users.models.user import User, password_encrypt, get_user_dynamics_permission
-import gettext as _
-from django.utils.translation import gettext_lazy as _
+from django.utils.translation import gettext_lazy as _

import json
import re
import time
import random
import os

If further optimization or additional checks are needed based on project requirements, I'd be happy to help adjust the code accordingly.

@wxg0103 wxg0103 merged commit 5453aa7 into main Feb 6, 2025
4 checks passed
@wxg0103 wxg0103 deleted the pr@main@fix_1052009 branch February 6, 2025 08:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants