自建无限别名的域名邮箱--web查看邮件

效果,发往所有【*@opao.458741.xyz】这个邮箱的均可以通过转发邮箱,或者网页获取

比如,发送 [email protected],然后就可以在https://eamil.458741.xyz/data/user 获取

前置:一个域名+一个vercel账号

github
先去GitHub部署一个web页面
ps:key是管理员的密钥,必填,方便查询所有的邮件
然后绑定一个自己的域名,比如此处绑定的是https://eamil.458741.xyz

然后再去https://forwardemail.net 这个地方注册一个账号,,无任何验证,随便邮箱都行
新建一个你需要设置的域名邮箱,支持二级域名,理论上可以无限套娃

然后去解析你的dns,


第一个是你的vercel的解析记录
第二个/第三个,照抄
第四/第五,可以任选,或者都要。第四。需要转发的邮箱,第五,需要转发的web页面,来自上述的vercel部署

静待解析生效,欧克了

实践:
访问x.ai,注册账号,随便填一个别名邮箱,一直到发送邮件;例:[email protected]
访问https://eamil.458741.xyz/data/sdfgdsd 复制验证链接,点击打开。

回到x.ai点继续,生成key

结束

注意: 邮件内容,会在vercel休眠时,自动回收内存清空,具体多少,我也不知道,还设置了每天1点会自动执行清空。通过发送delete请求,可以手动删除特定或所有邮件

这个免费的邮件服务器,无法发件,需要别的,可以自行寻找别的,原理都是差不多的

1、部署web
2、绑定域名到邮件服务器
3、设置解析

13 个赞

有个简单的方法,域名托管到cf上直接就可以了.

cf转发不就可以了吗 :bili_004:

6 个赞

cf转发可以无限别名,咋弄的。
还要转发到web页面

我看cf只能一个邮箱



就这样,全部邮箱都转发到一个邮箱去了

感谢大佬分享

转发到邮箱 ,很多都可以实现。比如我的注册商也可以。。
但是最主要的是用web查看,就不用一直请求邮件服务器了。

比如你用脚本注册某些服务的时候。

我比较菜,这个没有看懂。
我用的CF转发,什么时候转发的邮件可以查看日志,转发到哪个邮箱也可以设置。

感谢大佬的分享

使用cf的邮件work搭建的邮件服务器…kv存储.

简单看了一下,cf 的worker的确也可以实现。原理都是差不多的。

感谢分享。

大佬怎么搭建的,可以给一下链接吗 :tieba_087:

6 个赞

这是哪个项目啊

这个感觉好好,有教程吗



export default {
    async email(message, env, ctx) {
        try {
        const rawStream = message.raw; // 获取 raw 可读流
        if (!rawStream) {
            return new Response("No body found", { status: 400 });
        }
        // 将 raw 可读流转换为文本
        const rawText = await new Response(rawStream).text(); // 读取流为文本

        const forMatch = rawText.match(/for\s*<([^>]+)>/i);
        const recipientEmail = forMatch ? forMatch[1] : "Unknown Recipient";


        // 写入 Cloudflare KV
        await env.BINDINGNAME.put(recipientEmail, rawText,{ expirationTtl: 600 });
        return new Response("Email content processed successfully!", { status: 200 });
    }

    catch(err) {
        console.error("Error processing email content:", err);
        return new Response("Failed to process email", { status: 500 });
    }

},
async fetch(request, env, ctx) {
    const url = new URL(request.url); // 解析请求 URL
    const pathname = url.pathname; // 获取路径名部分

    if (request.method === "GET" && pathname.startsWith('/data/'))  {

        const wildcardPath = pathname.slice(6); // 获取通配符路径部分
        const vaule = await env.BINDINGNAME.get(wildcardPath); // 从 KV 中获取数据
        return new Response(vaule, {
            headers: { 'Content-Type': 'text/plain' },
        });

    }

    else {
        return new Response("Not Found", { status: 404 });
    }
}

}

可以参考,但是,这个没有处理mine数据

1 个赞

大佬,能分享下怎么搭建的吗,谢谢