diff --git a/app/utils/runtimeCheckLogs.ts b/app/utils/runtimeCheckLogs.ts
index bc09fbb..2b29ecd 100644
--- a/app/utils/runtimeCheckLogs.ts
+++ b/app/utils/runtimeCheckLogs.ts
@@ -38,9 +38,9 @@ export async function runtimeCheckLogs(folderPath) {
       try {
         const regex = /\(CAT3K_CAA-UNIVERSALK9-M\), Version 16\.9\.[2-9]/;
         const regex1 =
-          /\(CAT3K_CAA-UNIVERSALK9-M\), Version 1[7-9]\.[0-9]\.[2-9]/;
+          /\(CAT3K_CAA-UNIVERSALK9-M\), Version 1[7-9]\.[0-9]\.[0-9]/;
         const regex2 =
-          /\(CAT3K_CAA-UNIVERSALK9-M\), Version [2-9][0-9]\.[0-9]\.[2-9]/;
+          /\(CAT3K_CAA-UNIVERSALK9-M\), Version [2-9][0-9]\.[0-9]\.[0-9]/;
         // Use the regular expression to find the match
         const match = paragraph.match(regex);
         const match1 = paragraph.match(regex1);
diff --git a/app/utils/sendDeviceInfor.ts b/app/utils/sendDeviceInfor.ts
new file mode 100644
index 0000000..26d7c61
--- /dev/null
+++ b/app/utils/sendDeviceInfor.ts
@@ -0,0 +1,315 @@
+import Env from '@ioc:Adonis/Core/Env';
+import fs from "fs";
+import moment from "moment/moment";
+import dotenv from "dotenv";
+import nodeMailer from "nodemailer";
+dotenv.config();
+
+export const sendDeviceInfora = async () => {
+  try {
+    //Regex check show inventory
+    const regexInventory = /sh.*? inv.*/;
+    //Regex check show version
+    const regexVersion = /sh.*? ver.*/;
+    const regexMemory = /(\d+)K/g;
+    const date = moment(Date.now()).format("YYYYMMDD");
+    const listInformation = [];
+    let html = "";
+    //List file today
+    const listFile = fs
+      .readdirSync(Env.get('FOLDER_LOGS'))
+      .filter((f) => f.includes("TEST01"));
+
+    //Configure mail
+    const transporter = nodeMailer.createTransport({
+      pool: true,
+      host: "mail.ipsupply.com.au",
+      port: 465,
+      secure: true,
+      auth: {
+        user: "admin@apactech.io",
+        pass: "BGK!dyt6upd2eax1bhz",
+      },
+    });
+
+    //Read file in listFile
+    await listFile.map((file) => {
+      fs.readFile(Env.get('FOLDER_LOGS') + "/" + file, "utf8", (err, data) => {
+        if (err) {
+          console.log(`Error reading file: ${err}`);
+        } else {
+          //Array line
+          const lines = data?.split("\n");
+          const linesInventory = [];
+          //Get index of "lines" with show inv
+          lines?.map((line, index) => {
+            if (line.match(regexInventory) !== null) {
+              linesInventory.push(index);
+            }
+          });
+          // console.log(linesInventory);
+          //cut content with content1 = [linesInventory[index],linesInventory[index+1]] ...
+          linesInventory?.map((line, index) => {
+            const deviceContent = lines?.slice(
+              linesInventory[index],
+              linesInventory[index + 1]
+            );
+            const showInventory = [];
+            let check = true;
+            let begin = 0;
+            let end = 4;
+
+            //get showInventory content
+            while (check === true) {
+              if (
+                deviceContent
+                  .slice(begin, end)
+                  .filter(
+                    (i) =>
+                      i.includes("PID:") &&
+                      i.includes("VID:") &&
+                      i.includes("SN:")
+                  ).length > 0
+              ) {
+                showInventory.push(deviceContent.slice(begin, end).join("\n"));
+                begin = end;
+                end = end + 4;
+              } else {
+                check = false;
+              }
+            }
+
+            const showInventoryContent = showInventory
+              .join("\n")
+              .split("\n")
+              .filter(
+                (i) =>
+                  i.includes("PID:") && i.includes("VID:") && i.includes("SN:")
+              );
+
+            //show version exists
+            if (
+              deviceContent.filter((line) => line.match(regexVersion) !== null)
+                .length > 0
+            ) {
+              const lineShowver = deviceContent.indexOf(
+                deviceContent.filter(
+                  (line) => line.match(regexVersion) !== null
+                )[0]
+              );
+
+              const showVersion = deviceContent.slice(
+                lineShowver,
+                deviceContent.indexOf(
+                  deviceContent.filter(
+                    (line) => line.search("Configuration register") !== -1
+                  )[0]
+                ) + 1
+              );
+
+              showInventoryContent.map((u, index) => {
+                const PID = u
+                  ?.split("VID:")[0]
+                  ?.split("PID:")[1]
+                  ?.replace(/,/g, "")
+                  .trim();
+                const VID = u
+                  ?.split("VID:")[1]
+                  ?.split("SN:")[0]
+                  ?.replace(/,/g, "")
+                  .trim();
+                const SN = u?.split("SN:")[1]?.replace(/,/g, "").trim();
+                //   let memory =
+                if (index > 0) {
+                  if (PID !== "" && SN !== "") {
+                    let RAM =
+                      (
+                        parseInt(
+                          showVersion
+                            .filter((line) => line.includes("bytes of memory"))
+                            .join("
")
+                            .match(regexMemory)[0]
+                        ) /
+                        1024 /
+                        1024
+                      ).toFixed(2) + "G";
+
+                    let flash = showVersion
+                      .filter((line) =>
+                        line.toLocaleLowerCase().includes("compactflash")
+                      )
+                      .join("
");
+                    listInformation.push({
+                      PID: PID,
+                      VID: VID,
+                      SN: SN,
+                      RAM: RAM,
+                      flash:
+                        flash.match(regexMemory) !== null
+                          ? (
+                              parseInt(flash.match(regexMemory)[0]) /
+                              1024 /
+                              1024
+                            ).toFixed(2) + "G"
+                          : "",
+                      extraItem: "yes",
+                    });
+
+                    html += `
| PID | \ +VID | \ +SN | \ +RAM | \ +Flash | \ +Extra Item | \ +
|---|