@andrey4emk/npm-app-back-b24 0.5.13 → 0.5.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.js CHANGED
@@ -3,3 +3,4 @@ export * from "./bitrix24/b24.js"; // ре‑экспорт всех экспо
3
3
  export * from "./bitrix24/eventGet.js"; // и из нового файла eventGet.js
4
4
  export * from "./sendMessage/chatApp.js"; // и из chatApp.js
5
5
  export * from "./sendMessage/smsgold.js"; // и из smsGold.js
6
+ export * from "./sendMessage/email.js"; // и из email.js
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@andrey4emk/npm-app-back-b24",
3
- "version": "0.5.13",
3
+ "version": "0.5.14",
4
4
  "description": "Bitrix24 OAuth helpers for Node.js projects",
5
5
  "main": "index.js",
6
6
  "type": "module",
@@ -24,7 +24,8 @@
24
24
  "bitrix24/b24.js",
25
25
  "bitrix24/eventGet.js",
26
26
  "sendMessage/chatApp.js",
27
- "sendMessage/smsgold.js"
27
+ "sendMessage/smsgold.js",
28
+ "sendMessage/email.js"
28
29
  ],
29
30
  "dependencies": {
30
31
  "@bitrix24/b24jssdk": "^0.5.1",
@@ -0,0 +1,78 @@
1
+ import nodemailer from "nodemailer";
2
+
3
+ /**
4
+ * @param emailAuth - объект с данными для авторизации в почте
5
+ * @param emailAuth.user - пользователь (почта)
6
+ * @param emailAuth.pass - пароль или app password
7
+ */
8
+ export class Email {
9
+ constructor(emailAuth) {
10
+ this.transporter = nodemailer.createTransport({
11
+ auth: {
12
+ user: emailAuth.user,
13
+ pass: emailAuth.pass,
14
+ },
15
+ host: "smtp.yandex.ru",
16
+ port: 465, // 465 = SMTPS, 587 = STARTTLS
17
+ secure: true, // true для 465
18
+ // Рекомендуется пул соединений, если писем много:
19
+ // pool: true,
20
+ // maxConnections: 3,
21
+ // maxMessages: 50
22
+ });
23
+ }
24
+
25
+ /**
26
+ * @param dataMail
27
+ * @returns
28
+ */
29
+ async send(dataMail) {
30
+ try {
31
+ // Если прислали ссылку на файл, то скачиваем его и добавляем в attachments
32
+ if (dataMail.fileUrl) {
33
+ let resDownloadFile = await this.downloadFileToUrl(dataMail.fileUrl);
34
+ if (resDownloadFile.error) {
35
+ return { error: true, message: resDownloadFile.message };
36
+ }
37
+ dataMail.attachments = [
38
+ {
39
+ filename: dataMail.fileName,
40
+ content: resDownloadFile.buffer,
41
+ },
42
+ ];
43
+ } else {
44
+ // Ошибка с сообщением что нет ссылки на файл
45
+ return { error: true, message: "Нет ссылки на файл fileUrl" };
46
+ }
47
+
48
+ const info = await this.transporter.sendMail({
49
+ from: `Натяжные потолки Репа. <${this.emailAuth.user}>`, // адрес отправителя
50
+ to: [dataMail.to, this.emailAuth.user], // строка или массив адресов
51
+ subject: dataMail.subject,
52
+ text: dataMail.text,
53
+ html: dataMail.html, // html-версия
54
+ attachments: dataMail.attachments,
55
+ });
56
+ return { error: false, info };
57
+ } catch (error) {
58
+ return { error: true, message: error.message };
59
+ }
60
+ }
61
+
62
+ async downloadFileToUrl(fileUrl) {
63
+ try {
64
+ const response = await fetch(fileUrl);
65
+ if (!response.ok) {
66
+ throw new Error(`HTTP error! status: ${response.status}`);
67
+ }
68
+ const arrayBuffer = await response.arrayBuffer();
69
+ const buffer = Buffer.from(arrayBuffer);
70
+
71
+ // Возвращаем буфер
72
+ return { error: false, buffer: buffer };
73
+ } catch (error) {
74
+ logs.add(`Ошибка при скачивании файла по fileUrl: ${error.message}`, "error");
75
+ return { error: true, message: `Ошибка при скачивании файла по fileUrl: ${error.message}` };
76
+ }
77
+ }
78
+ }