/** * test-imap.ts * * @author Descomplicar® Crescimento Digital * @link https://descomplicar.pt * @copyright 2025 Descomplicar® */ // Em uma plataforma como Vercel ou Netlify, este arquivo se tornaria um endpoint de API. // Ex: POST /api/test-imap import { ImapFlow } from 'imapflow'; import type { ImapAccount } from '../types'; // Esta função simula o handler de uma requisição de API. // Em um ambiente real com Express, por exemplo, seria algo como: // export default async (req: Request, res: Response) => { ... } // Aqui, vamos simular o corpo da função. const handler = async (account: Omit) => { const { host, port, user, password, secure } = account; if (!host || !port || !user || !password) { // No mundo real, retornaríamos um status HTTP 400 return { success: false, message: 'Todos os campos (host, porta, usuário, senha) são obrigatórios.', }; } const client = new ImapFlow({ host, port, secure, auth: { user, pass: password, }, logger: false, // Mude para true para debug detalhado no console do servidor }); try { await client.connect(); await client.logout(); // No mundo real, retornaríamos um status HTTP 200 return { success: true, message: 'Conexão IMAP bem-sucedida!', }; } catch (err) { console.error(`Falha na conexão IMAP para ${user}@${host}:`, err); let friendlyMessage = 'Falha na conexão IMAP. Verifique suas credenciais e configurações.'; if (err instanceof Error) { if (err.message.includes('ENOTFOUND')) { friendlyMessage = 'O host do servidor não foi encontrado. Verifique o endereço do host.'; } else if (err.message.includes('ECONNREFUSED')) { friendlyMessage = 'A conexão foi recusada. Verifique a porta e as configurações de segurança (TLS/SSL).'; } else if (err.message.toLowerCase().includes('authentication failed')) { friendlyMessage = 'Falha na autenticação. Verifique o usuário e a senha.'; } } // No mundo real, retornaríamos um status HTTP 500 ou 401 return { success: false, message: friendlyMessage, }; } }; // Para fins de teste, você pode simular uma chamada. // Em um projeto real, o framework (Express/Next/Vercel) chamaria o handler // com base no corpo da requisição (req.body). // // Exemplo de como o frontend chamaria esta API: // // const response = await fetch('/api/test-imap', { // method: 'POST', // headers: { 'Content-Type': 'application/json' }, // body: JSON.stringify({ host, port, user, password, secure }) // }); // const result = await response.json(); // alert(result.message); export default handler;