ZoneMTA HTTP 投递实战:用 POST 代替 SMTP 发送邮件
ZoneMTA HTTP 投递实战:用 POST 代替 SMTP 发送邮件【免费下载链接】zone-mta Modern outbound MTA cross platform and extendable server application项目地址: https://gitcode.com/gh_mirrors/zo/zone-mta你是否遇到过这样的场景目标服务不提供 SMTP 端口却有一个现成的 HTTP 接口或者你的业务系统希望用一行curl就把邮件交给队列而不是费力搭建邮件客户端ZoneMTA 这款基于 Node.js 的现代出站 MTA邮件传输代理除了支持传统的 SMTP 投递还内置了强大的HTTP 投递能力——既可以通过 HTTP API 收件也可以用 POST 代替 SMTP 把邮件发给任意 URL。本文将带你从零上手 ZoneMTA HTTP 投递用最少的代码把邮件送出去。为什么选择 HTTP 投递而不是 SMTP 投递传统邮件链路中发件方需要通过 SMTP 协议与接收方 MX 服务器反复对话HELO、MAIL FROM、RCPT TO、DATA……协议繁琐且对 IP 信誉要求高。而 ZoneMTA 的 HTTP 投递把这条链路简化成了一次普通的上传请求接入简单目标端只要有一个能接收 POST 的 HTTP 服务即可无需搭建邮件服务器协议统一内部系统之间用 HTTP 沟通运维和排错成本更低复用 ZoneMTA 全套能力队列管理、重试、退信bounce、发送分区Sending Zone照常生效你只需要在插件里改两个字段。下面我们把 ZoneMTA HTTP 投递拆成「进」和「出」两个方向来实战。方向一用 HTTP API 投递邮件收件端ZoneMTA 默认在12080端口开放 HTTP API配置见 config/default.js 中的api.port字段路由实现在 lib/api-server.js。它提供两种收件方式对应POST /send和POST /send-raw两个接口。方式 1POST 一个 JSON推荐新手使用直接提交一个 Nodemailer 风格的 JSON 结构ZoneMTA 会把它编译成标准的 rfc822 邮件并进入投递队列curl -H Content-Type: application/json \ -H X-Authenticated-User: andris \ -H X-Originating-IP: 123.123.123.123 \ -X POST http://localhost:12080/send -d { from: senderexample.com, to: recipient1example.com, recipient2example.com, subject: hello, text: hello world! }要点提示项目说明请求头Content-Type: application/json必须设置可选头X-Authenticated-User认证用户名、X-Originating-IP来源 IP附件只能用 base64 字符串提供内容不能引用本地文件或远程 URL出于安全考虑被禁用返回200 JSON包含队列 IDid、发件人、收件人方式 2POST 原始邮件适合已有 .eml 文件如果你手里已经有一封完整的 rfc822 邮件直接以message/rfc822类型上传即可信封信息发件人、收件人会从邮件头中自动解析curl -H Content-Type: message/rfc822 \ -X POST http://localhost:12080/send-raw \ -d From: senderexample.com To: recipient1example.com Subject: Hello! Hello world邮件进入队列后ZoneMTA 会完成 DKIM 签名、Sending Zone 路由、连接池管理、失败重试等一系列出站动作——HTTP API 只是入口后面的投递全交给 ZoneMTA。其中api:mail钩子由 plugins/core/api-send.js 实现你可以在插件里扩展校验逻辑比如限制单封邮件的收件人数量。方向二用 POST 代替 SMTP 投递邮件发送端这是 ZoneMTA 最独特的「HTTP 投递」能力投递时不再连接目标 MX而是把整封邮件作为文件上传multipart/form-dataPOST 到你指定的 URL。实现位于 lib/sender.js 的发送流程中。三步开启 HTTP 投递只需在sender:fetch钩子里设置两个字段delivery.http true和delivery.targetUrlapp.addHook(sender:fetch, (delivery, next) { delivery.http true; delivery.targetUrl https://your-service.example.com/inbox; next(); });就这么简单ZoneMTA 会把邮件以message/rfc822类型、.eml文件名作为附件上传同时附带以下表单字段供你的服务端解析mail_to_http[from]发件人地址mail_to_http[rcpt]收件人地址mail_to_http[body]邮件正文超过 500KB 时截断headers[...]关键邮件头subject、date、message_id 等的 JSON 序列化message完整邮件文件Content-Type: message/rfc822服务端如何判定投递结果接收方只要返回2xx 状态码ZoneMTA 就认为投递成功返回 3xx/4xx/5xx 则会被判定为失败状态码范围ZoneMTA 的处理200–299投递成功邮件从队列中删除400–499判定为硬退信reject触发 bounce 流程其他如 5xx判定为临时失败defer稍后自动重试这个判定逻辑也体现在 lib/sender.js 的错误处理中——HTTP 投递的失败信息protocol: http、httpUrl、httpResponse会被完整记录并纳入退信统计。你的服务端代码因此可以非常轻量只需返回一个正确的状态码。配置检查清单让 HTTP 投递跑起来在动手之前对照 config/default.js 确认这几项依赖组件齐全Node.js v16、MongoDB存储投递队列、Redis锁与计数器API 端口未被占用默认api.port: 12080同时确认 SMTP 端口2525与内部数据通道12081空闲认证按需开启默认配置里core/http-auth插件指向http://localhost:12080/test-auth作为示例认证地址生产环境务必替换为你自己的认证服务发送分区Sending ZoneHTTP 投递同样遵循路由规则可通过X-Sending-Zone头或routingHeaders配置把特定邮件导向不同的 zone。实战小结与进阶建议ZoneMTA 的 HTTP 投递让邮件发送变得前所未有的简单进POST /send收 JSON、POST /send-raw收原始邮件一行curl即可投递出插件里设置delivery.http truetargetUrl用 POST 替代 SMTP 直达任意 HTTP 服务稳队列、重试、退信、DKIM 签名、Prometheus 监控等能力全部复用无需额外开发。进阶玩法上你可以把 HTTP 投递目标指向自己的回调服务实现「邮件转 Webhook」也可以结合 Sending Zone 的 IP 池与限流参数为不同的业务线分配不同的投递通道。如果希望深入阅读实现细节推荐按这个顺序读源码先看 lib/api-server.js 理解收件入口再看 lib/sender.js 的 HTTP 分支理解上传格式最后读 config/default.js 熟悉全部可调参数。现在就去试一下起一个 ZoneMTA用curl向http://localhost:12080/send发一封测试邮件你会立刻感受到用 POST 代替 SMTP 发送邮件的畅快体验。【免费下载链接】zone-mta Modern outbound MTA cross platform and extendable server application项目地址: https://gitcode.com/gh_mirrors/zo/zone-mta创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

