在这里插入图片描述

适用人群:

  • 使用 Cloudflare 做 DNS 托管的自有域名(示例:anymk.app
  • 只发 事务型(Transactional) 邮件(系统通知、任务提醒、告警),不用 Mailjet 做营销群发

全流程速览

  1. 注册/激活 Mailjet 账号 → 完成业务审核
  2. 在 Mailjet 添加 发送域 → 配置 SPF / DKIM / DMARC(Cloudflare)
  3. 通过 Mailjet 的域名认证检测(SPF/DKIM = OK)
  4. 申请解除发送限制 / 解封(如遇到审查或“发送被暂停”)
  5. 获取 API Key / Secret → 选择 SMTPSend API 对接发信
  6. 配置 事件回调 Webhooks(Event Notifications) 做投递与退信监控
  7. 进行 投递验证(查看邮件原文,确认 SPF/DKIM/DMARC 均 PASS)

实战心得:最大坑往往出在 DNS(尤其是 SPF 多条、DKIM 换行)发件人策略(用免费邮箱当 From)


Step 0:准备工作与名词

  • 发送域(From Domain):建议使用自有域名,例如 noreply@yourdomain.com
  • 事务型邮件:与业务操作直接相关的通知,不需要退订链接,但不要混入营销内容
  • Cloudflare 橙云/灰云:TXT/MX 记录与代理无关,但注意不要把 MX 或发信相关主机开代理。

Step 1:注册 & 审核(解封)

  1. 注册 Mailjet,完成邮箱验证。
  2. 如出现“Your sending activity is currently suspended/已暂停发送”,通常需要补充业务说明。建议一次性提供:
    • 业务简介(做什么,服务对象是谁)
    • 月发送量(区间即可,如 500–1,000/月)
    • 邮件类型(明确:仅事务型,无营销/推广)
    • 触发场景 & 频次(例如任务分派、任务完成通知、系统告警)
    • 收件人来源(仅员工、内部系统产生,非购买或第三方列表)
    • 示例邮件(3 封左右,含主题/正文/收件人角色)
  3. 如客服要求,**先完成域名认证(SPF/DKIM)**再继续审核。

模板(可中英双语)在文末附录。


Step 2:在 Mailjet 添加发送域

路径:Account → Domains and senders → SPF/DKIM Authentication

添加你要作为 From 使用的域(例如 anymk.app)。添加后,Mailjet 会给出:

  • 一个 域验证 TXT(形如 mailjet._XXXXXXXX
  • 一个 DKIM TXTmailjet._domainkey
  • SPF 建议值

Cloudflare 中按下文配置。


Step 3:SPF 配置(只能一条,合并所有发信源)

常见坑:同一个主机(通常是根域 @)存在多条 SPF TXT,结果整体 SPF 失效。

做法

  1. 在 Cloudflare 的 DNS → 记录 中,找到现有 SPF TXT 记录,合并为一条
  2. 将你用到的发信源 全部 include 到同一条 SPF。例如你同时用 Mailjet、Google Workspace、Cloudflare Email Routing,可以这样:
v=spf1 include:spf.mailjet.com include:_spf.google.com include:_spf.mx.cloudflare.net ~all

小贴士:

  • 末尾选择 ~all(软失败)更稳妥;成熟后可评估改为 -all(硬失败)。
  • SPF 有 10 次 DNS lookup 限制,不要盲目堆叠 include;如接近上限,考虑“扁平化”(flatten)。
  • 记录只有一条,若 Cloudflare 提示“有多个 SPF 记录无效”,请删除多余的 TXT。

Step 4:DKIM 配置(单行、2048 位、带引号

在 Mailjet 的“Domain Authentication Setup”里会看到:

  • 记录类型:TXT
  • 主机名(Hostname):mailjet._domainkey
  • 值(Value):k=rsa; p=...一整行,2048 bit 公钥)

常见坑:

  • 把 DKIM 值粘贴成多行、或缺少引号,导致 Mailjet 检测报错。
  • 解决:在 Cloudflare 新建 TXT 时,把 k=rsa; p=...一对双引号 包起来(超长值 Cloudflare 会自动按 RFC 分片,但在 UI 里看仍是一条)。

保存后回到 Mailjet 点 Refresh 检测,直到 DKIM = OK


Step 5:DMARC(先 p=none 观察,再收紧)

在 Cloudflare 添加 TXT 记录:

  • 名称_dmarc
v=DMARC1; p=none; rua=mailto:dmarc@yourdomain.com; ruf=mailto:dmarc@yourdomain.com; fo=1

建议先 p=none 收集报告 1–2 周,确认影响后可逐步改为 quarantinereject


Step 6:可选设置(更“像自己”)

  • Account → Tracking settings
    • 事务型邮件一般可只开 Open/Click 里你真正需要的指标;减少重写链接带来的“追踪”痕迹。
  • Page Domains:若用 Mailjet 托管退订页/表单/登陆页,设置自定义子域(品牌化)。

Step 7:获取 API Key & 发送方式

路径:Account → API Key Management

A) SMTP 方式(最简单)

  • Hostin-v3.mailjet.com
  • Port587(STARTTLS)或 465(SSL)
  • Username:Mailjet API Key
  • Password:Mailjet Secret Key

Node.js(Nodemailer)示例:

import nodemailer from 'nodemailer';

const transporter = nodemailer.createTransport({
  host: 'in-v3.mailjet.com',
  port: 587,
  secure: false, // 587 + STARTTLS
  auth: {
    user: process.env.MJ_API_KEY,
    pass: process.env.MJ_API_SECRET,
  },
});

await transporter.sendMail({
  from: 'noreply@yourdomain.com', // 必须是已认证域
  to: 'employee@yourdomain.com',
  subject: '任务指派 #12345',
  text: '请在 App 查看任务详情',
});

B) Send API 方式(更灵活)

