Files
click-erp/app/Http/Controllers/EmailController.php
2026-03-16 16:41:32 +00:00

58 lines
2.0 KiB
PHP

<?php
namespace App\Http\Controllers;
use Webklex\PHPIMAP\ClientManager;
use Webklex\PHPIMAP\Exceptions\ConnectionFailedException;
use App\Libs\ImapService;
use Illuminate\Http\JsonResponse;
class EmailController extends Controller
{
public function indexInbox(ImapService $imap): JsonResponse{
try {
$emails = $imap->getLatestEmails(10);
return response()->json($emails);
// Or for view: return view('emails.index', compact('emails'));
} catch (\Exception $e) {
return response()->json(['error' => $e->getMessage()], 500);
}
}
public function index()
{
try {
// Initialize IMAP client
$client = app(ClientManager::class)->account('default');
$client->connect();
// Get INBOX folder
$folder = $client->getFolder('INBOX');
// Fetch last 10 emails (newest first)
$messages = $folder->messages()->unseen()->limit(10)->get();
// Prepare data for view
$emails = $messages->map(function ($message) {
return [
'subject' => $message->getSubject() ?? '(No Subject)',
'sender' => $message->getFrom()[0]->mail ?? 'Unknown',
'email_date' => $message->getDate()->toDateTimeString(),
'email_body' => substr(strip_tags($message->getTextBody()), 0, 200) . '...',
];
});
// Disconnect
$client->disconnect();
dd($emails);
// Return view or JSON
// return view('emails.index', compact('emails'));
// Or for API: return response()->json($emails);
} catch (ConnectionFailedException $e) {
return response()->json(['error' => 'Failed to connect: ' . $e->getMessage()], 500);
} catch (\Exception $e) {
return response()->json(['error' => 'Error: ' . $e->getMessage()], 500);
}
}
}