Featured image of post 使用Mailgun创建自定义域名发信邮箱

使用Mailgun创建自定义域名发信邮箱

手把手教你轻松实现私人域名邮箱发信

准备

前言:本文仅介绍通过Mailgun进行发信,不支持收信,收信方式可以通过Cloudflare提供的电子邮件路由功能实现,两者可以共存

一枚域名、一个邮箱、域名对应DNS解析控制台

起步

1.注册Mailgun

前往 Mailgun官网 注册一个账户,通过自己的邮箱注册即可,不需要添加付款方式,使用免费额度的账户即可

本质上注册流程并不复杂,但是对于大部分新注册的个人用途账户一般会被冻结,在Mailgun控制台页面顶部会提示Account disabled,这个时候就需要在支持页面发起工单了,如实说明自己的用途就行,以下是几个注意点

1.说明个人用途、非营利状况
2.使用Mailgun发信的目的
3.说明每日大概发信量
4.提供网站的隐私政策/服务条款 (可选)

总之就是尽量解释清楚自己不是广告、垃圾邮件且发信量很小,只是用来和朋友通信等等基本都可以通过审核的,对于免费账户每日发信额度为100封

2.添加自定义域名

登入 Mailgun管理后台,在左侧侧栏中选择 Send -> Sending -> Domains,添加一个新的域名即可

然后会要求添加 DNS记录 来验证域名有效性,我们只需要在域名DNS控制台中添加 Sending records 部分即可

Sending-Records

添加并验证通过后即可

3.创建发信 API Key

在上图中的任务栏中选择 Sending Keys 并创建一个密钥,请切记保管好你的发信密钥,任何拥有此密钥的人都可以进行发信,一旦泄露请立即重置!

4.如何发信

在本地电脑上创建一个名为 smtp.indexl 的页面文件,并写入下列内容

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Mailgun 邮件发送</title>
    <script>
        function sendEmail() {
            let mailgunApiKey = "your-key";  // 替换为你的 Mailgun API Key
            let domain = "your-domain";  // 替换为你的 Mailgun 域名

            let to = document.getElementById("to").value;
            let subject = document.getElementById("subject").value;
            let message = document.getElementById("message").value;

            if (!to || !subject || !message) {
                alert("请填写完整信息");
                return;
            }

            // 创建邮件请求的数据
            let data = new FormData();
            data.append("from", "emailname@your-domain");  // 发件人邮箱
            data.append("to", to);  // 收件人邮箱
            data.append("subject", subject);  // 邮件主题
            data.append("text", message);  // 邮件内容

            // 使用 Fetch API 发送邮件请求
            fetch(`https://api.mailgun.net/v3/${domain}/messages`, {
                method: "POST",
                headers: {
                    "Authorization": "Basic " + btoa("api:" + mailgunApiKey),
                },
                body: data
            })
            .then(response => response.json())
            .then(data => {
                if (data.message === "Queued. Thank you.") {
                    alert("邮件发送成功!");
                } else {
                    alert("发送失败:" + data.message);
                }
            })
            .catch(error => {
                alert("发送失败:" + error);
            });
        }
    </script>
    <style>
        body {
            font-family: Arial, sans-serif;
            max-width: 400px;
            margin: 50px auto;
            padding: 20px;
            border-radius: 10px;
            box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
            background: #f9f9f9;
        }
        label, input, textarea {
            width: 100%;
            margin-bottom: 10px;
        }
        button {
            width: 100%;
            padding: 10px;
            background-color: #007bff;
            color: white;
            border: none;
            border-radius: 5px;
            cursor: pointer;
        }
        button:hover {
            background-color: #0056b3;
        }
    </style>
</head>
<body>
    <h2>Mailgun 邮件发送</h2>
    
    <label for="to">收件人邮箱:</label>
    <input type="email" id="to" placeholder="请输入收件人邮箱" required>

    <label for="subject">邮件主题:</label>
    <input type="text" id="subject" placeholder="请输入邮件主题" required>

    <label for="message">邮件内容:</label>
    <textarea id="message" rows="5" placeholder="请输入邮件内容"></textarea>

    <button onclick="sendEmail()">发送邮件</button>
</body>
</html>

请注意修改文件中的 Mailgun API Key、你的域名、你的发件人邮箱 通过API Key发送邮件支持任意邮箱用户名,邮箱后缀固定为你的域名

警告:不要将这个页面暴露于公网,仅限内网或本地使用,即使不包含API Key的情况下也不建议

如何与Cloudflare电子邮件路由共存

在域名DNS控制台中添加Cloudflare电子邮件路由所需的4条DNS解析内容,然后再添加Mailgun的两条发信DNS记录

这时,会发现两边有一个重复的TXT记录,这个时候就需要将两条内容合并到一起

TXT记录 名称 内容
Mailgun发信 你的根域名domain.com “v=spf1 include:mailgun.org ~all”
Cloudflare电子路由转发 你的根域名domain.com “v=spf1 include:_spf.mx.cloudflare.net ~all”

合并后的DNS记录内容为 "v=spf1 include:_spf.mx.cloudflare.net include:mailgun.org ~all" 注意不要遗漏双引号

这样就可以实现收信通过Cloudflare电子邮件路由转发至你的私人邮箱,再通过自己的域名发信

结语

这算是一个零成本的发信解决方案吧,不过这样子发出去的邮件基本都会被认定为垃圾邮件,所以仅供图一乐,使用时需要告知对方注意查看垃圾箱哦~

版权

本文章隶属于 DDverse ,遵循 © CC BY-NC-SA 4.0 协议,如需转载请保留来源并在必要的时候告知我