mirror of
https://github.com/dreamhunter2333/cloudflare_temp_email.git
synced 2026-05-06 20:32:55 +08:00
@@ -1,7 +1,7 @@
|
|||||||
import { Context } from 'hono';
|
import { Context } from 'hono';
|
||||||
|
|
||||||
import { HonoCustomType } from '../types';
|
import { HonoCustomType } from '../types';
|
||||||
import { getAdminPasswords, getBooleanValue, getDefaultDomains, getDomains, getIntValue, getPasswords, getStringArray, getStringValue, getUserRoles, getAnotherWorkerList, getSplitStringListValue } from '../utils';
|
import { getAdminPasswords, getBooleanValue, getDefaultDomains, getDomains, getIntValue, getPasswords, getStringArray, getStringValue, getUserRoles, getSubdomainForwardAddressList, getAnotherWorkerList, getSplitStringListValue } from '../utils';
|
||||||
import { CONSTANTS } from '../constants';
|
import { CONSTANTS } from '../constants';
|
||||||
import { isS3Enabled } from '../mails_api/s3_attachment';
|
import { isS3Enabled } from '../mails_api/s3_attachment';
|
||||||
|
|
||||||
@@ -21,6 +21,7 @@ export default {
|
|||||||
"MAX_ADDRESS_LEN": getIntValue(c.env.MAX_ADDRESS_LEN, 30),
|
"MAX_ADDRESS_LEN": getIntValue(c.env.MAX_ADDRESS_LEN, 30),
|
||||||
|
|
||||||
"FORWARD_ADDRESS_LIST": getStringArray(c.env.FORWARD_ADDRESS_LIST),
|
"FORWARD_ADDRESS_LIST": getStringArray(c.env.FORWARD_ADDRESS_LIST),
|
||||||
|
"SUBDOMAIN_FORWARD_ADDRESS_LIST": getSubdomainForwardAddressList(c),
|
||||||
"DEFAULT_DOMAINS": getDefaultDomains(c),
|
"DEFAULT_DOMAINS": getDefaultDomains(c),
|
||||||
"DOMAINS": getDomains(c),
|
"DOMAINS": getDomains(c),
|
||||||
"DOMAIN_LABELS": getStringArray(c.env.DOMAIN_LABELS),
|
"DOMAIN_LABELS": getStringArray(c.env.DOMAIN_LABELS),
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import { Context } from "hono";
|
import { Context } from "hono";
|
||||||
|
|
||||||
import { getEnvStringList } from "../utils";
|
import { getEnvStringList } from "../utils";
|
||||||
|
import { getSubdomainForwardAddressList } from "../utils";
|
||||||
import { sendMailToTelegram } from "../telegram_api";
|
import { sendMailToTelegram } from "../telegram_api";
|
||||||
import { Bindings, HonoCustomType, RPCEmailMessage, ParsedEmailContext } from "../types";
|
import { Bindings, HonoCustomType, RPCEmailMessage, ParsedEmailContext } from "../types";
|
||||||
import { auto_reply } from "./auto_reply";
|
import { auto_reply } from "./auto_reply";
|
||||||
@@ -67,6 +68,30 @@ async function email(message: ForwardableEmailMessage, env: Bindings, ctx: Execu
|
|||||||
console.error("forward email error", error);
|
console.error("forward email error", error);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// forward subdomain email
|
||||||
|
try {
|
||||||
|
// 遍历 FORWARD_ADDRESS_LIST
|
||||||
|
const subdomainForwardAddressList = getSubdomainForwardAddressList(env.SUBDOMAIN_FORWARD_ADDRESS_LIST)
|
||||||
|
for (const subdomainForwardAddress of subdomainForwardAddressList) {
|
||||||
|
// 检查邮件是否匹配 domains
|
||||||
|
if (subdomainForwardAddress.domains && subdomainForwardAddress.domains.length > 0) {
|
||||||
|
for (const domain of subdomainForwardAddress.domains) {
|
||||||
|
if (message.to.endsWith(domain)) {
|
||||||
|
// 转发邮件
|
||||||
|
await message.forward(subdomainForwardAddress.forward);
|
||||||
|
// 支持多邮箱转发收件,不进行截止
|
||||||
|
// break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// 如果 domains 为空,则转发所有邮件
|
||||||
|
await message.forward(subdomainForwardAddress.forward);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error("subdomain forward email error", error);
|
||||||
|
}
|
||||||
|
|
||||||
// send email to telegram
|
// send email to telegram
|
||||||
try {
|
try {
|
||||||
await sendMailToTelegram(
|
await sendMailToTelegram(
|
||||||
|
|||||||
6
worker/src/types.d.ts
vendored
6
worker/src/types.d.ts
vendored
@@ -4,6 +4,11 @@ export type UserRole = {
|
|||||||
prefix: string | undefined | null
|
prefix: string | undefined | null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type SubdomainForwardAddressList = {
|
||||||
|
domains: string[] | undefined | null,
|
||||||
|
forward: string
|
||||||
|
}
|
||||||
|
|
||||||
export type Bindings = {
|
export type Bindings = {
|
||||||
// bindings
|
// bindings
|
||||||
DB: D1Database
|
DB: D1Database
|
||||||
@@ -44,6 +49,7 @@ export type Bindings = {
|
|||||||
COPYRIGHT: string | undefined
|
COPYRIGHT: string | undefined
|
||||||
DISABLE_SHOW_GITHUB: string | boolean | undefined
|
DISABLE_SHOW_GITHUB: string | boolean | undefined
|
||||||
FORWARD_ADDRESS_LIST: string | string[] | undefined
|
FORWARD_ADDRESS_LIST: string | string[] | undefined
|
||||||
|
SUBDOMAIN_FORWARD_ADDRESS_LIST: string | SubdomainForwardAddressList[] | undefined
|
||||||
|
|
||||||
ENABLE_CHECK_JUNK_MAIL: string | boolean | undefined
|
ENABLE_CHECK_JUNK_MAIL: string | boolean | undefined
|
||||||
JUNK_MAIL_CHECK_LIST: string | string[] | undefined
|
JUNK_MAIL_CHECK_LIST: string | string[] | undefined
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { Context } from "hono";
|
import { Context } from "hono";
|
||||||
import { createMimeMessage } from "mimetext";
|
import { createMimeMessage } from "mimetext";
|
||||||
import { HonoCustomType, UserRole, AnotherWorker } from "./types";
|
import { HonoCustomType, UserRole, SubdomainForwardAddressList, AnotherWorker } from "./types";
|
||||||
|
|
||||||
export const getJsonObjectValue = <T = any>(
|
export const getJsonObjectValue = <T = any>(
|
||||||
value: string | any
|
value: string | any
|
||||||
@@ -165,6 +165,22 @@ export const getUserRoles = (c: Context<HonoCustomType>): UserRole[] => {
|
|||||||
return c.env.USER_ROLES;
|
return c.env.USER_ROLES;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const getSubdomainForwardAddressList = (c: Context<HonoCustomType>): SubdomainForwardAddressList[] => {
|
||||||
|
if (!c.env.SUBDOMAIN_FORWARD_ADDRESS_LIST) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
// check if SUBDOMAIN_FORWARD_ADDRESS_LIST is an array, if not use json.parse
|
||||||
|
if (!Array.isArray(c.env.SUBDOMAIN_FORWARD_ADDRESS_LIST)) {
|
||||||
|
try {
|
||||||
|
return JSON.parse(c.env.SUBDOMAIN_FORWARD_ADDRESS_LIST);
|
||||||
|
} catch (e) {
|
||||||
|
console.error("Failed to parse SUBDOMAIN_FORWARD_ADDRESS_LIST", e);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return c.env.SUBDOMAIN_FORWARD_ADDRESS_LIST;
|
||||||
|
}
|
||||||
|
|
||||||
export const getAnotherWorkerList = (c: Context<HonoCustomType>): AnotherWorker[] => {
|
export const getAnotherWorkerList = (c: Context<HonoCustomType>): AnotherWorker[] => {
|
||||||
if (!c.env.ANOTHER_WORKER_LIST) {
|
if (!c.env.ANOTHER_WORKER_LIST) {
|
||||||
return [];
|
return [];
|
||||||
|
|||||||
@@ -80,6 +80,8 @@ ENABLE_AUTO_REPLY = false
|
|||||||
# TG_BOT_INFO = "{}"
|
# TG_BOT_INFO = "{}"
|
||||||
# global forward address list, if set, all emails will be forwarded to these addresses
|
# global forward address list, if set, all emails will be forwarded to these addresses
|
||||||
# FORWARD_ADDRESS_LIST = ["xxx@xxx.com"]
|
# FORWARD_ADDRESS_LIST = ["xxx@xxx.com"]
|
||||||
|
# subdomain forward address list, if set, subdomain emails will be forwarded to these addresses
|
||||||
|
# SUBDOMAIN_FORWARD_ADDRESS_LIST = [{"domains":[""],"forward":"xxx1@xxx.com",},{"domains":["subdomain-1.domain.com","subdomain-2.domain.com"],"forward":"xxx2@xxx.com"}]
|
||||||
# Frontend URL
|
# Frontend URL
|
||||||
# FRONTEND_URL = "https://xxxx.xxx"
|
# FRONTEND_URL = "https://xxxx.xxx"
|
||||||
# Enable check junk mail
|
# Enable check junk mail
|
||||||
|
|||||||
Reference in New Issue
Block a user