Cách gửi Mail bằng ESP32 với Máy Chủ SMTP: HTML, Văn bản Và File Đính Kèm (Arduino IDE)

Bài hướng dẫn hôm nay chúng ta sẽ nói về cách gửi mail bằng ESP32 Arduino với Máy chủ SMTP. Chúng tôi sẽ chỉ cho bạn cách gửi một email đơn giản với HTML hoặc cách gửi các File đính kèm như hình ảnh và File ( .txt ). Các board Node Wifi32 sẽ được lập trình trên phần mềm Arduino IDE.

Để cài đặt phần mềm Arduino IDE, bạn có thể tham khảo bài viết sau: Cách cài đặt Arduino IDE phiên bản mới nhất

Gửi mail bằng ESp32

Để xem tất cả các bài hướng dẫn về lập trình Arduino, bạn truy cập vào đây nhé: Tổng hợp các bài hướng dẫn về Arduino.

Bạn đang cần ESP32 để thực hiện? Mua ngay tại đây!

Giới Thiệu Máy Chủ SMTP

SMTP có nghĩa là giao thức truyền thư đơn giản và nó là một tiêu chuẩn internet để truyền email. Để gửi mail bằng ESP32, bạn cần kết nối nó với Máy chủ SMTP.

Thư Viện Node Wifi32 MailClient

Để gửi mail bằng ESP32, chúng tôi sẽ sử dụng thư viện ESP32 MailClient. Thư viện này cho phép Node Wifi32 gửi và nhận email có hoặc không có File đính kèm thông qua máy chủ SMTP và IMAP.

Trong bài học này, chúng tôi sẽ sử dụng SMTP để gửi email có và không có File đính kèm. 

Ví dụ: chúng tôi sẽ gửi một File hình ảnh ( .jpg ) và một File văn bản ( .txt ). Các File sẽ được gửi qua email có thể được lưu trong ESP32 SPIFFS hoặc thẻ SD.

>> Xem thêm: [PDF] Lập trình Arduino là gì? Tài liệu học Arduino miễn phí 2021

Cài Đặt Thư Viện Node Wifi32 MailClient

Trước khi tiếp tục với hướng dẫn này, bạn cần cài đặt thư viện ESP32 MailClient. Thư viện này có thể được cài đặt thông qua Trình quản lý Thư viện  Arduino IDE.

Trong Arduino IDE của bạn, thao tác Sketch > Include Library> Manage Library…

Trình quản lý Thư viện sẽ mở ra. Tìm kiếm ESP32 Mail Client của Mobizt và cài đặt thư viện như hình dưới đây.

Mở trình thư viện

Email Người Gửi (Tài Khoản Mới)

Chúng tôi khuyên bạn nên tạo một tài khoản email mới. Không sử dụng email cá nhân chính của bạn để gửi mail bằng ESP32. Nếu có gì đó sai trong mã của bạn hoặc nếu do nhầm lẫn bạn đưa ra quá nhiều yêu cầu, bạn có thể bị cấm hoặc bị vô hiệu hóa tạm thời tài khoản của mình.

Chúng tôi sẽ sử dụng tài khoản Gmail.com mới được tạo để gửi email, nhưng bạn có thể sử dụng bất kỳ nhà cung cấp dịch vụ email nào khác. Email người nhận có thể là email cá nhân của bạn mà không gặp bất kỳ vấn đề gì.

Tạo Tài Khoản Email Người Gửi

Tạo tài khoản email mới để gửi email bằng Node Wifi32. Nếu bạn muốn sử dụng tài khoản Gmail. Hãy truy cập https://www.google.com/gmail/about/

Gmail Tạo tài khoản mới

Cho Phép Các Ứng Dụng Kém An Toàn

Cho phép các ứng dụng kém an toàn hơn truy cập vào tài khoản Gmail mới này để bạn có thể gửi email. Hãy truy cập https://myaccount.google.com/lesssecureapps

Cho phép các ứng dụng kém an toàn hơn gửi email bằng ESP32

Cài Đặt Máy Chủ SMTP Của Gmail

