58 lines
2.0 KiB
PHP
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);
|
|
}
|
|
}
|
|
} |