📄 Source: sync_emails.php
<?php
session_name('INBOXZERO');
session_set_cookie_params(0, '/', '', false, true);
session_start();
require_once 'vendor/autoload.php';
require_once 'database.php';
echo "🔄 Starting email sync...\n";
if (!isset($_SESSION['access_token'])) {
echo "Not authenticated. Please login first in the browser.\n";
exit();
}
$client = new Google\Client();
$client->setAccessToken($_SESSION['access_token']);
$service = new Google\Service\Gmail($client);
$db = new ChatDatabase();
// Create email storage table if not exists
$db->exec("
CREATE TABLE IF NOT EXISTS stored_emails (
id TEXT PRIMARY KEY,
thread_id TEXT,
from_address TEXT,
subject TEXT,
date_received DATETIME,
content TEXT,
is_read INTEGER DEFAULT 0,
labels TEXT,
synced_at DATETIME DEFAULT CURRENT_TIMESTAMP
)
");
$optParams = ['maxResults' => 50, 'labelIds' => ['INBOX']];
$messages = $service->users_messages->listUsersMessages('me', $optParams);
$count = 0;
if ($messages->getMessages()) {
foreach ($messages->getMessages() as $msg) {
// Check if email already exists
$stmt = $db->prepare("SELECT id FROM stored_emails WHERE id = :id");
$stmt->bindValue(':id', $msg->getId(), SQLITE3_TEXT);
$result = $stmt->execute();
$exists = $result->fetchArray();
if (!$exists) {
$message = $service->users_messages->get('me', $msg->getId(), [
'format' => 'metadata',
'metadataHeaders' => ['From', 'Subject', 'Date']
]);
$headers = $message->getPayload()->getHeaders();
$from = '';
$subject = '';
$date = '';
foreach ($headers as $header) {
if ($header->getName() == 'From') $from = $header->getValue();
if ($header->getName() == 'Subject') $subject = $header->getValue();
if ($header->getName() == 'Date') $date = $header->getValue();
}
try {
$dateObj = new DateTime($date);
$dateObj->setTimezone(new DateTimeZone('Europe/Bucharest'));
$dateFormatted = $dateObj->format('Y-m-d H:i:s');
} catch (Exception $e) {
$dateFormatted = date('Y-m-d H:i:s');
}
$stmt = $db->prepare("
INSERT INTO stored_emails (id, thread_id, from_address, subject, date_received, is_read)
VALUES (:id, :tid, :from, :subject, :date, 0)
");
$stmt->bindValue(':id', $msg->getId(), SQLITE3_TEXT);
$stmt->bindValue(':tid', $msg->getThreadId(), SQLITE3_TEXT);
$stmt->bindValue(':from', $from, SQLITE3_TEXT);
$stmt->bindValue(':subject', $subject, SQLITE3_TEXT);
$stmt->bindValue(':date', $dateFormatted, SQLITE3_TEXT);
$stmt->execute();
$count++;
}
}
}
echo "✅ Saved $count new emails to local database.\n";
echo "Total emails in database: " . $db->querySingle("SELECT COUNT(*) FROM stored_emails") . "\n";
?>
← Back