Nếu bạn đang sử dụng tài khoản Gmail, đây là các chi tiết Máy chủ SMTP:

  • Máy chủ SMTP: smtp.gmail.com
  • Tên người dùng SMTP: Địa chỉ Gmail đầy đủ
  • Mật khẩu SMTP: Mật khẩu Gmail của bạn
  • Cổng SMTP (TLS): 587
  • Cổng SMTP (SSL): 465
  • Yêu cầu SMTP TLS / SSL: 

Cài Đặt Máy Chủ Outlook SMTP

Đối với tài khoản Outlook, đây là các cài đặt Máy chủ SMTP:

  • Máy chủ SMTP: smtp.office365.com
  • Tên người dùng SMTP: Hoàn thành địa chỉ email Outlook
  • Mật khẩu SMTP: Mật khẩu Outlook của bạn
  • Cổng SMTP: 587
  • SMTP TLS / SSL Yêu cầu: 

Cài Đặt Máy Chủ SMTP Trực Tiếp Hoặc Hotmail

Đối với tài khoản Live hoặc Hotmail, đây là các cài đặt máy chủ SMTP:

  • Máy chủ SMTP: smtp.live.com
  • Tên người dùng SMTP: Hoàn thành địa chỉ email Trực tiếp / Hotmail
  • Mật khẩu SMTP: Mật khẩu Windows Live Hotmail của bạn
  • Cổng SMTP: 587
  • SMTP TLS / SSL Yêu cầu: 

Nếu đang sử dụng nhà cung cấp dịch vụ email khác, bạn cần tìm kiếm cài đặt máy chủ SMTP của nhà cung cấp đó. Bây giờ, bạn đã có mọi thứ sẵn sàng để bắt đầu gửi email bằng Node Wifi 32 của mình.

Gửi Mail Bằng ESP32: Mail Dạng HTML Hoặc Văn Bản

Đoạn mã sau sẽ gửi email qua Máy chủ SMTP với HTML hoặc văn bản. Đối với mục đích trình diễn, Node Wifi32 sẽ gửi một email một lần khi khởi động. Sau đó, bạn sẽ có thể sửa đổi mã và tích hợp nó trong các dự án của riêng bạn.

Chưa tải lên mã, bạn cần thực hiện một số sửa đổi để mã hoạt động với bạn.

#include "ESP32_MailClient.h"
// REPLACE WITH YOUR NETWORK CREDENTIALS
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";
#define emailSenderAccount    "EXAMPLE_EMAIL@gmail.com"    
#define emailSenderPassword   "YOUR_EXAMPLE_EMAIL_PASSWORD"
#define emailRecipient        "YOUR_EMAIL_RECIPIENT@EXAMPLE.com"
#define smtpServer            "smtp.gmail.com"
#define smtpServerPort        465
#define emailSubject          "NodeWifi32 Test"
// The Email Sending data object contains config and data to send
SMTPData smtpData;
// Callback function to get the Email sending status
void sendCallback(SendStatus info);
void setup(){
  Serial.begin(115200);
  Serial.println();
  Serial.print("Connecting");
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(200);
  }
  Serial.println();
  Serial.println("WiFi connected.");
  Serial.println();
  Serial.println("Preparing to send email");
  Serial.println();
  // Set the SMTP Server Email host, port, account and password
  smtpData.setLogin(smtpServer, smtpServerPort, emailSenderAccount, emailSenderPassword);
  // Set the sender name and Email
  smtpData.setSender("NodeWifi32", emailSenderAccount);
  // Set Email priority or importance High, Normal, Low or 1 to 5 (1 is highest)
  smtpData.setPriority("High");
  // Set the subject
  smtpData.setSubject(emailSubject);
  // Set the message with HTML format
  smtpData.setMessage("<div style=\"color:#2f4468;\"><h1>Hello World!</h1><p>- Sent from NodeWifi32 board</p></div>", true);
  // Set the email message in text format (raw)
  //smtpData.setMessage("Hello World! - Sent from NodeWifi32 board", false);
  // Add recipients, you can add more than one recipient
  smtpData.addRecipient(emailRecipient);
  //smtpData.addRecipient("YOUR_OTHER_RECIPIENT_EMAIL_ADDRESS@EXAMPLE.com");
  smtpData.setSendCallback(sendCallback);
  //Start sending Email, can be set callback function to track the status
  if (!MailClient.sendMail(smtpData))
    Serial.println("Error sending Email, " + MailClient.smtpErrorReason());
  //Clear all data from Email object to free memory
  smtpData.empty();
}
void loop() 
{
}
// Callback function to get the Email sending status
void sendCallback(SendStatus msg) {
  // Print the current status
  Serial.println(msg.info());
  // Do something when complete
  if (msg.success()) {
    Serial.println("----------------");
  }
}

