const axios = require('axios');
const cheerio = require('cheerio');
const { CookieJar } = require('tough-cookie');
const { wrapper } = require('axios-cookiejar-support');
class Emailnator {
constructor() {
this.jar = new CookieJar();
this.client = wrapper(axios.create({
jar: this.jar,
baseURL: 'https://www.emailnator.com',
headers: {
'User-Agent': 'Mozilla/5.0 (Linux; Android 10) AppleWebKit/537.36 Chrome/140.0.0.0 Mobile Safari/537.36',
'Accept': 'application/json, text/plain, */*',
'Content-Type': 'application/json',
'sec-ch-ua-platform': '"Android"',
'x-requested-with': 'XMLHttpRequest',
'origin': 'https://www.emailnator.com',
'sec-fetch-site': 'same-origin',
'sec-fetch-mode': 'cors',
'sec-fetch-dest': 'empty',
'accept-language': 'id,ms;q=0.9,en;q=0.8'
}
}));
}
async getToken() {
try {
const cookies = await this.jar.getCookies('https://www.emailnator.com');
const xsrfCookie = cookies.find(c => c.key === 'XSRF-TOKEN');
return xsrfCookie?.value ? decodeURIComponent(xsrfCookie.value) : '';
} catch (error) {
throw new Error(error.message);
}
}
async create() {
try {
await this.client.get('/');
const xsrfToken = await this.getToken();
if (!xsrfToken) throw new Error('Failed to get XSRF token');
const { data: res } = await this.client.post('/generate-email', {
email: ['plusGmail', 'dotGmail']
}, {
headers: {
'x-xsrf-token': xsrfToken,
'referer': 'https://www.emailnator.com/'
}
});
return {
email: res.email[0]
};
} catch (error) {
throw new Error(error.message);
}
}
async getInbox(email) {
try {
if (!email) throw new Error('Email is required');
await this.client.get('/');
const xsrfToken = await this.getToken();
if (!xsrfToken) throw new Error('XSRF token not found');
const { data: res } = await this.client.post('/message-list', {
email: email
}, {
headers: {
'x-xsrf-token': xsrfToken,
'referer': 'https://www.emailnator.com/mailbox/'
}
});
const emails = [];
if (res.messageData && Array.isArray(res.messageData) && res.messageData.length > 0) {
const resolvedEmails = await Promise.all(
res.messageData
.filter(m => m.messageID !== 'ADSVPN')
.map(async (m) => {
const { data } = await this.client.post('/message-list', {
email: email,
messageID: m.messageID
}, {
headers: {
'x-xsrf-token': xsrfToken,
'referer': 'https://www.emailnator.com/mailbox/'
}
});
const $ = cheerio.load(data);
$('style').remove();
$('script').remove();
$('img').remove();
$('#subject-header').remove();
$('p, div, br, hr').each(function() {
$(this).after('\n');
});
const content = $('body').text()
.replace(/\u200B/g, '')
.replace(/[ \t]+/g, ' ')
.replace(/\n\s*\n\s*\n+/g, '\n\n')
.trim();
return {
id: m.messageID,
from: m.from,
subject: m.subject,
text: content,
time: m.time
};
})
);
emails.push(...resolvedEmails);
}
return {
totalEmails: emails.length,
emails: emails
};
} catch (error) {
throw new Error(error.message);
}
}
}
const e = new Emailnator();
e.create().then(console.log);