mail page connected with folders 5
This commit is contained in:
parent
42a8c1dab8
commit
7cf49d8cf3
@ -116,8 +116,19 @@ export async function GET() {
|
|||||||
connTimeout: 30000
|
connTimeout: 30000
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Add a timeout to prevent hanging
|
||||||
|
const timeout = setTimeout(() => {
|
||||||
|
console.error('IMAP connection timeout');
|
||||||
|
imap.end();
|
||||||
|
resolve(NextResponse.json({
|
||||||
|
emails: [],
|
||||||
|
error: 'Connection timeout'
|
||||||
|
}));
|
||||||
|
}, 60000);
|
||||||
|
|
||||||
imap.once('error', (err: Error) => {
|
imap.once('error', (err: Error) => {
|
||||||
console.error('IMAP error:', err);
|
console.error('IMAP error:', err);
|
||||||
|
clearTimeout(timeout);
|
||||||
resolve(NextResponse.json({
|
resolve(NextResponse.json({
|
||||||
emails: [],
|
emails: [],
|
||||||
error: 'IMAP connection error'
|
error: 'IMAP connection error'
|
||||||
@ -128,6 +139,7 @@ export async function GET() {
|
|||||||
imap.getBoxes((err, boxes) => {
|
imap.getBoxes((err, boxes) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
console.error('Error getting mailboxes:', err);
|
console.error('Error getting mailboxes:', err);
|
||||||
|
clearTimeout(timeout);
|
||||||
imap.end();
|
imap.end();
|
||||||
resolve(NextResponse.json({ emails: [], error: 'Failed to get mailboxes' }));
|
resolve(NextResponse.json({ emails: [], error: 'Failed to get mailboxes' }));
|
||||||
return;
|
return;
|
||||||
@ -143,6 +155,15 @@ export async function GET() {
|
|||||||
// Process each mailbox
|
// Process each mailbox
|
||||||
const foldersToProcess = availableMailboxes;
|
const foldersToProcess = availableMailboxes;
|
||||||
let processedFolders = 0;
|
let processedFolders = 0;
|
||||||
|
let activeFetches = 0;
|
||||||
|
|
||||||
|
function checkCompletion() {
|
||||||
|
processedFolders++;
|
||||||
|
if (processedFolders === foldersToProcess.length && activeFetches === 0) {
|
||||||
|
clearTimeout(timeout);
|
||||||
|
finishProcessing();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function finishProcessing() {
|
function finishProcessing() {
|
||||||
// Combine all emails from all folders
|
// Combine all emails from all folders
|
||||||
@ -169,10 +190,7 @@ export async function GET() {
|
|||||||
imap.openBox(folderName, false, (err, box) => {
|
imap.openBox(folderName, false, (err, box) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
console.error(`Error opening box ${folderName}:`, err);
|
console.error(`Error opening box ${folderName}:`, err);
|
||||||
processedFolders++;
|
checkCompletion();
|
||||||
if (processedFolders === foldersToProcess.length) {
|
|
||||||
finishProcessing();
|
|
||||||
}
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -180,21 +198,16 @@ export async function GET() {
|
|||||||
imap.search(['ALL'], (err, results) => {
|
imap.search(['ALL'], (err, results) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
console.error(`Error searching in ${folderName}:`, err);
|
console.error(`Error searching in ${folderName}:`, err);
|
||||||
processedFolders++;
|
checkCompletion();
|
||||||
if (processedFolders === foldersToProcess.length) {
|
|
||||||
finishProcessing();
|
|
||||||
}
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!results || results.length === 0) {
|
if (!results || results.length === 0) {
|
||||||
processedFolders++;
|
checkCompletion();
|
||||||
if (processedFolders === foldersToProcess.length) {
|
|
||||||
finishProcessing();
|
|
||||||
}
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
activeFetches++;
|
||||||
// Fetch emails
|
// Fetch emails
|
||||||
const fetch = imap.fetch(results, {
|
const fetch = imap.fetch(results, {
|
||||||
bodies: ['HEADER', 'TEXT'],
|
bodies: ['HEADER', 'TEXT'],
|
||||||
@ -250,13 +263,13 @@ export async function GET() {
|
|||||||
|
|
||||||
fetch.on('error', (err) => {
|
fetch.on('error', (err) => {
|
||||||
console.error(`Error fetching emails from ${folderName}:`, err);
|
console.error(`Error fetching emails from ${folderName}:`, err);
|
||||||
|
activeFetches--;
|
||||||
|
checkCompletion();
|
||||||
});
|
});
|
||||||
|
|
||||||
fetch.on('end', () => {
|
fetch.on('end', () => {
|
||||||
processedFolders++;
|
activeFetches--;
|
||||||
if (processedFolders === foldersToProcess.length) {
|
checkCompletion();
|
||||||
finishProcessing();
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user