THCalendarDatePicker 安装教程:CocoaPods 与手动集成双方案详解(Objective-C + Swift)

THCalendarDatePicker 安装教程:CocoaPods 与手动集成双方案详解(Objective-C + Swift)

THCalendarDatePicker 安装教程:CocoaPods 与手动集成双方案详解(Objective-C Swift) 【免费下载链接】THCalendarDatePicker A DatePicker based on a custom calendar view 项目地址: https://gitcode.com/gh_mirrors/th/THCalendarDate…

2026/8/24 9:47:30 阅读更多 →
meta-glasses-api 新手避坑指南:10 个常见问题与快速解决方案

meta-glasses-api 新手避坑指南:10 个常见问题与快速解决方案

meta-glasses-api 新手避坑指南:10 个常见问题与快速解决方案 【免费下载链接】meta-glasses-api "Hey Meta send a message to ChatGPT" Mai: A Hacky Messenger browser extension & pseudo API for the Meta Glasses :eyeglasses: 项目地址: ht…

2026/8/24 8:13:36 阅读更多 →
async-stripe 订阅计费指南:订阅、发票与计费周期管理全流程

async-stripe 订阅计费指南:订阅、发票与计费周期管理全流程

async-stripe 订阅计费指南:订阅、发票与计费周期管理全流程 【免费下载链接】async-stripe Async (and blocking!) Rust bindings for the Stripe API 项目地址: https://gitcode.com/gh_mirrors/as/async-stripe 如果你正在用 Rust 构建 SaaS 产品&#xf…

2026/8/24 3:11:27 阅读更多 →

最新新闻

【非标自动化】2、认识元器件(调压阀)

【非标自动化】2、认识元器件(调压阀)

