89 lines
2.7 KiB
TypeScript
Executable File
89 lines
2.7 KiB
TypeScript
Executable File
/**
|
|
* 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<ImapAccount, 'provider' | 'id' | 'avatar'>) => {
|
|
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;
|