Hướng dẫn gắn tên người dùng trong mail template
Back to ezymailKhi gửi email từ template, hệ thống có thể tự gắn thông tin người dùng tương ứng với email người nhận vào biến
user. Nhờ vậy, trong template Thymeleaf bạn có thể viết lời chào hoặc nội dung cá nhân hóa như tên hiển thị, username, email... mà không cần truyền tay từng trường.Ý tưởng chính
Mỗi email người nhận có thể tương ứng với một user trong hệ thống. Khi render mail template, hệ thống lấy email người nhận, tìm user theo email đó, rồi đưa user vào context của Thymeleaf dưới biến
user.Nếu không tìm thấy user thật trong hệ thống, hệ thống vẫn tạo một user mặc định từ email. Ví dụ với email
john@example.com, phần tên có thể được suy ra từ john, giúp template vẫn có dữ liệu để hiển thị thay vì bị rỗng hoàn toàn.Cách dùng trong Thymeleaf
Khi tạo mail template, hãy chọn content type là
THYMELEAF. Sau đó bạn có thể dùng biến user trong tiêu đề hoặc nội dung mail.Ví dụ tiêu đề:
Xin chào [[]]
Ví dụ nội dung:
<p> Xin chào <span th:text="">bạn</span>, </p> <p> Cảm ơn bạn đã sử dụng dịch vụ của chúng tôi. </p>
Bạn cũng có thể dùng email hoặc username:
<p>Email của bạn là: <span th:text=""></span></p> <p>Tên đăng nhập: <span th:text=""></span></p>
Nếu muốn tránh lỗi khi một trường bị thiếu, có thể dùng biểu thức an toàn hơn:
<p> Xin chào <span th:text="user.username ?: user.email"> bạn </span> </p>
Luồng xử lý
flowchart TD
A[Tạo mail từ template] --> B[Lấy email người nhận]
B --> C[Tìm user theo email]
C --> D{Có user không?}
D -->|Có| E[Đưa user thật vào Thymeleaf context]
D -->|Không| F[Tạo user mặc định từ email]
F --> G[Đưa user mặc định vào Thymeleaf context]
E --> H[Render tiêu đề và nội dung]
G --> H
H --> I[Gửi email]
Điều kiện quan trọng
Tính năng gắn
user chỉ có ý nghĩa khi mail được gửi cho từng người riêng biệt.Nếu một email được render một lần rồi gửi cho nhiều người nhận cùng lúc, template chỉ có một context duy nhất. Khi đó
không thể thay đổi theo từng người trong cùng một nội dung đã render.Vì vậy, khi muốn cá nhân hóa bằng
user, hãy bật chế độ gửi từng người, thường là tùy chọn To each person / Gửi đến từng người.
flowchart TD
A[Danh sách nhiều email] --> B{Gửi từng người?}
B -->|Có| C[Tách mỗi email thành một lượt gửi]
C --> D[Mỗi lượt có user riêng]
D --> E[Nội dung cá nhân hóa đúng từng người]
B -->|Không| F[Render/gửi theo một nhóm người nhận]
F --> G[Không nên dùng user để cá nhân hóa từng người]
Ví dụ hoàn chỉnh

Tiêu đề:
[[]], có thông báo mới dành cho bạn
Nội dung:
<!DOCTYPE html> <html> <body> <p> Xin chào <span th:text=""> bạn </span>, </p> <p> Chúng tôi gửi email này đến địa chỉ <strong th:text="">email@example.com</strong>. </p> <p> Chúc bạn một ngày tốt lành. </p> </body> </html>
Lưu ý khi dùng
Biến
user được lấy theo email người nhận chính, không phải CC hoặc BCC.Nếu gửi từ màn hình soạn mail và có người nhận, hệ thống sẽ tự thêm
user vào parameters nếu bạn chưa truyền biến này.Khi gửi templated mail qua event/API, nếu muốn hệ thống nạp user theo email, hãy khai báo biến
user trong parameters như một placeholder, ví dụ:
{
"parameters": {
"user": true
}
}
Sau đó template có thể dùng
, , như bình thường.Kết luận
Để gắn tên người dùng trong mail template, hãy dùng Thymeleaf và biến
. Cách dùng phổ biến nhất là:Xin chào <span>[[]]</span>
Và nhớ bật gửi từng người khi gửi đến nhiều email, vì cá nhân hóa theo user chỉ chính xác khi mỗi người nhận được render trong một lượt gửi riêng.