调压阀这里的调压阀,指的是气动系统中的空气减压阀/压力调节阀。它通常安装在气源处理组件中,用来把上游较高、存在波动的压缩空气压力,降低并稳定在设备需要的工作压力。例如:工厂气源压力:0.7 MPa 设备需要压力&…

2026/8/24 12:46:40 阅读更多 →
西门子PLC程序模拟入门:TIA Portal与S7-PLCSIM实战指南

西门子PLC程序模拟入门:TIA Portal与S7-PLCSIM实战指南

1. 项目概述:为什么我们需要模拟PLC程序? 如果你刚接触西门子PLC编程,或者正在学习一个新的控制逻辑,最头疼的事情是什么?我猜很多人会说是“没有硬件”。一台西门子S7-1200或S7-1500的实体PLC价格不菲,更别…

2026/8/24 12:46:40 阅读更多 →
【非标自动化】2、认识元器件(节流阀)

【非标自动化】2、认识元器件(节流阀)

节流阀节流阀是一种通过改变空气流通截面积,限制压缩空气流量的气动元件。在非标自动化设备中,节流阀最常见的用途是控制气缸的运动速度。可以先记住:调压阀:主要调压力,影响气缸推力 节流阀:主要调流量&am…

2026/8/24 12:46:40 阅读更多 →
Is GraphRAG Needed?From Basic RAG to Graph-/Agentic Solutions with Context Optimization是否需要 GraphRAG

Is GraphRAG Needed?From Basic RAG to Graph-/Agentic Solutions with Context Optimization是否需要 GraphRAG

这篇文章的核心是系统性地评估了不同RAG架构在半结构化知识库上的表现,并回答了"何时以及如何使用GraphRAG和Agentic RAG"这一关键问题。以下是全面总结: 一、研究背景与问题 传统RAG在处理半结构化知识库(同时包含文本和实体关系…

2026/8/24 12:46:40 阅读更多 →
Continue插件 JetBrains 上手指南:5 分钟跑通一个编码循环

Continue插件 JetBrains 上手指南:5 分钟跑通一个编码循环

Continue插件 JetBrains 上手指南:5 分钟跑通一个编码循环 【免费下载链接】continue open-source coding agent 项目地址: https://gitcode.com/GitHub_Trending/co/continue 在 IntelliJ IDEA 里接手遗留服务,对开发者来说都磨人:读…

2026/8/24 12:46:40 阅读更多 →
基于DeepSeek API的AI字幕翻译实战:从SRT解析到视频封装全流程

基于DeepSeek API的AI字幕翻译实战:从SRT解析到视频封装全流程

最近在整理经典动画资源时,发现很多朋友对《万能战士无比敌》(又名《无敌侠》)这部1980年的老动画情有独钟,但苦于找不到高质量的中文字幕版本。网上流传的英文字幕文件,对于想重温童年回忆或初次接触的观众来说&#…

2026/8/24 12:45:40 阅读更多 →

日新闻

前端内容安全与依赖审计实践

前端内容安全与依赖审计实践

前端内容安全与依赖审计实践 前端安全依赖分层防护。没有任何单一配置能替代输出编码、权限校验和依赖更新。 把不可信内容当作数据 默认使用框架的转义能力;确需渲染 HTML 时,先在服务端或可信的客户端库中进行白名单过滤。避免把用户输入直接赋给 inne…

2026/8/24 1:08:15 阅读更多 →
Windows登录密码存储机制全解析:从哈希算法到安全加固实战

Windows登录密码存储机制全解析:从哈希算法到安全加固实战

1. 项目概述:Windows登录密码的“黑匣子”每次你按下CtrlAltDel,输入密码,然后看到那个熟悉的桌面,这背后发生了一系列复杂而精密的操作。作为一名长期与Windows系统打交道的从业者,我经常被问到:“我的密码…

2026/8/24 1:08:15 阅读更多 →
AI面试系统安全挑战与解决方案

AI面试系统安全挑战与解决方案

1. 项目概述:AI面试系统的安全挑战去年参与某跨国企业AI面试系统部署时,遇到一个典型案例:候选人在视频面试中无意提到竞争对手产品名称,系统竟自动将该信息关联到企业知识库并生成竞品分析报告。这个看似"智能"的功能&…

2026/8/24 1:08:15 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/24 0:06:02 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/24 0:20:20 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/24 0:14:11 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/23 18:47:06 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/23 12:10:44 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/24 11:20:22 阅读更多 →