cURL 示例:

curl -s \
  -X POST \
  --user "$MJ_API_KEY:$MJ_API_SECRET" \
  -H 'Content-Type: application/json' \
  -d '{
    "Messages": [
      {
        "From": {"Email": "noreply@yourdomain.com", "Name": "System"},
        "To": [{"Email": "employee@yourdomain.com"}],
        "Subject": "任务完成通知 #67890",
        "TextPart": "任务已完成,请在后台审核。"
      }
    ]
  }' \
  https://api.mailjet.com/v3.1/send

Step 8:事件回调 Webhooks(强烈推荐)

路径:Account → Event notifications (webhooks)

  • 建议至少订阅:bounce, blocked, spam, unsub, open, click
  • 你的服务端暴露一个 HTTPS 接口接收 JSON,收到后入库/告警。
  • 先用 Mailjet 的 Test 功能验证签名/可达性。

Step 9:投递验证(Header 自查)

给自己的 Gmail/Outlook 发一封,打开“查看原始邮件 / View Original”,确认:

  • spf=pass(domain=yourdomain.com)
  • dkim=pass(selector=mailjet
  • dmarc=pass(policy=none/quarantine/reject)
  • Return-Path/From/Message-ID 等域名一致性合理(尽量同域或可解释的子域)。

Step 10:高频坑与解决

  1. SPF 多条合并为单条,只保留一条包含所有 include 的 TXT。
  2. DKIM 值换行/缺引号 → 以 单行 + 双引号 形式保存。
  3. gmail.com 等免费邮箱当 From → 被拒:Mailjet 明确不支持作为发件域;必须用自有域。
  4. DNS 传播 → Cloudflare 一般几分钟,但客户端缓存/递归解析器可能延迟;等 5–30 分钟再点 Mailjet 的 Refresh
  5. 事务型邮件被当营销 → 文案避免“促销/折扣/营销词”,不必加退订,但确保确属业务必要通知
  6. 点击追踪导致超链接被重写 → 若介意,可在 Tracking settings 关闭 Click tracking 或仅在特定邮件禁用。
  7. 退信 550/5.7.x(未认证/策略失败) → 逐项核对 SPF/DKIM/DMARC 的 PASS;检查 From 域、Return-Path、信封发件人与头部一致性。
  8. Cloudflare 提示“有多个 SPF 记录无效” → 删除多余 SPF TXT(见 Step 3)。

Step 11:合规与策略(事务型)

  • 收件人均为员工/内部,邮件是履职所需;无需退订。
  • 严禁导入购买/第三方列表。
  • 保留发送日志与回执,便于审计。

Step 12:故障排查清单(Checklist)

  • @ 根域只有 一条 SPF,内容包含 include:spf.mailjet.com 与其他必要 include
  • mailjet._domainkey TXT 存在,值为单行 2048 位公钥
  • _dmarc TXT 存在,先 p=none 收集报告
  • Mailjet 后台 SPF = OK,DKIM = OK
  • API Key/Secret 正确,SMTP 587/STARTTLS 或 465/SSL 可连通
  • Webhooks 正常收到事件
  • 实测邮件头:spf=passdkim=passdmarc=pass

Cloudflare 操作速记

  • 进入 DNS → 记录
    • 新建 TXT(名称 @):SPF 合并后的那一条
    • 新建 TXT(名称 mailjet._domainkey):粘贴 DKIM 值(单行)
    • 新建 TXT(名称 _dmarc):DMARC 策略
  • 保存后回 Mailjet 点 Refresh

附录 A:与 Mailjet 支持沟通模板(英文)

Subject: Account Review Information – Transactional Emails Only

Hi Mailjet Support,

We use Mailjet only for transactional emails to our employees. Monthly volume: 500–1,000.

Triggers:
1) Work Assignment → to field workers (5–10/week)
2) Task Completion → to supervisors (10–20/day)
3) System Alerts → to admins (1–2/week)

Recipients: employees only (internal HR directory), no purchased/third‑party lists.

Compliance: no marketing or promotional content; work‑related notifications only.

Domain authentication has been completed (SPF/DKIM OK). Samples attached below if needed.

Could you please lift the sending suspension?

Thanks,
[Your Name]

附录 B:事务型邮件示例(可直接用作模板)

任务指派

Subject: 新任务已分派 - #12345
From: noreply@yourdomain.com
To: employee@yourdomain.com

您好,
系统已为您分派新的任务:#12345。
请在移动端 App 查看详情并按时处理。

任务完成通知

Subject: 任务已完成 - #67890
From: noreply@yourdomain.com
To: supervisor@yourdomain.com

您好,
任务 #67890 已由 {员工姓名} 完成,请在后台审核。

系统告警

Subject: 【告警】数据同步失败 - 需处理
From: alerts@yourdomain.com
To: admin@yourdomain.com

时间:2025-11-06 15:00
类型:数据同步失败
条目:15
请尽快查看同步日志并处理。

结语

按照以上步骤走,90% 的坑基本都能避开:

  • Cloudflare 里 SPF 只留一条,DKIM 单行
  • Mailjet 后台看到 SPF/DKIM = OK 再联调
  • p=none 看 DMARC 报告,确认稳定后再收紧
  • 打通 Webhooks,出现退信/封禁能第一时间发现

如果你现在的域名已经是 OK 状态,但仍被暂停发送,直接把本指南里的关键信息整理给支持(附加 2–3 封事务型示例),一般就能顺利解封。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