iobroker.imap 0.3.0 → 0.4.0
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/LICENSE +1 -1
- package/README.md +15 -80
- package/admin/i18n/de/translations.json +9 -9
- package/admin/i18n/en/translations.json +1 -1
- package/admin/jsonConfig.json +1 -1
- package/io-package.json +41 -20
- package/lib/helper.js +6 -6
- package/lib/imap_event.js +23 -4
- package/lib/translator.js +33 -33
- package/main.js +7 -4
- package/package.json +17 -29
package/LICENSE
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
MIT License
|
|
2
2
|
|
|
3
|
-
Copyright (c) 2023-
|
|
3
|
+
Copyright (c) 2023-2026 Lucky-ESA <github@luckyskills.de>
|
|
4
4
|
|
|
5
5
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
6
|
of this software and associated documentation files (the "Software"), to deal
|
package/README.md
CHANGED
|
@@ -30,9 +30,9 @@
|
|
|
30
30
|
|
|
31
31
|
## Requirements
|
|
32
32
|
|
|
33
|
-
- Node
|
|
34
|
-
- JS-Controller >=
|
|
35
|
-
- Admin >=
|
|
33
|
+
- Node 22 or 24
|
|
34
|
+
- JS-Controller >= 7.0.7
|
|
35
|
+
- Admin >= 7.8.23
|
|
36
36
|
- ~150 MB free ram
|
|
37
37
|
|
|
38
38
|
## Tested with
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
- gmail [app-password](https://support.google.com/mail/answer/185833?hl=de)
|
|
42
42
|
- vodafone
|
|
43
43
|
- strato
|
|
44
|
-
- outlook (e. g. [
|
|
44
|
+
- outlook (e. g. [OAuth 2.0 authorization](https://learn.microsoft.com/en-us/entra/identity-platform/quickstart-register-app?tabs=certificate))
|
|
45
45
|
|
|
46
46
|
## Description
|
|
47
47
|
|
|
@@ -58,6 +58,15 @@
|
|
|
58
58
|
-->
|
|
59
59
|
|
|
60
60
|
## Changelog
|
|
61
|
+
|
|
62
|
+
### 0.4.0 (2026-05-30)
|
|
63
|
+
|
|
64
|
+
- (copilot) Adapter requires node.js >= 22 now
|
|
65
|
+
- (Lucky-ESA) Description revised
|
|
66
|
+
- (Lucky-ESA) Admin 7.8.23 required
|
|
67
|
+
- (Lucky-ESA) JS-Controller 7.0.7 required
|
|
68
|
+
- (Lucky-ESA) Added meta object for attachments
|
|
69
|
+
|
|
61
70
|
### 0.3.0 (2024-12-07)
|
|
62
71
|
|
|
63
72
|
- (Lucky-ESA) Mailbox folder delete added
|
|
@@ -83,87 +92,13 @@
|
|
|
83
92
|
- (Lucky-ESA) JS-Controller >= 5.0.19 required
|
|
84
93
|
- (Lucky-ESA) Admin >=6.13.16 required
|
|
85
94
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
- (Lucky-ESA) Fixed setFlag
|
|
89
|
-
- (Lucky-ESA) Fixed sendTo error during instance deletion ([#57](https://github.com/Lucky-ESA/ioBroker.imap/issues/57))
|
|
90
|
-
- (Lucky-ESA) Mass email shift intercepted
|
|
91
|
-
|
|
92
|
-
### 0.1.2 (2024-01-24)
|
|
93
|
-
|
|
94
|
-
- (Lucky-ESA) Added missing translate
|
|
95
|
-
- (Lucky-ESA) Updated package
|
|
96
|
-
- (Lucky-ESA) Bug fixes
|
|
97
|
-
|
|
98
|
-
### 0.1.1 (2023-09-11)
|
|
99
|
-
|
|
100
|
-
- (Lucky-ESA) Delete wrong error parse message
|
|
101
|
-
|
|
102
|
-
### 0.1.0 (2023-09-06)
|
|
103
|
-
|
|
104
|
-
- (Lucky-ESA) Added RAM consumption - Instance Settings
|
|
105
|
-
- (Lucky-ESA) Added german documention
|
|
106
|
-
- (Lucky-ESA) Added Mailparser options
|
|
107
|
-
- (Lucky-ESA) Added counter history
|
|
108
|
-
- (Lucky-ESA) Bug fixes
|
|
109
|
-
|
|
110
|
-
### 0.0.9 (2023-07-26)
|
|
111
|
-
|
|
112
|
-
- (Lucky-ESA) Fixed RAM consumption of new emails
|
|
113
|
-
- (Lucky-ESA) Added counter attachments in JSON
|
|
114
|
-
|
|
115
|
-
### 0.0.8 (2023-07-13)
|
|
116
|
-
|
|
117
|
-
- (Lucky-ESA) Fix refresh crash
|
|
118
|
-
- (Lucky-ESA) Added MB threshold
|
|
119
|
-
|
|
120
|
-
### 0.0.7 (2023-04-25)
|
|
121
|
-
|
|
122
|
-
- (Lucky-ESA) Fix correct counter for seen and unseen
|
|
123
|
-
- (Lucky-ESA) Added capabilities
|
|
124
|
-
- (Lucky-ESA) Criteria change without restart
|
|
125
|
-
- (Lucky-ESA) Added outlook.office365.com oauth2 login
|
|
126
|
-
- (Lucky-ESA) Added Connection.js from Module to Adapter
|
|
127
|
-
- (Lucky-ESA) Bug fixes
|
|
128
|
-
|
|
129
|
-
### 0.0.6 (2023-03-17)
|
|
130
|
-
|
|
131
|
-
- (Lucky-ESA) Added trigger move or copy emails
|
|
132
|
-
- (Lucky-ESA) Added JSON for multiple IMAP accounts
|
|
133
|
-
- (Lucky-ESA) Bug fixes
|
|
134
|
-
|
|
135
|
-
### 0.0.5 (2023-03-15)
|
|
136
|
-
|
|
137
|
-
- (Lucky-ESA) Added: Limited reconnected (5 max)
|
|
138
|
-
- (Lucky-ESA) Added: into datapoints
|
|
139
|
-
- (Lucky-ESA) Added: Password entry not possible without an active instance
|
|
140
|
-
- (Lucky-ESA) Added: Added description to readme
|
|
141
|
-
- (Lucky-ESA) Added: Added move or copy
|
|
142
|
-
- (Lucky-ESA) Added: Set flag with datapoints
|
|
143
|
-
- (Lucky-ESA) Fix: debug output without attachments
|
|
144
|
-
- (Lucky-ESA) Fix: wrong json_table
|
|
145
|
-
- (Lucky-ESA) Fix: value null
|
|
146
|
-
- (Lucky-ESA) Change: Reconnected change info level to debug level
|
|
147
|
-
- (Lucky-ESA) Change: correct dp roles
|
|
148
|
-
- (Lucky-ESA) Change: delete attachments (too much RAM usage)
|
|
149
|
-
|
|
150
|
-
### 0.0.4 (2023-03-03)
|
|
151
|
-
|
|
152
|
-
- (Lucky-ESA) Fix json_table
|
|
153
|
-
|
|
154
|
-
### 0.0.3 (2023-03-03)
|
|
155
|
-
|
|
156
|
-
- (Lucky-ESA) Beta release
|
|
157
|
-
|
|
158
|
-
### 0.0.2 (2023-03-03)
|
|
159
|
-
|
|
160
|
-
- (Lucky-ESA) initial release
|
|
95
|
+
[Older changelogs can be found there](CHANGELOG_OLD.md)
|
|
161
96
|
|
|
162
97
|
## License
|
|
163
98
|
|
|
164
99
|
MIT License
|
|
165
100
|
|
|
166
|
-
Copyright (c) 2023-
|
|
101
|
+
Copyright (c) 2023-2026 Lucky-ESA <github@luckyskills.de>
|
|
167
102
|
|
|
168
103
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
169
104
|
of this software and associated documentation files (the "Software"), to deal
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"MAX": "Wie viele E-Mails sollen als Datenpunkte angelegt werden?",
|
|
15
15
|
"max_html": "max. HTML",
|
|
16
16
|
"MAX_HTML": "Wie viele E-Mails sollen als HTML erstellt werden?",
|
|
17
|
-
"token": "
|
|
17
|
+
"token": "Token",
|
|
18
18
|
"TOKEN": "Token für die xoauth2-Anmeldung",
|
|
19
19
|
"tls": "TLS",
|
|
20
20
|
"TLS": "TLS aktivieren",
|
|
@@ -39,11 +39,11 @@
|
|
|
39
39
|
"UNFLAGGED": "ungekennzeichnet",
|
|
40
40
|
"UNSEEN": "ungesehen",
|
|
41
41
|
"inbox": "Posteingang",
|
|
42
|
-
"INBOX": "
|
|
42
|
+
"INBOX": "Posteingang asuwählen",
|
|
43
43
|
"Tab icons": "Symbole erstellen",
|
|
44
44
|
"Info icons": "Ordnersymbol hochladen.",
|
|
45
45
|
"iconname": "Symbolname",
|
|
46
|
-
"ICONNAME": "Name des Symbols (z.
|
|
46
|
+
"ICONNAME": "Name des Symbols (z. B. Google Mail)",
|
|
47
47
|
"Tab Hosts": "IMAPs erstellen",
|
|
48
48
|
"icon64": "Symbol auswählen",
|
|
49
49
|
"ICON64": "Symbol auswählen",
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
"TLS_OPTION": "Options-Objekt, das an tls.connect() übergeben werden soll",
|
|
52
52
|
"auto_tls": "Auto-TLS",
|
|
53
53
|
"AUTO_TLS": "Auf „immer“ setzen, um immer Verbindungs-Upgrades über STARTTLS zu versuchen, „erforderlich“, nur wenn ein Upgrade erforderlich ist, oder „nie“, um nie ein Upgrade zu versuchen.",
|
|
54
|
-
"Tab oauth": "
|
|
54
|
+
"Tab oauth": "Oauth2 Autorisierung",
|
|
55
55
|
"Tab oauth2": "Login-oauth2-Daten",
|
|
56
56
|
"provider": "Anbieter",
|
|
57
57
|
"PROVIDER": "Anbieter",
|
|
@@ -71,22 +71,22 @@
|
|
|
71
71
|
"selection": "Auswahl",
|
|
72
72
|
"TELEGRAM": "Senden",
|
|
73
73
|
"RESTART": "Neu starten",
|
|
74
|
-
"DATAPOINT": "
|
|
74
|
+
"DATAPOINT": "Objekt-ID",
|
|
75
75
|
"telegram_tooltip": "Instanz (Mehrere durch Komma trennen - z. B. Telegramm.0, Telegramm.1)",
|
|
76
76
|
"Tab Nodemailer": "Mailparser-Optionen",
|
|
77
77
|
"Info Nodemailer": "Mailparser-Optionen",
|
|
78
78
|
"node_option": "Mail-Option",
|
|
79
79
|
"node_option_tt": "Mailparser-Optionen",
|
|
80
80
|
"skipHtmlToText": "HTML in Text überspringen",
|
|
81
|
-
"skipHtmlToText_tt": "
|
|
81
|
+
"skipHtmlToText_tt": "Keinen Klartext aus HTML generieren",
|
|
82
82
|
"maxHtmlLengthToParse": "Maximale HTML-Länge zum Parsen",
|
|
83
83
|
"maxHtmlLengthToParse_tt": "Die maximale Menge an zu analysierendem HTML in Bytes",
|
|
84
84
|
"skipImageLinks": "Bildlinks überspringen",
|
|
85
|
-
"skipImageLinks_tt": "
|
|
85
|
+
"skipImageLinks_tt": "Die Konvertierung von CID-Anhängen in Daten-URL-Bilder überspringen",
|
|
86
86
|
"skipTextToHtml": "Text in HTML überspringen",
|
|
87
|
-
"skipTextToHtml_tt": "
|
|
87
|
+
"skipTextToHtml_tt": "Kein HTML aus Klartextnachrichten generieren",
|
|
88
88
|
"skipTextLinks": "Textlinks überspringen",
|
|
89
|
-
"skipTextLinks_tt": "
|
|
89
|
+
"skipTextLinks_tt": "Keine Links in Klartextinhalten verlinken",
|
|
90
90
|
"nodename": "Name",
|
|
91
91
|
"NODENAME": "Name vom Mailparser"
|
|
92
92
|
}
|
|
@@ -71,7 +71,7 @@
|
|
|
71
71
|
"selection": "Selection",
|
|
72
72
|
"TELEGRAM": "Send",
|
|
73
73
|
"RESTART": "Restart",
|
|
74
|
-
"DATAPOINT": "
|
|
74
|
+
"DATAPOINT": "Object-ID",
|
|
75
75
|
"telegram_tooltip": "Instance (separate multiples with a comma - e.g. telegram.0, telegram.1)",
|
|
76
76
|
"Tab Nodemailer": "Mailparser options",
|
|
77
77
|
"Info Nodemailer": "Mailparser options",
|
package/admin/jsonConfig.json
CHANGED
package/io-package.json
CHANGED
|
@@ -1,8 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"common": {
|
|
3
3
|
"name": "imap",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.4.0",
|
|
5
5
|
"news": {
|
|
6
|
+
"0.4.0": {
|
|
7
|
+
"en": "Adapter requires node.js >= 22 now\nDescription revised\nAdmin 7.8.23 required\nJS-Controller 7.0.7 required\nAdded meta object for attachments",
|
|
8
|
+
"de": "Adapter benötigt node.js >= 22 jetzt\nBeschreibung überarbeitet\nAdmin 7.8.23 erforderlich\nJS-Controller 7.0.7 erforderlich\nMeta-Objekt für Anhänge hinzugefügt",
|
|
9
|
+
"ru": "Адаптер требует node.js >= 22 сейчас\nПересмотренное описание\nТребуется администратор 7.8.23\nТребуется JS-контроллер 7.0.7\nДобавлен мета-объект для вложений",
|
|
10
|
+
"pt": "Adaptador requer nod.js >= 22 agora\nDescrição revista\nAdministração 7.8.23 necessária\nJS-Controller 7.0.7 requerido\nAdicionado meta- objeto para anexos",
|
|
11
|
+
"nl": "Voor de adapter zijn node.js < 22 nu nodig\nOmschrijving herzien\nBeheerder 7.8.23 vereist\nJS-Controller 7.0. vereist\nMeta-object toegevoegd voor bijlagen",
|
|
12
|
+
"fr": "Adaptateur nécessite node.js >= 22 maintenant\nDescription révisée\nAdmin 7.8.23 requis\nJS-Contrôleur 7.0.7 requis\nAjout d'un objet méta pour les pièces jointes",
|
|
13
|
+
"it": "Adattatore richiede node.js >= 22 ora\nDesignazione delle merci\nAdmin 7.8.23 richiesto\nJS-Controller 7.0.7 richiesto\nAggiunto meta oggetto per allegati",
|
|
14
|
+
"es": "Adaptador requiere node.js ю= 22 ahora\nDescripción revisada\nAdmin 7.8.23 requerido\nJS-Controller 7.0.7 required\nAñadido meta objeto para apegos",
|
|
15
|
+
"pl": "Adapter wymaga node.js > = 22\nOpis zmieniony\nWymagany admin 7.8.23\nWymagany kontroler JS- 7.0.7\nDodano obiekt meta dla załączników",
|
|
16
|
+
"uk": "Адаптер вимагає node.js >= 22 тепер\nОпис переглянуті\nАдміністратор 7.8.23 потрібно\nJS-Controller 7.0.7 потрібно\nДодано об'єкт мета для вкладення",
|
|
17
|
+
"zh-cn": "适配器需要节点.js 现在22\n订正说明\n所需行政费7.8.23\n联合来文主计长\n为附件添加元对象"
|
|
18
|
+
},
|
|
6
19
|
"0.3.0": {
|
|
7
20
|
"en": "Mailbox folder delete added\nMailbox folder create added\nChange Mailbox Folder name added\nIMAP package changed\nMigration to ESLint9",
|
|
8
21
|
"de": "Mailbox Ordner löschen hinzugefügt\nMailbox Ordner erstellen hinzugefügt\nMailbox ändern Ordnername hinzugefügt\nIMAP Paket geändert\nMigration auf ESLint9",
|
|
@@ -80,19 +93,6 @@
|
|
|
80
93
|
"pl": "Dodano brak tłumaczenia\nAktualizacja pakietu\nPoprawki błędów",
|
|
81
94
|
"uk": "Додати відсутній переклад\nОновлений пакет\nВиправлення помилок",
|
|
82
95
|
"zh-cn": "缺少翻译\n更新软件包\n错误修正"
|
|
83
|
-
},
|
|
84
|
-
"0.1.1": {
|
|
85
|
-
"en": "Delete wrong error parse message",
|
|
86
|
-
"de": "Falsche Fehlermeldung löschen",
|
|
87
|
-
"ru": "Удалить неправильная ошибка parse сообщение",
|
|
88
|
-
"pt": "Excluir mensagem de análise de erro errada",
|
|
89
|
-
"nl": "Verwijder de verkeerde foute boodschap",
|
|
90
|
-
"fr": "Supprimer le message erroné",
|
|
91
|
-
"it": "Cancella messaggio di parse errore sbagliato",
|
|
92
|
-
"es": "Eliminar el mensaje de error incorrecto",
|
|
93
|
-
"pl": "Delete error pars",
|
|
94
|
-
"uk": "Видалити неправильне повідомлення про помилку",
|
|
95
|
-
"zh-cn": "删除错误的信息稀少"
|
|
96
96
|
}
|
|
97
97
|
},
|
|
98
98
|
"titleLang": {
|
|
@@ -161,12 +161,12 @@
|
|
|
161
161
|
},
|
|
162
162
|
"dependencies": [
|
|
163
163
|
{
|
|
164
|
-
"js-controller": ">=
|
|
164
|
+
"js-controller": ">=7.0.7"
|
|
165
165
|
}
|
|
166
166
|
],
|
|
167
167
|
"globalDependencies": [
|
|
168
168
|
{
|
|
169
|
-
"admin": ">=6.
|
|
169
|
+
"admin": ">=7.6.17"
|
|
170
170
|
}
|
|
171
171
|
]
|
|
172
172
|
},
|
|
@@ -183,15 +183,36 @@
|
|
|
183
183
|
"max_mb_last_restart": 0
|
|
184
184
|
},
|
|
185
185
|
"encryptedNative": [
|
|
186
|
-
"password",
|
|
187
|
-
"secureid"
|
|
186
|
+
"hosts.password",
|
|
187
|
+
"oauth_token.secureid"
|
|
188
188
|
],
|
|
189
189
|
"protectedNative": [
|
|
190
|
-
"password",
|
|
191
|
-
"secureid"
|
|
190
|
+
"hosts.password",
|
|
191
|
+
"oauth_token.secureid"
|
|
192
192
|
],
|
|
193
193
|
"objects": [],
|
|
194
194
|
"instanceObjects": [
|
|
195
|
+
{
|
|
196
|
+
"_id": "",
|
|
197
|
+
"type": "meta",
|
|
198
|
+
"common": {
|
|
199
|
+
"name": {
|
|
200
|
+
"en": "Meta storage for user files",
|
|
201
|
+
"de": "Meta-Speicher für Benutzerdateien",
|
|
202
|
+
"ru": "Meta Storage для файлов пользователей",
|
|
203
|
+
"pt": "Meta de armazenamento para arquivos de usuário",
|
|
204
|
+
"nl": "Meta opslag voor gebruikersbestanden",
|
|
205
|
+
"fr": "Stockage Meta pour les fichiers utilisateur",
|
|
206
|
+
"it": "Meta storage per i file utente",
|
|
207
|
+
"es": "Meta almacenamiento para archivos de usuario",
|
|
208
|
+
"pl": "Meta storage for user files",
|
|
209
|
+
"uk": "Зберігання мета для файлів користувачів",
|
|
210
|
+
"zh-cn": "用户档案的储存"
|
|
211
|
+
},
|
|
212
|
+
"type": "meta.user"
|
|
213
|
+
},
|
|
214
|
+
"native": {}
|
|
215
|
+
},
|
|
195
216
|
{
|
|
196
217
|
"_id": "info",
|
|
197
218
|
"type": "channel",
|
package/lib/helper.js
CHANGED
|
@@ -451,7 +451,7 @@ module.exports = {
|
|
|
451
451
|
role: "button",
|
|
452
452
|
name: this.helper_translator("Apply selection"),
|
|
453
453
|
desc: "Create by Adapter",
|
|
454
|
-
read:
|
|
454
|
+
read: false,
|
|
455
455
|
write: true,
|
|
456
456
|
def: false,
|
|
457
457
|
};
|
|
@@ -491,7 +491,7 @@ module.exports = {
|
|
|
491
491
|
role: "button",
|
|
492
492
|
name: this.helper_translator("Apply selection"),
|
|
493
493
|
desc: "Create by Adapter",
|
|
494
|
-
read:
|
|
494
|
+
read: false,
|
|
495
495
|
write: true,
|
|
496
496
|
def: false,
|
|
497
497
|
};
|
|
@@ -501,7 +501,7 @@ module.exports = {
|
|
|
501
501
|
role: "button",
|
|
502
502
|
name: this.helper_translator("Apply selection"),
|
|
503
503
|
desc: "Create by Adapter",
|
|
504
|
-
read:
|
|
504
|
+
read: false,
|
|
505
505
|
write: true,
|
|
506
506
|
def: false,
|
|
507
507
|
};
|
|
@@ -531,7 +531,7 @@ module.exports = {
|
|
|
531
531
|
role: "button",
|
|
532
532
|
name: this.helper_translator("Start new search"),
|
|
533
533
|
desc: "Create by Adapter",
|
|
534
|
-
read:
|
|
534
|
+
read: false,
|
|
535
535
|
write: true,
|
|
536
536
|
def: false,
|
|
537
537
|
};
|
|
@@ -541,7 +541,7 @@ module.exports = {
|
|
|
541
541
|
role: "button",
|
|
542
542
|
name: this.helper_translator("Reload emails"),
|
|
543
543
|
desc: "Create by Adapter",
|
|
544
|
-
read:
|
|
544
|
+
read: false,
|
|
545
545
|
write: true,
|
|
546
546
|
def: false,
|
|
547
547
|
};
|
|
@@ -551,7 +551,7 @@ module.exports = {
|
|
|
551
551
|
role: "button",
|
|
552
552
|
name: this.helper_translator("Apply html changes"),
|
|
553
553
|
desc: "Create by Adapter",
|
|
554
|
-
read:
|
|
554
|
+
read: false,
|
|
555
555
|
write: true,
|
|
556
556
|
def: false,
|
|
557
557
|
};
|
package/lib/imap_event.js
CHANGED
|
@@ -33,7 +33,7 @@ module.exports = {
|
|
|
33
33
|
val: JSON.stringify(mailbox),
|
|
34
34
|
ack: true,
|
|
35
35
|
});
|
|
36
|
-
await this.loadAllSeqno(client, "INBOX");
|
|
36
|
+
await this.loadAllSeqno(client, "INBOX", false);
|
|
37
37
|
if (this.clients[client].serverSupports("SORT")) {
|
|
38
38
|
this.readMailsSort(client);
|
|
39
39
|
} else {
|
|
@@ -342,6 +342,7 @@ module.exports = {
|
|
|
342
342
|
this.clientsRaw[client].onExpunge = 0;
|
|
343
343
|
this.clientsRaw[client].isonExpunge = false;
|
|
344
344
|
}, 1000);
|
|
345
|
+
this.updateTotal(client, this.clientsRaw[client].inbox_activ);
|
|
345
346
|
},
|
|
346
347
|
/**
|
|
347
348
|
* Event if UIDs in this mailbox have changed since the last time this mailbox was opened.
|
|
@@ -709,6 +710,24 @@ module.exports = {
|
|
|
709
710
|
this.log_translator("info", "No Update", seqno, client, JSON.stringify(info));
|
|
710
711
|
}
|
|
711
712
|
this.setTotal(client, this.clientsRaw[client].inbox_activ);
|
|
713
|
+
this.updateTotal(client, this.clientsRaw[client].inbox_activ);
|
|
714
|
+
},
|
|
715
|
+
/**
|
|
716
|
+
* Update eMails total
|
|
717
|
+
*
|
|
718
|
+
* @param {string} client device id
|
|
719
|
+
* @param {string} folder actual inbox
|
|
720
|
+
*/
|
|
721
|
+
async updateTotal(client, folder) {
|
|
722
|
+
this.totalTimeout[client] && this.clearTimeout(this.totalTimeout[client]);
|
|
723
|
+
this.totalTimeout[client] = null;
|
|
724
|
+
this.totalTimeout[client] = this.setTimeout(async () => {
|
|
725
|
+
const all_mail = await this.loadAllSeqno(client, folder, true);
|
|
726
|
+
await this.setState(`${client}.total`, {
|
|
727
|
+
val: typeof all_mail === "object" ? all_mail.length : 0,
|
|
728
|
+
ack: true,
|
|
729
|
+
});
|
|
730
|
+
}, 5 * 1000);
|
|
712
731
|
},
|
|
713
732
|
/**
|
|
714
733
|
* @param {object} attrs
|
|
@@ -933,7 +952,7 @@ module.exports = {
|
|
|
933
952
|
},
|
|
934
953
|
/**
|
|
935
954
|
* @param {string} client device id
|
|
936
|
-
* @param {
|
|
955
|
+
* @param {string} folder Folder Name
|
|
937
956
|
*/
|
|
938
957
|
changeFolder(client, folder) {
|
|
939
958
|
if (folder == this.clientsRaw[client].inbox_activ) {
|
|
@@ -955,7 +974,7 @@ module.exports = {
|
|
|
955
974
|
val: JSON.stringify(mailbox),
|
|
956
975
|
ack: true,
|
|
957
976
|
});
|
|
958
|
-
await this.loadAllSeqno(client, this.clientsRaw[client].inbox_activ);
|
|
977
|
+
await this.loadAllSeqno(client, this.clientsRaw[client].inbox_activ, false);
|
|
959
978
|
if (this.clients[client].serverSupports("SORT")) {
|
|
960
979
|
this.readMailsSort(client);
|
|
961
980
|
} else {
|
|
@@ -978,7 +997,7 @@ module.exports = {
|
|
|
978
997
|
val: JSON.stringify(mailbox),
|
|
979
998
|
ack: true,
|
|
980
999
|
});
|
|
981
|
-
await this.loadAllSeqno(client, this.clientsRaw[client].inbox_activ);
|
|
1000
|
+
await this.loadAllSeqno(client, this.clientsRaw[client].inbox_activ, false);
|
|
982
1001
|
if (this.clients[client].serverSupports("SORT")) {
|
|
983
1002
|
this.readMailsSort(client);
|
|
984
1003
|
} else {
|
package/lib/translator.js
CHANGED
|
@@ -78,17 +78,17 @@ exports.trans = {
|
|
|
78
78
|
"zh-cn": "Change common %s",
|
|
79
79
|
},
|
|
80
80
|
Datapoint: {
|
|
81
|
-
en: "
|
|
82
|
-
de: "
|
|
83
|
-
ru: "
|
|
84
|
-
pt: "
|
|
85
|
-
nl: "
|
|
86
|
-
fr: "
|
|
87
|
-
it: "
|
|
88
|
-
es: "
|
|
89
|
-
pl: "
|
|
90
|
-
uk: "
|
|
91
|
-
"zh-cn": "
|
|
81
|
+
en: "Object: %s",
|
|
82
|
+
de: "Gegenstand: %s",
|
|
83
|
+
ru: "Объект: %s",
|
|
84
|
+
pt: "Objeto: %s",
|
|
85
|
+
nl: "Doel: %s",
|
|
86
|
+
fr: "Objet: %s",
|
|
87
|
+
it: "Oggetto: %s",
|
|
88
|
+
es: "Objeto: %s",
|
|
89
|
+
pl: "Obiekt: %s",
|
|
90
|
+
uk: "Об'єкт: %s",
|
|
91
|
+
"zh-cn": "对象: %s",
|
|
92
92
|
},
|
|
93
93
|
"Reload emails": {
|
|
94
94
|
en: "Reload emails (e.g. after HTML changes)",
|
|
@@ -156,17 +156,17 @@ exports.trans = {
|
|
|
156
156
|
"zh-cn": "未发现: %s",
|
|
157
157
|
},
|
|
158
158
|
qualitiy: {
|
|
159
|
-
en: "
|
|
160
|
-
de: "
|
|
161
|
-
ru: "Качество
|
|
162
|
-
pt: "Qualidade dos
|
|
163
|
-
nl: "
|
|
164
|
-
fr: "
|
|
165
|
-
it: "Qualità
|
|
166
|
-
es: "
|
|
167
|
-
pl: "Jakość
|
|
168
|
-
uk: "Якість
|
|
169
|
-
"zh-cn": "
|
|
159
|
+
en: "Quality of object states",
|
|
160
|
+
de: "Qualität der Objektzustände",
|
|
161
|
+
ru: "Качество состояния объектов",
|
|
162
|
+
pt: "Qualidade dos estados de objeto",
|
|
163
|
+
nl: "Kwaliteit van object staat",
|
|
164
|
+
fr: "Qualité des états d'objet",
|
|
165
|
+
it: "Qualità degli stati degli oggetti",
|
|
166
|
+
es: "Calidad de los estados objeto",
|
|
167
|
+
pl: "Jakość stanów obiektów",
|
|
168
|
+
uk: "Якість об'єктів",
|
|
169
|
+
"zh-cn": "物体状态的质量",
|
|
170
170
|
},
|
|
171
171
|
"Data point quality is cleaned up": {
|
|
172
172
|
en: "Data point quality is cleaned up.",
|
|
@@ -2457,17 +2457,17 @@ exports.trans = {
|
|
|
2457
2457
|
"zh-cn": "当前信息",
|
|
2458
2458
|
},
|
|
2459
2459
|
INBOXFOLDER: {
|
|
2460
|
-
en: "Create
|
|
2461
|
-
de: "
|
|
2462
|
-
ru: "Создать
|
|
2463
|
-
pt: "Criar
|
|
2464
|
-
nl: "
|
|
2465
|
-
fr: "Créer un
|
|
2466
|
-
it: "
|
|
2467
|
-
es: "Crear
|
|
2468
|
-
pl: "
|
|
2469
|
-
uk: "
|
|
2470
|
-
"zh-cn": "
|
|
2460
|
+
en: "Create object (change_folder) for %s.",
|
|
2461
|
+
de: "Objekt (change_folder) für %s erstellen.",
|
|
2462
|
+
ru: "Создать объект (изменение_складка) для %s.",
|
|
2463
|
+
pt: "Criar objeto (change_folder) para %s.",
|
|
2464
|
+
nl: "Maak object (change_folder) aan voor %s.",
|
|
2465
|
+
fr: "Créer un objet (change_folder) pour %s.",
|
|
2466
|
+
it: "Crea oggetto (change_folder) per %s.",
|
|
2467
|
+
es: "Crear objeto (change_folder) para %s.",
|
|
2468
|
+
pl: "Utwórz obiekt (zmień _ folder) dla %s .",
|
|
2469
|
+
uk: "Створити об'єкт (change_folder) на %s.",
|
|
2470
|
+
"zh-cn": "为 %s 创建对象(更改_文件夹).",
|
|
2471
2471
|
},
|
|
2472
2472
|
"Status eMail folder": {
|
|
2473
2473
|
en: "Status eMail folder",
|
package/main.js
CHANGED
|
@@ -11,7 +11,7 @@ const utils = require("@iobroker/adapter-core");
|
|
|
11
11
|
// Load your modules here, e.g.:
|
|
12
12
|
const helper = require("./lib/helper");
|
|
13
13
|
const tl = require("./lib/translator");
|
|
14
|
-
const format = require("util").format;
|
|
14
|
+
const format = require("node:util").format;
|
|
15
15
|
const { convert } = require("html-to-text");
|
|
16
16
|
const imap_connect = require("imap-iobroker");
|
|
17
17
|
const imap_event = require("./lib/imap_event");
|
|
@@ -66,7 +66,6 @@ class Imap extends utils.Adapter {
|
|
|
66
66
|
this.findmail_wo_att = imap_event.findmail_wo_att;
|
|
67
67
|
this.loadAllSeqno = imap_event.loadAllSeqno;
|
|
68
68
|
this.setTotal = imap_event.setTotal;
|
|
69
|
-
this.newMailsSort = imap_event.newMailsSort;
|
|
70
69
|
this.newMails = imap_event.newMails;
|
|
71
70
|
this.readMails = imap_event.readMails;
|
|
72
71
|
this.diffArray = imap_event.diffArray;
|
|
@@ -83,8 +82,10 @@ class Imap extends utils.Adapter {
|
|
|
83
82
|
this.startReadMails = imap_event.startReadMails;
|
|
84
83
|
this.readAllMails = imap_event.readAllMails;
|
|
85
84
|
this.updateattachments = imap_event.updateattachments;
|
|
85
|
+
this.updateTotal = imap_event.updateTotal;
|
|
86
86
|
this.qualityInterval = null;
|
|
87
87
|
this.statusInterval = null;
|
|
88
|
+
this.totalTimeout = {};
|
|
88
89
|
this.sleepTimer = null;
|
|
89
90
|
this.double_call = {};
|
|
90
91
|
this.boxfolder = {};
|
|
@@ -235,6 +236,7 @@ class Imap extends utils.Adapter {
|
|
|
235
236
|
this.clientsRows[dev.user] = "";
|
|
236
237
|
selectbox.states[dev.user] = dev.user;
|
|
237
238
|
this.clients[dev.user] = null;
|
|
239
|
+
this.totalTimeout[dev.user] = null;
|
|
238
240
|
this.clientsRaw[dev.user] = dev;
|
|
239
241
|
this.all_seqno[dev.user] = [];
|
|
240
242
|
this.reconnect_count[dev.user] = 0;
|
|
@@ -1193,6 +1195,7 @@ class Imap extends utils.Adapter {
|
|
|
1193
1195
|
this.clientsRaw[dev].onExpungeTimer && this.clearTimeout(this.clientsRaw[dev].onExpungeTimer);
|
|
1194
1196
|
this.clients[dev] = null;
|
|
1195
1197
|
this.restartIMAPConnection[dev] && this.clearTimeout(this.restartIMAPConnection[dev]);
|
|
1198
|
+
this.totalTimeout[dev] && this.clearTimeout(this.totalTimeout[dev]);
|
|
1196
1199
|
this.setState(`${dev}.online`, {
|
|
1197
1200
|
val: false,
|
|
1198
1201
|
ack: true,
|
|
@@ -1366,7 +1369,7 @@ class Imap extends utils.Adapter {
|
|
|
1366
1369
|
this.setAckFlag(id, { val: false });
|
|
1367
1370
|
return;
|
|
1368
1371
|
}
|
|
1369
|
-
if (command === "change_folder" && state.val != "") {
|
|
1372
|
+
if (command === "change_folder" && typeof state.val === "string" && state.val != "") {
|
|
1370
1373
|
if (this.clients[clientID]) {
|
|
1371
1374
|
this.changeFolder(clientID, state.val);
|
|
1372
1375
|
this.clientsRaw[clientID].inbox_activ = state.val;
|
|
@@ -1914,7 +1917,7 @@ class Imap extends utils.Adapter {
|
|
|
1914
1917
|
}
|
|
1915
1918
|
|
|
1916
1919
|
/**
|
|
1917
|
-
*
|
|
1920
|
+
* Object qualitiy clean up
|
|
1918
1921
|
*/
|
|
1919
1922
|
async cleanupQuality() {
|
|
1920
1923
|
this.log_translator("debug", "Data point quality is cleaned up");
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "iobroker.imap",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "imap to receive your emails",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Lucky-ESA",
|
|
@@ -20,38 +20,26 @@
|
|
|
20
20
|
"url": "git@github.com:Lucky-ESA/ioBroker.imap.git"
|
|
21
21
|
},
|
|
22
22
|
"engines": {
|
|
23
|
-
"node": ">=
|
|
23
|
+
"node": ">= 22"
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"@azure/msal-node": "^
|
|
27
|
-
"@iobroker/adapter-core": "^3.
|
|
26
|
+
"@azure/msal-node": "^3.8.4",
|
|
27
|
+
"@iobroker/adapter-core": "^3.3.2",
|
|
28
28
|
"imap-iobroker": "^0.1.1",
|
|
29
|
-
"mailparser": "^3.
|
|
29
|
+
"mailparser": "^3.9.8"
|
|
30
30
|
},
|
|
31
31
|
"devDependencies": {
|
|
32
|
-
"@alcalzone/release-script": "^
|
|
33
|
-
"@alcalzone/release-script-plugin-iobroker": "^
|
|
34
|
-
"@alcalzone/release-script-plugin-license": "^
|
|
35
|
-
"@alcalzone/release-script-plugin-manual-review": "^
|
|
36
|
-
"@iobroker/adapter-dev": "^1.
|
|
37
|
-
"@iobroker/eslint-config": "^
|
|
38
|
-
"@iobroker/testing": "^5.
|
|
39
|
-
"@tsconfig/
|
|
40
|
-
"@types/
|
|
41
|
-
"@types/
|
|
42
|
-
"
|
|
43
|
-
"@types/mocha": "^10.0.10",
|
|
44
|
-
"@types/node": "^22.9.0",
|
|
45
|
-
"@types/proxyquire": "^1.3.31",
|
|
46
|
-
"@types/sinon": "^17.0.3",
|
|
47
|
-
"@types/sinon-chai": "^3.2.12",
|
|
48
|
-
"chai": "^4.5.0",
|
|
49
|
-
"chai-as-promised": "^8.0.0",
|
|
50
|
-
"mocha": "^10.8.2",
|
|
51
|
-
"proxyquire": "^2.1.3",
|
|
52
|
-
"sinon": "^19.0.2",
|
|
53
|
-
"sinon-chai": "^3.7.0",
|
|
54
|
-
"typescript": "~5.6.2"
|
|
32
|
+
"@alcalzone/release-script": "^5.2.0",
|
|
33
|
+
"@alcalzone/release-script-plugin-iobroker": "^5.2.0",
|
|
34
|
+
"@alcalzone/release-script-plugin-license": "^5.2.0",
|
|
35
|
+
"@alcalzone/release-script-plugin-manual-review": "^5.2.0",
|
|
36
|
+
"@iobroker/adapter-dev": "^1.5.0",
|
|
37
|
+
"@iobroker/eslint-config": "^2.3.4",
|
|
38
|
+
"@iobroker/testing": "^5.2.2",
|
|
39
|
+
"@tsconfig/node22": "^22.0.5",
|
|
40
|
+
"@types/imap": "^0.8.43",
|
|
41
|
+
"@types/node": "^22.13.14",
|
|
42
|
+
"typescript": "~6.0.3"
|
|
55
43
|
},
|
|
56
44
|
"main": "main.js",
|
|
57
45
|
"files": [
|
|
@@ -69,7 +57,7 @@
|
|
|
69
57
|
"test:integration": "mocha test/integration --exit",
|
|
70
58
|
"test": "npm run test:js && npm run test:package",
|
|
71
59
|
"check": "tsc --noEmit -p tsconfig.check.json",
|
|
72
|
-
"lint": "eslint .",
|
|
60
|
+
"lint": "eslint -c eslint.config.mjs .",
|
|
73
61
|
"translate": "translate-adapter",
|
|
74
62
|
"release": "release-script",
|
|
75
63
|
"release-patch": "release-script patch --yes",
|