imap-checker
Advanced tools
Comparing version 0.0.6 to 0.0.7
77
index.js
@@ -1,41 +0,64 @@ | ||
const mailNotifier = require('mail-notifier'); | ||
const imaps = require('imap-simple'); | ||
const simpleParser = require('mailparser').simpleParser; | ||
const _ = require('lodash'); | ||
const imapChecker = (imapConfig, {timeout, from, to, subject}) => { | ||
return new Promise((resolve, reject) => { | ||
const notifier = mailNotifier(imapConfig); | ||
let timeoutFunc; | ||
const sleep = ms => new Promise((resolve) => setTimeout(resolve, ms)); | ||
notifier | ||
.on('mail', (mail) => { | ||
const parse = (source, options) => { | ||
return new Promise(resolve => { | ||
simpleParser(source, options, (err, parsed) => resolve(parsed)); | ||
}); | ||
} | ||
const imapChecker = async (imapConfig, {timeout, from, to, subject}) => { | ||
const config = { | ||
imap: imapConfig | ||
}; | ||
const connection = await imaps.connect(config); | ||
await connection.openBox('INBOX'); | ||
const searchCriteria = ['UNSEEN']; | ||
const fetchOptions = { bodies: ['HEADER', 'TEXT', ''] }; | ||
const startTime = Date.now(); | ||
while (true) { | ||
const messages = await connection.search(searchCriteria, fetchOptions); | ||
for (let index = 0; index < messages.length; index++) { | ||
const message = messages[index]; | ||
const all = _.find(message.parts, { "which": "" }) | ||
const id = message.attributes.uid; | ||
const idHeader = "Imap-Id: " + id + "\r\n"; | ||
const mail = await parse(idHeader + all.body); | ||
let matched = true; | ||
if (from && !mail.from.some((element) => element.address === from)) { | ||
if (from && from !== mail.from.text) { | ||
matched = false; | ||
} | ||
if (to && !mail.to.some((element) => element.address === to)) { | ||
if (to && to !== mail.to.text) { | ||
matched = false; | ||
} | ||
if (subject && !mail.subject.match(new RegExp(subject))) { | ||
if (subject && subject !== mail.subject) { | ||
matched = false; | ||
} | ||
if (matched) { | ||
clearTimeout(timeoutFunc); | ||
notifier.stop(); | ||
resolve(mail); | ||
return mail; | ||
} | ||
}) | ||
.on('connected', () => { | ||
timeoutFunc = setTimeout(() => { | ||
notifier.stop(); | ||
console.log(`Unable to find any email from: '${from}' to: '${to}' with subject: '${subject}' in ${timeout} ms`); | ||
resolve(null); | ||
}, timeout); | ||
}) | ||
.on('error', (err) => { | ||
console.log(`Error when checking for email: ${err.message} \n\n ${err.stack}`); | ||
reject(err); | ||
}) | ||
.start(); | ||
}); | ||
} | ||
const now = Date.now(); | ||
if (now - startTime > timeout) { | ||
throw new Error(`TimeoutError: couln't find emails in ${timeout}ms.`); | ||
} | ||
await sleep(1000); | ||
} | ||
}; | ||
exports.checkMail = imapChecker; |
{ | ||
"name": "imap-checker", | ||
"version": "0.0.6", | ||
"version": "0.0.7", | ||
"description": "Check the email server and return the matching emails", | ||
@@ -16,4 +16,6 @@ "main": "index.js", | ||
"dependencies": { | ||
"mail-notifier": "^0.5.0" | ||
"imap-simple": "^5.0.0", | ||
"lodash": "^4.17.21", | ||
"mailparser": "^3.2.0" | ||
} | ||
} |
4695
6
66
3
+ Addedimap-simple@^5.0.0
+ Addedlodash@^4.17.21
+ Addedmailparser@^3.2.0
+ Added@selderee/plugin-htmlparser2@0.11.0(transitive)
+ Addeddeepmerge@4.3.1(transitive)
+ Addeddom-serializer@2.0.0(transitive)
+ Addeddomelementtype@2.3.0(transitive)
+ Addeddomhandler@5.0.3(transitive)
+ Addeddomutils@3.2.2(transitive)
+ Addedencoding-japanese@2.2.0(transitive)
+ Addedentities@4.5.0(transitive)
+ Addedhe@1.2.0(transitive)
+ Addedhtml-to-text@9.0.5(transitive)
+ Addedhtmlparser2@8.0.2(transitive)
+ Addediconv-lite@0.4.24(transitive)
+ Addedimap-simple@5.1.0(transitive)
+ Addedis-promise@1.0.1(transitive)
+ Addedleac@0.6.0(transitive)
+ Addedlibbase64@1.3.0(transitive)
+ Addedlibmime@5.3.6(transitive)
+ Addedlibqp@2.1.1(transitive)
+ Addedlinkify-it@5.0.0(transitive)
+ Addedmailparser@3.7.2(transitive)
+ Addedmailsplit@5.4.2(transitive)
+ Addednodeify@1.0.1(transitive)
+ Addednodemailer@6.9.16(transitive)
+ Addedparseley@0.12.1(transitive)
+ Addedpeberminta@0.9.0(transitive)
+ Addedpromise@1.3.0(transitive)
+ Addedpunycode.js@2.3.1(transitive)
+ Addedquoted-printable@1.0.1(transitive)
+ Addedselderee@0.11.0(transitive)
+ Addedtlds@1.255.0(transitive)
+ Addeduc.micro@2.1.0(transitive)
+ Addedutf8@2.1.2(transitive)
+ Addeduuencode@0.0.4(transitive)
- Removedmail-notifier@^0.5.0
- Removedaddressparser@1.0.1(transitive)
- Removedasync@2.6.4(transitive)
- Removeddebug@2.6.9(transitive)
- Removedencoding@0.1.13(transitive)
- Removedescape-string-regexp@1.0.5(transitive)
- Removedextend@3.0.2(transitive)
- Removedmail-notifier@0.5.0(transitive)
- Removedmailparser@0.6.2(transitive)
- Removedmime@1.6.0(transitive)
- Removedmimelib@0.3.1(transitive)
- Removedms@2.0.0(transitive)
- Removeduue@3.1.2(transitive)