Bạn cần chèn thông tin đăng nhập mạng của mình cũng như cài đặt email người gửi, chi tiết Máy chủ SMTP, người nhận và tin nhắn.

Cách Code Hoạt Động

Bao gồm khai báo thư viện ESP32_MailClient.h 

#include “ESP32_MailClient.h”

Thông Tin Đăng Nhập Mạng

Chèn thông tin đăng nhập mạng của bạn vào các biến sau để NodeWifi32 có thể kết nối với internet để gửi email.

// REPLACE WITH YOUR NETWORK CREDENTIALS

const char* ssid = “RAPLACE_WITH_YOUR_SSID”;

const char* password = “RAPLACE_WITH_YOUR_PASSWORD”;

Cài Đặt Email

Chèn tài khoản người gửi email trên emailSenderAccount biến và mật khẩu của nó trên emailSenderPassword Biến đổi.

#define emailSenderAccount   “example_sender_account@gmail.com”

#define emailSenderPassword  “email_sender_password”

Chèn email người nhận. Đây là email sẽ nhận các email được gửi bởi NodeWifi32:

#define emailRecipient  “your_email_recipient@gmail.com”

Chèn cài đặt SMTP của nhà cung cấp dịch vụ email của bạn vào các dòng sau (chúng tôi đang sử dụng cài đặt cho tài khoản Gmail):

#define smtpServer      “smtp.gmail.com”

#define smtpServerPort  465

Viết chủ đề email trên emailSubject Biến đổi.

#define emailSubject  “NodeWifi32 Test”

Tạo ra một STMPData đối tượng được gọi là smtpData chứa dữ liệu để gửi qua email và tất cả các cấu hình khác.

SMTPData smtpData;

Hàm Setup:

Bên trong setup(), kết nối NodeWifi32 với Wi-Fi.

WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
  Serial.print(".");
  delay(200);
}

Dòng sau đặt máy chủ SMTP Server, cổng SMTP, địa chỉ email tài khoản và mật khẩu được sử dụng để đăng nhập:

smtpData.setLogin(smtpServer, smtpServerPort, emailSenderAccount, emailSenderPassword);

Đặt tên người gửi và email người gửi. Trong trường hợp này, chúng tôi đang đặt tên người gửi thành NodeWifi32.

smtpData.setSender(“NodeWifi32”, emailSenderAccount);

Đặt ưu tiên email.

smtpData.setPriority(“High”);

Đặt chủ đề email.

smtpData.setSubject(emailSubject);

Dòng sau đặt thông báo. Bạn có thể gửi văn bản HTML hoặc văn bản thô. Trong trường hợp này, chúng tôi đang gửi một tin nhắn với một số HTML.

