rynn-k / gists
temporary-gmail.js javascript
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);
        }
    }
}

// Usage:
const e = new Emailnator();
e.create().then(console.log);
5069 bytes ยท Updated Feb 27, 2026