mirror of
https://github.com/dreamhunter2333/cloudflare_temp_email.git
synced 2026-05-30 12:39:41 +08:00
* feat: imp worker v2 * feat: add rust mail-parser * feat: imp frontend v2 * feat: imp frontend v2 * feat: update doc * feat: add mailV1Alert * feat: remove unused
70 lines
2.6 KiB
JavaScript
70 lines
2.6 KiB
JavaScript
import { createMimeMessage } from "mimetext";
|
|
import { EmailMessage } from "cloudflare:email";
|
|
|
|
async function email(message, env, ctx) {
|
|
if (env.BLACK_LIST && env.BLACK_LIST.split(",").some(word => message.from.includes(word))) {
|
|
message.setReject("Missing from address");
|
|
console.log(`Reject message from ${message.from} to ${message.to}`);
|
|
return;
|
|
}
|
|
if (!env.PREFIX || (message.to && message.to.startsWith(env.PREFIX))) {
|
|
const reader = message.raw.getReader();
|
|
const decoder = new TextDecoder("utf-8");
|
|
let rawEmail = "";
|
|
while (true) {
|
|
const { done, value } = await reader.read();
|
|
if (done) {
|
|
break;
|
|
}
|
|
rawEmail += decoder.decode(value);
|
|
}
|
|
const message_id = message.headers.get("Message-ID");
|
|
|
|
// save email
|
|
const { success } = await env.DB.prepare(
|
|
`INSERT INTO raw_mails (source, address, raw, message_id) VALUES (?, ?, ?, ?)`
|
|
).bind(
|
|
message.from, message.to, rawEmail, 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`
|
|
).bind(message.to).first();
|
|
if (results && results.source_prefix && message.from.startsWith(results.source_prefix)) {
|
|
const msg = createMimeMessage();
|
|
msg.setHeader("In-Reply-To", message.headers.get("Message-ID"));
|
|
msg.setSender({
|
|
name: results.name || results.address,
|
|
addr: results.address
|
|
});
|
|
msg.setRecipient(message.from);
|
|
msg.setSubject(results.subject || "Auto-reply");
|
|
msg.addMessage({
|
|
contentType: 'text/plain',
|
|
data: results.message || "This is an auto-reply message, please reconact later."
|
|
});
|
|
|
|
const replyMessage = new EmailMessage(
|
|
message.to,
|
|
message.from,
|
|
msg.asRaw()
|
|
);
|
|
await message.reply(replyMessage);
|
|
}
|
|
} catch (error) {
|
|
console.log("reply email error", error);
|
|
}
|
|
} else {
|
|
message.setReject(`Unknown address ${message.to}`);
|
|
console.log(`Unknown address ${message.to}`);
|
|
}
|
|
}
|
|
|
|
export { email }
|