smtpData.setMessage(“<div style=\”color:#2f4468;\”><h1>Hello World!</h1><p>- Sent from NodeWifi32 board</p></div>”, true);

Khi gửi tin nhắn ở định dạng HTML, bạn nên chuyển True như một tham số thứ hai cho setMessage() phương pháp. Nếu bạn muốn gửi văn bản thô, hãy đặt False.

//smtpData.setMessage(“Hello World! – Sent from NodeWifi32 board”, false);

Cuối cùng, đặt email người nhận. Đây là email sẽ nhận tin nhắn từ NodeWifi32.

smtpData.addRecipient(emailRecipient);

Bây giờ chúng tôi đã thiết lập tất cả các chi tiết của smtpData, chúng tôi đã sẵn sàng để gửi email.

if (!MailClient.sendMail(smtpData))
  Serial.println("Error sending Email, " + MailClient.smtpErrorReason());
Sau khi gửi email, bạn có thể xóa tất cả dữ liệu khỏi smtpData vật.
smtpData.empty();

Trong ví dụ này, email được gửi một lần khi NodeWifi32 khởi động, đó là lý do tại sao loop() trống rỗng.

void loop() 

{

}

Hiển Thị

Tải code xuống NodeWifi32 của bạn. Sau khi tải xuống, hãy mở Serial Monitor với tốc độ truyền là 115200. Nhấn nút RESET trên board NodeWifi32.

Nếu mọi thứ diễn ra như mong đợi, bạn sẽ nhận được một thông báo tương tự trong Serial Monitor.

Thông báo tương tự Serial Monitor

 

Kiểm tra tài khoản email của bạn. Bạn đã nhận được một email từ bảng NodeWifi32 của bạn.

Check tài khoản email

 

Nếu bạn đặt tùy chọn để gửi tin nhắn bằng văn bản HTML, thì tin nhắn bên trong sẽ:

Tin nhắn bên trong email

 

Nếu bạn đã bật tin nhắn văn bản thô, đây là email mà bạn sẽ nhận được.

Gửi File Đính Kèm Qua Email Với Node Wifi32 (Arduino IDE)

Trong phần này, chúng tôi sẽ chỉ cho bạn cách gửi File đính kèm trong email của bạn do Node Wifi32 gửi. Chúng tôi sẽ hướng dẫn cách gửi File .txt hoặc ảnh. Điều này có thể hữu ích để gửi File .txt với các kết quả đọc của cảm biến trong vài giờ qua hoặc gửi ảnh được chụp bởi Node Wifi32 – CAM .

Các File được gửi phải được lưu trên Node Wifi32 SPIFFS hoặc trong thẻ nhớ microSD. Trong ví dụ này, chúng tôi sẽ sử dụng SPIFFS (nhưng mã được cung cấp có thể được thay đổi để sử dụng thẻ microSD).

Tải Tệp Lên SPIFFS

Để gửi File qua email, các File này phải được lưu trên NodeWifi32 SPIFFS hoặc trong thẻ nhớ microSD. Chúng tôi sẽ tải ảnh và File .txt lên NodeWifi32 SPIFFS bằng cách truy cập vào link: https://randomnerdtutorials.com/install-esp32-filesystem-uploader-arduino-ide/ 

Làm theo hướng dẫn tiếp theo để cài đặt plugin nếu bạn chưa cài đặt nó:

https://randomnerdtutorials.com/install-esp32-filesystem-uploader-arduino-ide/

Tạo một bản phác thảo Arduino mới và lưu nó. Đi tới Sketch > Show Sketch thư mục. Bên trong thư mục phác thảo Arduino, tạo một thư mục có tên là dữ liệu . Di chuyển File jpg và File .txt vào thư mục dữ liệu của bạn .

Lưu ý: với mã mặc định, File của bạn phải được đặt tên là  NodeWifi32-CAM-Test.jpg và text file.txt hoặc bạn có thể sửa đổi mã để nhập File với tên khác.

Cấu trúc thư mục của bạn sẽ giống như sau ( thư mục dự án tải xuống ):

Tệp cấu trúc thư mục SPIFFS gửi tệp đính kèm qua email với ESP32

Sau khi di chuyển các File vào thư mục Data, trong Arduino IDE của bạn, hãy chuyển đến  Tools  >  NodeWifi32 Data Sketch Upload và đợi File được tải lên.

Upload

Bạn sẽ nhận được thông báo thành công trên cửa sổ gỡ lỗi. Nếu các File được tải lên thành công, hãy chuyển sang phần tiếp theo.

Hình ảnh đã hoàn tất tải lên thông báo thành công

Code

Đoạn code sau sẽ gửi một email có File .txt và hình ảnh được đính kèm. Trước khi tải mã lên, hãy đảm bảo rằng bạn chèn cài đặt email người gửi cũng như email người nhận.

/*
  Rui Santos
  Complete project details at https://RandomNerdTutorials.com/esp32-send-email-smtp-server-arduino-ide/
  Permission is hereby granted, free of charge, to any person obtaining a copy
  of this software and associated documentation files.
  The above copyright notice and this permission notice shall be included in all
  copies or substantial portions of the Software.
*/
#include "ESP32_MailClient.h"
#include "SD.h"
#include "SPIFFS.h"
// REPLACE WITH YOUR NETWORK CREDENTIALS
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";
// To send Email using Gmail use port 465 (SSL) and SMTP Server smtp.gmail.com
// YOU MUST ENABLE less secure app option https://myaccount.google.com/lesssecureapps?pli=1
#define emailSenderAccount    "EXAMPLE_EMAIL@gmail.com"
#define emailSenderPassword   "YOUR_EXAMPLE_EMAIL_PASSWORD"
#define emailRecipient        "YOUR_EMAIL_RECIPIENT@EXAMPLE.com"
#define smtpServer            "smtp.gmail.com"
#define smtpServerPort        465
#define emailSubject          "ESP32 Test Email with Attachments"
// The Email Sending data object contains config and data to send
SMTPData smtpData;
// Callback function to get the Email sending status
void sendCallback(SendStatus info);
void setup(){
  Serial.begin(115200);
  Serial.println();
  // Initialize SPIFFS
  if(!SPIFFS.begin(true)) {
    Serial.println("An Error has occurred while mounting SPIFFS");
    return;
  }
  // Or initialize SD Card (comment the preceding SPIFFS begin)
  /*
  MailClient.sdBegin(14, 2, 15, 13); // (SCK, MISO, MOSI, SS)
  if(!SD.begin()){
    Serial.println("Card Mount Failed");
    return "";
  }*/
  Serial.print("Connecting");
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(200);
  }
  Serial.println();
  Serial.println("WiFi connected.");
  Serial.println();
  Serial.println("Preparing to send email");
  Serial.println();
  // Set the SMTP Server Email host, port, account and password
  smtpData.setLogin(smtpServer, smtpServerPort, emailSenderAccount, emailSenderPassword);
  // For library version 1.2.0 and later which STARTTLS protocol was supported,the STARTTLS will be 
  // enabled automatically when port 587 was used, or enable it manually using setSTARTTLS function.
  //smtpData.setSTARTTLS(true);
  // Set the sender name and Email
  smtpData.setSender("NodeWifi32", emailSenderAccount);
  // Set Email priority or importance High, Normal, Low or 1 to 5 (1 is highest)
  smtpData.setPriority("High");
  // Set the subject
  smtpData.setSubject(emailSubject);
  // Set the message with HTML format
  smtpData.setMessage("<div style=\"color:#2f4468;\"><h1>Hello World!</h1><p>- Sent from NodeWifi32 board</p></div>", true);
  // Set the email message in text format (raw)
  //smtpData.setMessage("Hello World! - Sent from ESP32 board", false);
  // Add recipients, you can add more than one recipient
  smtpData.addRecipient(emailRecipient);
  //smtpData.addRecipient("YOUR_RECIPIENT_EMAIL_ADDRESS@example.com");
  // Add attach files from SD card or SPIFFS
  // Comment the next two lines, if no SPIFFS files created or SD card connected
  smtpData.addAttachFile("/NodeWifi32-CAM-Test.jpg", "image/jpg");
  smtpData.addAttachFile("/text_file.txt");
  // Add some custom header to message
  // See https://tools.ietf.org/html/rfc822
  // These header fields can be read from raw or source of message when it received)
  //smtpData.addCustomMessageHeader("Date: Sat, 10 Aug 2019 21:39:56 -0700 (PDT)");
  // Be careful when set Message-ID, it should be unique, otherwise message will not store
  //smtpData.addCustomMessageHeader("Message-ID: <abcde.fghij@gmail.com>");
  // Set the storage type to attach files in your email (SPIFFS or SD Card)
  smtpData.setFileStorageType(MailClientStorageType::SPIFFS);
  //smtpData.setFileStorageType(MailClientStorageType::SD);
  smtpData.setSendCallback(sendCallback);
  //Start sending Email, can be set callback function to track the status
  if (!MailClient.sendMail(smtpData))
    Serial.println("Error sending Email, " + MailClient.smtpErrorReason());
  //Clear all data from Email object to free memory
  smtpData.empty();
}
void loop() {
}
// Callback function to get the Email sending status
void sendCallback(SendStatus msg) {
  // Print the current status
  Serial.println(msg.info());
  // Do something when complete
  if (msg.success()) {
    Serial.println("----------------");
  }
}

