feat: attachment viewing function (#58)

This commit is contained in:
Dream Hunter
2024-01-13 23:57:52 +08:00
committed by GitHub
parent 2952a641a5
commit 97a1f0a968
11 changed files with 604 additions and 472 deletions

View File

@@ -35,18 +35,22 @@ async function email(message, env, ctx) {
const parser = new PostalMime.default();
parsedEmail = await parser.parse(rawEmail);
}
const message_id = message.headers.get("Message-ID");
// process email
const { success } = await env.DB.prepare(
`INSERT INTO mails (source, address, subject, message) VALUES (?, ?, ?, ?)`
`INSERT INTO mails (source, address, subject, message, message_id) VALUES (?, ?, ?, ?, ?)`
).bind(
message.from, message.to,
parsedEmail.subject || "",
parsedEmail.html || parsedEmail.textAsHtml || parsedEmail.text || ""
parsedEmail.html || parsedEmail.textAsHtml || parsedEmail.text || "",
message_id
).run();
if (!success) {
message.setReject(`Failed save message to ${message.to}`);
console.log(`Failed save message from ${message.from} to ${message.to}`);
}
// auto reply email
try {
const results = await env.DB.prepare(
`SELECT * FROM auto_reply_mails where address = ? and enabled = 1`
@@ -75,6 +79,27 @@ async function email(message, env, ctx) {
} catch (error) {
console.log("reply email error", error);
}
// process attachments
try {
if (
parsedEmail.attachments
&& parsedEmail.attachments.length > 0
) {
const { success } = await env.DB.prepare(
`INSERT INTO attachments (source, address, message_id, data) VALUES (?, ?, ?, ?)`
).bind(
message.from, message.to, message_id,
JSON.stringify(parsedEmail.attachments)
).run();
if (!success) {
message.setReject(`Failed save attachment to ${message.to}`);
console.log(`Failed save attachment from ${message.from} to ${message.to}`);
}
}
}
catch (error) {
console.log("save attachment error", error);
}
} else {
message.setReject(`Unknown address ${message.to}`);
console.log(`Unknown address ${message.to}`);