106 lines
7.0 KiB
JavaScript
106 lines
7.0 KiB
JavaScript
import { ImapFlow } from 'imapflow';
|
|
async function getMessagesFromInboxWithFilter(imapConfig, fromAddress, toAddress) {
|
|
const client = new ImapFlow({
|
|
host: imapConfig.host,
|
|
port: imapConfig.port,
|
|
secure: imapConfig.tls,
|
|
auth: {
|
|
user: imapConfig.user,
|
|
pass: imapConfig.password
|
|
}
|
|
});
|
|
try {
|
|
// Connect to the IMAP server
|
|
await client.connect();
|
|
// Select and lock the INBOX
|
|
let lock = await client.getMailboxLock('INBOX');
|
|
try {
|
|
// Search for messages where the 'from' address and 'to' address match the specified filters
|
|
const searchCriteria = {
|
|
from: fromAddress,
|
|
to: toAddress
|
|
};
|
|
// Search for messages matching the criteria
|
|
const messages = client.fetch({ from: fromAddress, to: toAddress }, { envelope: true, source: true });
|
|
// Iterate through each filtered message and print details
|
|
for await (let message of messages) {
|
|
console.log('Message ID:', message.uid);
|
|
console.log('From:', message.envelope?.from?.map(f => `${f.name} <${f.address}>`).join(', '));
|
|
console.log('To:', message.envelope?.to?.map(f => `${f.name} <${f.address}>`).join(', '));
|
|
console.log('Subject:', message.envelope?.subject);
|
|
console.log('Date:', message.envelope?.date);
|
|
// If you need the message body, you can access it from message.source
|
|
console.log('Raw message source:', message.source.toString());
|
|
}
|
|
}
|
|
finally {
|
|
// Always release the lock
|
|
lock.release();
|
|
}
|
|
// Log out and close the connection
|
|
await client.logout();
|
|
}
|
|
catch (err) {
|
|
console.error('Error fetching messages:', err);
|
|
throw err;
|
|
}
|
|
}
|
|
// Configuration for IMAP
|
|
const imapConfig = {
|
|
host: 'imap.example.com',
|
|
port: 993,
|
|
auth: {
|
|
user: 'your_email@example.com',
|
|
pass: 'your_password'
|
|
},
|
|
secure: true
|
|
};
|
|
// Create a draft email
|
|
export const draft = async (subject, html, options) => {
|
|
const client = new ImapFlow(options);
|
|
try {
|
|
await client.connect();
|
|
await client.mailboxOpen('Drafts');
|
|
const draftMessage = {
|
|
envelope: {
|
|
from: 'Your Name <your_email@example.com>',
|
|
subject: subject
|
|
},
|
|
content: html,
|
|
...options
|
|
};
|
|
// Append the draft to the 'Drafts' folder
|
|
await client.append('Drafts', draftMessage, ['\\Draft']);
|
|
console.log('Draft created successfully.');
|
|
}
|
|
catch (err) {
|
|
console.error('Error:', err);
|
|
}
|
|
finally {
|
|
// Close the connection
|
|
await client.logout();
|
|
console.log('Connection ended.');
|
|
}
|
|
};
|
|
/*
|
|
// Example usage
|
|
const config: ImapConfig = {
|
|
user: 'your-email@example.com',
|
|
password: 'your-password',
|
|
host: 'imap.your-email-provider.com',
|
|
port: 993,
|
|
tls: true
|
|
};
|
|
|
|
const fromAddress = 'sender@example.com';
|
|
const toAddress = 'recipient@example.com';
|
|
|
|
getMessagesFromInboxWithFilter(config, fromAddress, toAddress)
|
|
.then(() => {
|
|
console.log('Finished fetching filtered messages.');
|
|
})
|
|
.catch(err => {
|
|
console.error('Error:', err);
|
|
});
|
|
*/
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2ltYXAvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQVVuQyxLQUFLLFVBQVUsOEJBQThCLENBQUMsVUFBc0IsRUFBRSxXQUFtQixFQUFFLFNBQWlCO0lBQzFHLE1BQU0sTUFBTSxHQUFHLElBQUksUUFBUSxDQUFDO1FBQzFCLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSTtRQUNyQixJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUk7UUFDckIsTUFBTSxFQUFFLFVBQVUsQ0FBQyxHQUFHO1FBQ3RCLElBQUksRUFBRTtZQUNKLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSTtZQUNyQixJQUFJLEVBQUUsVUFBVSxDQUFDLFFBQVE7U0FDMUI7S0FDRixDQUFDLENBQUM7SUFFSCxJQUFJLENBQUM7UUFDSCw2QkFBNkI7UUFDN0IsTUFBTSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFdkIsNEJBQTRCO1FBQzVCLElBQUksSUFBSSxHQUFHLE1BQU0sTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVoRCxJQUFJLENBQUM7WUFDSCw0RkFBNEY7WUFDNUYsTUFBTSxjQUFjLEdBQUc7Z0JBQ3JCLElBQUksRUFBRSxXQUFXO2dCQUNqQixFQUFFLEVBQUUsU0FBUzthQUNkLENBQUM7WUFFRiw0Q0FBNEM7WUFDNUMsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUV0RywwREFBMEQ7WUFDMUQsSUFBSSxLQUFLLEVBQUUsSUFBSSxPQUFPLElBQUksUUFBUSxFQUFFLENBQUM7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
|