Cách Code Hoạt Động

Code này rất giống với code trước, vì vậy chúng tôi sẽ chỉ xem xét các phần liên quan để gửi File đính kèm.

bên trong setup(), bạn cần khởi tạo SPIFFS:

if(!SPIFFS.begin(true)) {
  Serial.println("An Error has occurred while mounting SPIFFS");
  return;
}

Nếu bạn muốn gửi các File được lưu trên thẻ microSD, hãy bỏ ghi chú các dòng tiếp theo (đảm bảo bạn đã cắm đúng chỉ định chân cho thẻ microSD):

/*
MailClient.sdBegin(14, 2, 15, 13); // (SCK, MISO, MOSI, SS)
if(!SD.begin()){
  Serial.println("Card Mount Failed");
  return "";
}*/

Sau đó, để đính kèm File, bạn chỉ cần gọi addAtatachFile () trên smtpData đối tượng và chuyển làm đối số đường dẫn File. Ví dụ: hình ảnh chúng tôi gửi có tên là NodeWifi32-CAM-Test.jpg, vì vậy, hãy gửi nó như sau:

smtpData.addAttachFile(“/NodeWifi32-CAM-Test.jpg”, “image/jpg”);

Tệp văn bản chúng tôi muốn gửi được gọi là text_file.txt:

