export default {
async email(message, env, ctx) {
const TELEGRAM_TOKEN = env.TELEGRAM_TOKEN;
const TELEGRAM_CHAT_ID = env.TELEGRAM_CHAT_ID;
if (!TELEGRAM_TOKEN || !TELEGRAM_CHAT_ID) {
return;
}
try {
const from = message.from || "Unknown";
const to = message.to || "Unknown";
let subject = message.headers.get("subject") || "(Tanpa Subjek)";
subject = decodeMimeHeader(subject);
// Ambil seluruh teks mentah email
const rawEmail = await new Response(message.raw).text();
// 1. Tangkap SEMUA tautan HTTPS (termasuk link verifikasi tersembunyi)
const allLinks = extractRawUrls(rawEmail);
// 2. Bersihkan teks isi email
let bodyText = cleanEmailBody(rawEmail);
if (bodyText.length > 1200) {
bodyText = bodyText.substring(0, 1200) + "\n\n...(pesan dipotong)";
}
// 3. Format Bagian Tautan Verifikasi
let linkSection = "";
if (allLinks.length > 0) {
linkSection = `\nš LINK VERIFIKASI / ACTION (Klik untuk Buka):\n` +
allLinks.map((url, i) => `[Link ${i + 1}] ${url}`).join("\n\n") + "\n";
} else {
linkSection = `\nā ļø Tidak ada link verifikasi terdeteksi.\n`;
}
// 4. Format Pesan HTML Telegram
const htmlMessage =
`š© EMAIL MASUK (Temp Mail)
š¤ Dari: ${escapeHtml(from)}
š„ Untuk: ${escapeHtml(to)}
š Subjek: ${escapeHtml(subject)}
${linkSection}
š Teks Email:
${escapeHtml(bodyText)}`;
// Kirim ke Telegram API
const url = `https://api.telegram.org/bot${TELEGRAM_TOKEN}/sendMessage`;
await fetch(url, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
chat_id: TELEGRAM_CHAT_ID,
text: htmlMessage,
parse_mode: "HTML",
disable_web_page_preview: true
})
});
} catch (err) {
console.error("Error Worker:", err);
}
}
};
// --- FUNGSI EKSTRAKSI LINK EXTREME ---
function extractRawUrls(raw) {
// Decode Quoted-Printable MIME terlebih dahulu (menghapus =3D dan newline =)
let unquoted = raw.replace(/=\r?\n/g, "").replace(/=3D/gi, "=");
unquoted = unquoted.replace(/=([0-9A-F]{2})/gi, (_, hex) => String.fromCharCode(parseInt(hex, 16)));
const urls = [];
// Regex mencari semua pola URL https://
const urlRegex = /https?:\/\/[^\s"'<>(){}]+[^\s"'<>(){}\.,;]/gi;
let match;
while ((match = urlRegex.exec(unquoted)) !== null) {
let url = match[0];
// Filter URL sistem/font/schema yang bukan link verifikasi
const isNoise = url.includes("w3.org") ||
url.includes("schema.org") ||
url.includes(".png") ||
url.includes(".jpg") ||
url.includes(".css");
if (!isNoise && !urls.includes(url)) {
urls.push(url);
}
}
return urls.slice(0, 5); // Ambil 5 link pertama
}
// --- FUNGSI MEMBERSIHKAN TEKS BODY ---
function cleanEmailBody(raw) {
let text = raw.replace(/=\r?\n/g, "").replace(/=3D/gi, "=");
// Ambil bagian setelah header utama
const parts = text.split(/\r?\n\r?\n/);
if (parts.length > 1) {
text = parts.slice(1).join("\n\n");
}
// Jika ada tag HTML, buang tagnya tetapi sisakan teksnya
text = text.replace(/