mirror of
https://github.com/dreamhunter2333/cloudflare_temp_email.git
synced 2026-09-05 15:38:34 +08:00
feat: add global forward address list (#288)
This commit is contained in:
@@ -4,6 +4,7 @@
|
|||||||
## main branch
|
## main branch
|
||||||
|
|
||||||
- UI: 增加本地缓存进行地址管理
|
- UI: 增加本地缓存进行地址管理
|
||||||
|
- worker: 增加 `FORWARD_ADDRESS_LIST` 全局邮件转发地址(等同于 `catch all`)
|
||||||
|
|
||||||
## v0.4.6
|
## v0.4.6
|
||||||
|
|
||||||
|
|||||||
@@ -105,6 +105,8 @@ ENABLE_AUTO_REPLY = false
|
|||||||
# DKIM_PRIVATE_KEY = "" # Refer to the contents of priv_key.txt in the DKIM section
|
# DKIM_PRIVATE_KEY = "" # Refer to the contents of priv_key.txt in the DKIM section
|
||||||
# telegram bot
|
# telegram bot
|
||||||
# TG_MAX_ACCOUNTS = 5
|
# TG_MAX_ACCOUNTS = 5
|
||||||
|
# global forward address list, if set, all emails will be forwarded to these addresses
|
||||||
|
# FORWARD_ADDRESS_LIST = ["xxx@xxx.com"]
|
||||||
|
|
||||||
[[d1_databases]]
|
[[d1_databases]]
|
||||||
binding = "DB"
|
binding = "DB"
|
||||||
|
|||||||
@@ -73,6 +73,8 @@ ENABLE_AUTO_REPLY = false
|
|||||||
# DKIM_PRIVATE_KEY = "" # 参考 DKIM 部分 priv_key.txt 的内容
|
# DKIM_PRIVATE_KEY = "" # 参考 DKIM 部分 priv_key.txt 的内容
|
||||||
# telegram bot 最多绑定邮箱数量
|
# telegram bot 最多绑定邮箱数量
|
||||||
# TG_MAX_ACCOUNTS = 5
|
# TG_MAX_ACCOUNTS = 5
|
||||||
|
# 全局转发地址列表,如果不配置则不启用,启用后所有邮件都会转发到列表中的地址
|
||||||
|
# FORWARD_ADDRESS_LIST = ["xxx@xxx.com"]
|
||||||
|
|
||||||
# D1 数据库的名称和 ID 可以在 cloudflare 控制台查看
|
# D1 数据库的名称和 ID 可以在 cloudflare 控制台查看
|
||||||
[[d1_databases]]
|
[[d1_databases]]
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import { Context } from "hono";
|
import { Context } from "hono";
|
||||||
|
|
||||||
|
import { getEnvStringList } from "../utils";
|
||||||
import { sendMailToTelegram } from "../telegram_api";
|
import { sendMailToTelegram } from "../telegram_api";
|
||||||
import { Bindings, HonoCustomType } from "../types";
|
import { Bindings, HonoCustomType } from "../types";
|
||||||
import { auto_reply } from "./auto_reply";
|
import { auto_reply } from "./auto_reply";
|
||||||
@@ -25,6 +26,16 @@ async function email(message: ForwardableEmailMessage, env: Bindings, ctx: Execu
|
|||||||
console.log(`Failed save message from ${message.from} to ${message.to}`);
|
console.log(`Failed save message from ${message.from} to ${message.to}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// forward email
|
||||||
|
try {
|
||||||
|
const forwardAddressList = getEnvStringList(env.FORWARD_ADDRESS_LIST)
|
||||||
|
for (const forwardAddress of forwardAddressList) {
|
||||||
|
await message.forward(forwardAddress);
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.log("forward email error", error);
|
||||||
|
}
|
||||||
|
|
||||||
// send email to telegram
|
// send email to telegram
|
||||||
try {
|
try {
|
||||||
await sendMailToTelegram(
|
await sendMailToTelegram(
|
||||||
|
|||||||
Vendored
+1
@@ -21,6 +21,7 @@ export type Bindings = {
|
|||||||
DEFAULT_SEND_BALANCE: number | string | undefined
|
DEFAULT_SEND_BALANCE: number | string | undefined
|
||||||
ADMIN_CONTACT: string | undefined
|
ADMIN_CONTACT: string | undefined
|
||||||
COPYRIGHT: string | undefined
|
COPYRIGHT: string | undefined
|
||||||
|
FORWARD_ADDRESS_LIST: string | string[] | undefined
|
||||||
|
|
||||||
// dkim
|
// dkim
|
||||||
DKIM_SELECTOR: string | undefined
|
DKIM_SELECTOR: string | undefined
|
||||||
|
|||||||
@@ -129,6 +129,23 @@ export const getAdminPasswords = (c: Context<HonoCustomType>): string[] => {
|
|||||||
return c.env.ADMIN_PASSWORDS.filter((item) => item.length > 0);
|
return c.env.ADMIN_PASSWORDS.filter((item) => item.length > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const getEnvStringList = (value: string | string[] | undefined): string[] => {
|
||||||
|
if (!value) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
// check if is an array, if not use json.parse
|
||||||
|
if (!Array.isArray(value)) {
|
||||||
|
try {
|
||||||
|
const res = JSON.parse(value) as string[];
|
||||||
|
return res.filter((item) => item.length > 0);
|
||||||
|
} catch (e) {
|
||||||
|
console.error("Failed to parse ADMIN_PASSWORDS", e);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return value.filter((item) => item.length > 0);
|
||||||
|
}
|
||||||
|
|
||||||
export const sendAdminInternalMail = async (
|
export const sendAdminInternalMail = async (
|
||||||
c: Context<HonoCustomType>, toMail: string, subject: string, text: string
|
c: Context<HonoCustomType>, toMail: string, subject: string, text: string
|
||||||
): Promise<boolean> => {
|
): Promise<boolean> => {
|
||||||
|
|||||||
@@ -47,6 +47,8 @@ ENABLE_AUTO_REPLY = false
|
|||||||
# DKIM_PRIVATE_KEY = ""
|
# DKIM_PRIVATE_KEY = ""
|
||||||
# telegram bot
|
# telegram bot
|
||||||
# TG_MAX_ACCOUNTS = 5
|
# TG_MAX_ACCOUNTS = 5
|
||||||
|
# global forward address list, if set, all emails will be forwarded to these addresses
|
||||||
|
# FORWARD_ADDRESS_LIST = ["xxx@xxx.com"]
|
||||||
|
|
||||||
[[d1_databases]]
|
[[d1_databases]]
|
||||||
binding = "DB"
|
binding = "DB"
|
||||||
|
|||||||
Reference in New Issue
Block a user