smtpData.addAttachFile(“/text_file.txt”);

Nếu bạn muốn gửi các File khác nhau, bạn chỉ cần thay đổi đường dẫn.

Cuối cùng, bạn cần đặt nơi lưu File của mình (SPIFFS hoặc thẻ SD). Chúng tôi đang sử dụng SPIFFS:

smtpData.setFileStorageType(MailClientStorageType::SPIFFS);

Nếu bạn muốn sử dụng thẻ SD, hãy nhận xét dòng trước và bỏ ghi chú sau:

//smtpData.setFileStorageType(MailClientStorageType::SD);

Và vậy là xong! Như bạn có thể thấy, mã lập trình để gửi File đính kèm qua email rất đơn giản.

Hiển Thị

Sau khi tải mã lên, hãy mở Serial Monitor với tốc độ truyền 115200 và nhấn nút EN / RESET trên bo mạch. Nếu mọi thứ suôn sẻ, bạn sẽ nhận được một thông báo tương tự trên Serial Monitor.

Gửi Email có tệp đính kèm Màn hình nối tiếp Arduino IDE

Kiểm tra địa chỉ email của người nhận. Bạn sẽ có một email mới với hai File đính kèm.

Email đã nhận

Kết Luận

Trong bài học này, bạn đã học cách gửi mail bằng ESP32 với Máy chủ SMTP. Để phương pháp này hoạt động, Node Wifi32 phải có quyền truy cập internet. Nếu bạn không muốn sử dụng Máy chủ SMTP, bạn cũng có thể viết tập lệnh PHP để gửi thông báo qua email với bảng Node Wifi32, ESP32 hoặc ESP8266. Bạn đã có thể gửi một email đơn giản với văn bản và File đính kèm. Khi sử dụng File đính kèm, chúng phải được lưu trên thẻ SD hoặc trên SPIFFS .

Các ví dụ được trình bày cho thấy cách gửi một email khi Node Wifi32 khởi động. Tuy nhiên, bạn có thể thử sửa đổi mã lập trình và đưa nó vào các dự án của riêng bạn. Ví dụ: bạn có thể gửi File .txt với các bài đọc cảm biến, gửi ảnh được chụp bằng Node Wifi32 – CAM, gửi email chứa dữ liệu, v.v… tùy theo ý tưởng sáng tạo của bạn

Chúng tôi hy vọng bài hướng dẫn này sẽ thú vị và bổ ích đối với bạn. Nếu bạn có bất kỳ ý kiến đóng góp hoặc thắc mắc gì thì có thể để lại bình luận phía dưới, chúng tôi sẽ hỗ trợ bạn nhanh nhất có thế!

Tags: ESP32, ESP32 arduino, Gửi mail bằng ESp32, Gửi mail bằng SMTP

Những bài liên quan

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Fill out this field
Fill out this field
Vui lòng nhập địa chỉ email hợp lệ.
You need to agree with the terms to proceed