
欢迎使用Mailjet官方JavaScript SDK,它使用webpack、babel和es5构建。
这可以在node或浏览器中使用。
查看官方Mailjet文档中的所有资源和JS代码示例。
注意:
如果在浏览器中使用,目前由于CORS限制,需要代理与Mailjet API通信。
另外,不要在前端代码中公开您的私有API密钥。
此库官方支持以下Node.JS版本:
v12.x使用以下代码安装SDK:
npm install node-mailjet
Mailjet Email API使用您的公钥和私钥进行认证。
export MJ_APIKEY_PUBLIC='您的API密钥' export MJ_APIKEY_PRIVATE='您的API密钥' export MJ_API_TOKEN='您的API令牌'
注意:
对于SMS API,授权基于Bearer令牌。
有关详细信息,请参阅自述文件中的SMS API部分。
接 下来,导入模块并初始化您的Mailjet客户端:
const Mailjet = require('node-mailjet');
对于EMAIL API和SEND API:
const mailjet = new Mailjet({ apiKey: process.env.MJ_APIKEY_PUBLIC || '您的API密钥', apiSecret: process.env.MJ_APIKEY_PRIVATE || '您的API密钥' });
对于SMS API:
const mailjet = new Mailjet({ apiToken: process.env.MJ_API_TOKEN || '您的API令牌' });
对于EMAIL API和SEND API,您可以使用静态方法apiConnect:
const mailjet = Mailjet.apiConnect( process.env.MJ_APIKEY_PUBLIC, process.env.MJ_APIKEY_PRIVATE, { config: {}, options: {} } );
对于SMS API,您可以使用静态方法smsConnect:
const mailjet = Mailjet.smsConnect( process.env.MJ_API_TOKEN, { config: {}, options: {} } );
以下是如何发送电子邮件的示例:
const Mailjet = require('node-mailjet'); const mailjet = Mailjet.apiConnect( process.env.MJ_APIKEY_PUBLIC, process.env.MJ_APIKEY_PRIVATE, ); const request = mailjet .post('send', { version: 'v3.1' }) .request({ Messages: [ { From: { Email: "pilot@mailjet.com", Name: "Mailjet Pilot" }, To: [ { Email: "passenger1@mailjet.com", Name: "passenger 1" } ], Subject: "Your email flight plan!", TextPart: "Dear passenger 1, welcome to Mailjet! May the delivery force be with you!", HTMLPart: "<h3>Dear passenger 1, welcome to <a href=\"https://www.mailjet.com/\">Mailjet</a>!</h3><br />May the delivery force be with you!" } ] }) request .then((result) => { console.log(result.body) }) .catch((err) => { console.log(err.statusCode) })
要实例化库,您可以使用以下构造函数:
const mailjet = new Mailjet({ apiKey: process.env.MJ_APIKEY_PUBLIC, apiSecret: process.env.MJ_APIKEY_PRIVATE, config: CONFIG, options: OPTIONS }); const request = mailjet .METHOD(RESOURCE, CONFIG) .request(DATA, PARAMS, PERFORM_API_CALL)
METHOD:您想为此调用使用的方法(post、put、get、delete之一)RESOURCE:您想调用的API端点OPTIONS:描述连接选项的关联数组(完整列表请参见下面的选项)CONFIG:描述连接配置的关联数组(完整列表请参见下面的配置)DATA:作为请求主体发送的数据(仅适用于post、put、delete方法)PARAMS:与请求一起发送的URL参数PERFORM_API_CALL:确定是否需要进行本地或实际请求的布尔参数options具有以下结构:
headers - 描述您可以传递给请求的附加头字段的关联数组timeout - 指定请求超时前的毫秒数proxy - 定义要重定向所有请求的代理服务器的主机名、端口和协议(仅Node选项)maxBodyLength - 定义允许的http请求内容的最大大小(以字节为单位)(仅Node选项)maxContentLength - 定义允许的http响应内容的最大大小(以字节为单位)(仅Node选项)您可以在初始化client时传递options,这些options将用于每个request:
const mailjet = new Mailjet({ apiKey: process.env.MJ_APIKEY_PUBLIC, apiSecret: process.env.MJ_APIKEY_PRIVATE, options: { timeout: 1000, maxBodyLength: 1500, maxContentLength: 100, headers: { 'X-API-Key': 'foobar', }, proxy: { protocol: 'http', host: 'www.test-proxy.com', port: 3100, } } });
有关更详细的信息,请访问此文档。
您可以使用timeout参数为请求设置超时。
timeout参数描述请求超时前的毫秒数。
如果请求时间超过timeout,请求将被中止。
const mailjet = new Mailjet({ apiKey: process.env.MJ_APIKEY_PUBLIC, apiSecret: process.env.MJ_APIKEY_PRIVATE, options: { timeout: 100 } }); const request = mailjet .post('send', { version: 'v3.1' })
您可以使用headers参数为请求设置附加头。
const mailjet = new Mailjet({ apiKey: process.env.MJ_APIKEY_PUBLIC, apiSecret: process.env.MJ_APIKEY_PRIVATE, options: { headers: { Accept: 'application/json', 'API-Key': 'foobar', 'Content-Type': 'application/json' } } }); const request = mailjet .post('send', { version: 'v3.1' })
您可以使用maxBodyLength参数设置请求允许的http请求内容的最大大小(以字节为单位)。
const mailjet = new Mailjet({ apiKey: process.env.MJ_APIKEY_PUBLIC, apiSecret: process.env.MJ_APIKEY_PRIVATE, options: { maxBodyLength: 100 } }); const request = mailjet .post('send', { version: 'v3.1' })
注意:
此参数仅在NodeJS端工作
您可以使用maxContentLength参数设置允许的http响应内容的最大大小(以字节为单位)。
const mailjet = new Mailjet({ apiKey: process.env.MJ_APIKEY_PUBLIC, apiSecret: process.env.MJ_APIKEY_PRIVATE, options: { maxContentLength: 50 } }); const request = mailjet .post('send', { version: 'v3.1' })
注意:
此参数仅在NodeJS端工作
proxy参数允许您定义代理服务器的主机名、端口、身份验证和协议,以通过它发送API请求:
const mailjet = new Mailjet({ apiKey: process.env.MJ_APIKEY_PUBLIC, apiSecret: process.env.MJ_APIKEY_PRIVATE, options: { proxy: { protocol: 'https', host: '127.0.0.1', port: 8080, auth: { username: 'test', password: 'password' } } } }); const request = mailjet .post('send', { version: 'v3.1' })
注意:
此参数仅在NodeJS端有效
config 具有以下结构:
host - 设置自定义主机 URLversion - 为特定端点设置所需的 API 版本 (可选 v3、v3.1、v4)output - 指示服务器将响应的数据类型您可以在初始化 client 时传递 config,此 config 将用于每个 request:
const mailjet = new Mailjet({ apiKey: process.env.MJ_APIKEY_PUBLIC, apiSecret: process.env.MJ_APIKEY_PRIVATE, config: { host: 'api.mailjet.com', version: 'v3', output: 'text', } });
也可以为每个 request 手动设置 (此 config 的优先级高于传递给 client 的配置):
const request = mailjet .post('send', { host: 'api.mailjet.com', version: 'v3.1', output: 'json', })
Mailjet API 分为三个不同的版本:
v3 - Email APIv3.1 - Email Send API v3.1,这是我们 Send API 的最新版本v4 - SMS API由于大多数 Email API 端点位于 v3 下,它被设置为默认版本,在发出请求时无需指定。
对于其他版本,您需要使用 version 参数指定版本。
例如,如果使 用 Send API v3.1:
const request = mailjet .post('send', { version: 'v3.1' })
更多信息请参阅我们的 API 参考。
Mailjet API 的默认基本主机名是 api.mailjet.com。
您可以通过在调用中设置 host 的值来修改此主机 URL:
const request = mailjet .post('send', { version: 'v3.1', host: 'api.us.mailjet.com' })
如果您的帐户已移至 Mailjet 的
US架构,您需要设置的host值为api.us.mailjet.com。
Mailjet API 的默认响应输出是 json。
您可以通过在调用中设置 output 的值来修改此响应输出数据:
const request = mailjet .post('send', { version: 'v3.1', output: 'arraybuffer' })
output 参数允许您指定响应数据的类型:
arraybufferdocumentjson (默认)textstreamblob (仅浏览器选项)默认情况下,API 调用参数始终启用。
但是,在测试期间您可能希望禁用它以防止对 Mailjet API 进行不必要的调用。
这可以通过将 performAPICall 参数值设置为 false 传递给 .request(data, params, performAPICall) 方法来实现:
const request = mailjet .post('send', { version: 'v3.1' }) .request({}, {}, false)
当前库基于 TypeScript 并为 Mailjet 类型提供完整覆盖。
所有类型都可以从主入口点 'node-mailjet' 导出:
import { Contact, SendEmailV3, SendEmailV3_1, Message, Segmentation, Template, SendMessage, Webhook } from 'node-mailjet';
该库还有一个通用方法 Request.request<TResult>(data, params, performAPICall),可与这些类型一起使用。
import { Client, SendEmailV3_1, LibraryResponse } from 'node-mailjet'; const mailjet = new Client({ apiKey: process.env.MJ_APIKEY_PUBLIC, apiSecret: process.env.MJ_APIKEY_PRIVATE }); (async () => { const data: SendEmailV3_1.Body = { Messages: [ { From: { Email: 'pilot@test.com', }, To: [ { Email: 'passenger@test.com', }, ], TemplateErrorReporting: { Email: 'reporter@test.com', Name: 'Reporter', }, Subject: 'Your email flight plan!', HTMLPart: '<h3>Dear passenger, welcome to Mailjet!</h3><br />May the delivery force be with you!', TextPart: 'Dear passenger, welcome to Mailjet! May the delivery force be with you!', }, ], }; const result: LibraryResponse<SendEmailV3_1.Response> = await mailjet .post('send', { version: 'v3.1' }) .request(data); const { Status } = result.body.Messages[0]; })();
response 将具有以下形状:
{ response: Response; body: { Messages: Array<{ Status: string; Errors: Array<Record<string, string>>; CustomID: string; ... }>; } }
import * as Mailjet from 'node-mailjet'; // 另一种可能的导入选项 const mailjet = new Mailjet.Client({ apiKey: process.env.MJ_APIKEY_PUBLIC, apiSecret: process.env.MJ_APIKEY_PRIVATE }); (async () => { const body: Mailjet.SendMessage.Body = { From: 'some@email.com', To: 'some2@email.com', Text: 'Test' }; const result: Mailjet.LibraryResponse<Mailjet.SendMessage.Response> = await mailjet .post('contact', { version: 'v3' }) .request(body); const { Status } = result.body; })();
response 将具有以下形状:
{ response: Response; body: { From: string; To: string; Text: string; MessageID: string | number; SMSCount: number; CreationTS: number; SentTS: number; Cost: { Value: number; Currency: string; }; Status: { Code: number; Name: string; Description: string; }; } }
import { Client, Contact, LibraryResponse } from 'node-mailjet' const mailjet = new Client({ apiKey: process.env.MJ_APIKEY_PUBLIC, apiSecret: process.env.MJ_APIKEY_PRIVATE }); (async () => { const queryData: Contact.GetContactQueryParams = { IsExcludedFromCampaigns: false, Campaign: 2234234, }; const result: LibraryResponse<Contact.GetContactResponse> = await mailjet .get('contact', { version: 'v3' }) .request({}, queryData); const ContactID = result.body.Data[0].ID; })();
response 将具有以下形状:
{ response: Response; body: { Count: number; Total: number; Data: Array<{ ID: number; IsExcludedFromCampaigns: boolean; Name: string; CreatedAt: string; DeliveredCount: number; Email: string; ... }>; } }
对于库的早期版本 (3.*.* 及以下),您可以使用 @types/node-mailjet 依赖项。
这些 类型 已发布在 npm 上并可以使用。
这里 是 npm 页面。
如果有遗漏或您有改进建议,请随时请求更改。
要运行演示,您需要在本地安装并运行 http-proxy。
使用以下命令安装:
npm install -g http-proxy
然后从 mailjet-apiv3-nodejs 目录运行以下命令:
http-server -p 4001 --proxy="https://api.mailjet.com"
演示应该在 http://0.0.0.0:4001/examples/ 上运行。
以下是在不同环境中构建的基本应用列表:
RequireJS 的基本应用,提供可以发出一些请求的页面ExpressJS 的应用,允许检索联系人列表并向某人发送电子邮件ReactJS 的应用,提供可以发出一些请求的页面Firebase 的应用,提供用于发送 hello world 电子邮件 和基于动态查询字符串数据发送 电子邮件 的 Firebase Functions注意: 对于
浏览器端示例,目前由于 CORS 限制,需要代理与 Mailjet API 通信。
POST 请求使用 Mailjet 客户端的 post 方法:
const request = mailjet .post($RESOURCE, $CONFIG) .id($ID) .request($DATA, $PARAMS, $PERFORM_API_CALL)
.request 参数 $DATA 将包含 POST 请求的主体。
如果要对特定对象执行操作并需要识别它,则需要定义 .id。
POST 请求创建一个新的联系人:
const Mailjet = require('node-mailjet') const mailjet = new Mailjet({ apiKey: process.env.MJ_APIKEY_PUBLIC, apiSecret: process.env.MJ_APIKEY_PRIVATE }); const request = mailjet .post('contact') .request({ Email: "passenger@mailjet.com", IsExcludedFromCampaigns: true, Name: "New Contact" }) request .then((result) => { console.log(result.body) }) .catch((err) => { console.log(err.statusCode) })
actions管理联系人对多个列表的订阅状态:
const { Client } = require('node-mailjet') // 另一种使用解构的导入选项 const mailjet = new Client({ apiKey: process.env.MJ_APIKEY_PUBLIC, apiSecret: process.env.MJ_APIKEY_PRIVATE }); const request = mailjet .post('contact') .id($contactID) .action('managecontactslists') .request({ ContactsLists: [ { ListID: $listID, Action: "addnoforce" } ] }) request .then((result) => { console.log(result.body) }) .catch((err) => { console.log(err.statusCode) })
GET 请求使用Mailjet客户端的get方法:
const request = mailjet .get($RESOURCE, $CONFIG) .id($ID) .request($DATA, $PARAMS, $PERFORM_API_CALL)
.request参数$PARAMS将包含应用于请求的任何查询参数。
如果你想检索特定对象,需要定义.id。
检索所有联系人:
const Mailjet = require('node-mailjet') const mailjet = new Mailjet({ apiKey: process.env.MJ_APIKEY_PUBLIC, apiSecret: process.env.MJ_APIKEY_PRIVATE }); const request = mailjet .get('contact') .request() request .then((result) => { console.log(result.body) }) .catch((err) => { console.log(err.statusCode) })
检索所有不在营销排除列表中的联系人:
const Mailjet = require('node-mailjet') const mailjet = new Mailjet({ apiKey: process.env.MJ_APIKEY_PUBLIC, apiSecret: process.env.MJ_APIKEY_PRIVATE }); const request = mailjet .get('contact') .request({}, { IsExcludedFromCampaigns: false }) request .then((result) => { console.log(result.body) }) .catch((err) => { console.log(err.statusCode) })
通过ID检索特定联系人:
const Mailjet = require('node-mailjet') const mailjet = new Mailjet({ apiKey: process.env.MJ_APIKEY_PUBLIC, apiSecret: process.env.MJ_APIKEY_PRIVATE }); const request = mailjet .get('contact') .id($contactID) .request() request .then((result) => { console.log(result.body) }) .catch((err) => { console.log(err.statusCode) })
PUT请求使用Mailjet客户端的put方法:
const request = mailjet .put($RESOURCE, $CONFIG) .id($ID) .request($DATA, $PARAMS, $PERFORM_API_CALL)
你需要定义.id来指定要编辑的对象。
.request参数$DATA将包含PUT请求的主体。
Mailjet API中的PUT请求将作为PATCH请求工作 - 更新只会影响指定的属性。
现有资源的其他属性既不会被修改,也不会被删除。
这也意味着所有非强制属性都可以从你的有效载荷中省略。
更新联系人的联系人属性:
const Mailjet = require('node-mailjet') const mailjet = new Mailjet({ apiKey: process.env.MJ_APIKEY_PUBLIC, apiSecret: process.env.MJ_APIKEY_PRIVATE }); const request = mailjet .put('contactdata') .id($contactID) .request({ Data: [ { first_name: "John", last_name: "Smith" } ] }) request .then((result) => { console.log(result.body) }) .catch((err) => { console.log(err.statusCode) })
DELETE请求使用Mailjet客户端的delete方法:
const request = mailjet .delete($RESOURCE, $CONFIG) .id($ID) .request($DATA, $PARAMS, $PERFORM_API_CALL)
你需要定义.id来指定要删除的对象。
.request参数$DATA应该为空。
成功的DELETE请求响应将不包含响应主体,只有一个204 No Content响应代码。
删除一个电子邮件模板:
const Mailjet = require('node-mailjet') const mailjet = new Mailjet({ apiKey: process.env.MJ_APIKEY_PUBLIC, apiSecret: process.env.MJ_APIKEY_PRIVATE }); const request = mailjet .delete('template') .id($templateID) .request() request .then((result) => { console.log(result.body) }) .catch((err) => { console.log(err.statusCode) })
SMS API端点的认证使用Bearer令牌完成。
Bearer令牌在你的Mailjet账户的SMS部分生成。
const Mailjet = require('node-mailjet'); const mailjet = Mailjet.smsConnect(process.env.MJ_API_TOKEN);
这是一个SMS API请求示例:
const Mailjet = require('node-mailjet'); const mailjet = Mailjet.smsConnect(process.env.MJ_API_TOKEN, { config: { version: 'v4' } }); const request = mailjet .post('sms-send') .request({ Text: "祝你在Mailjet的短信航班愉快!", To: "+33600000000", From: "MJPilot" }) request .then((result) => { console.log(result.body) }) .catch((err) => { console.log(err.statusCode) })
Mailjet喜欢开发者。你可以成为这个项目的一部分! 这个SDK是开源世界的一个很好的介绍,请查看代码!
随时提问,并贡献:
如果你有改进指南的建议,请在我们的官方API文档仓库提交一个问题。
Node.JS >= 4.x使用以下命令初始化包:
npm run init
其中init脚本包含所有基本的初始化步骤:
npm install - 安装所有依赖npm run ts:patch - 为正确构建TypeScript声明文件而修补TS编译器npm run pkg:prepare - 为git hooks安装husky为发布目的构建(包括最小化):
npm run build
为开发目的构建(不包括最小化):
npm run build:dev && npm run build:prepublish
构建以进行监视和热重载:
npm run build:watch
执行所有测试:
npm run test
监视测试:
npm run test:watch
获取测试覆盖率:
npm run cover
要使用npm link在本地测试新功能,请使用npm脚本npm run pkg:link。
这是为了正确导出d.ts文件所需的。
在PR合并之前,检查提交信息是否会正确添加到CHANGELOG.md文件中:
npm run release:dry
这也允许查看包版本是否按照SemVer约定正确增加。
然后运行:
npm run release
**重要:**如果包版本增加不正确,你应该手动使用这些脚本:
npm run release:patchnpm run release:minornpm run release:majorCI过程目前不工作,所以请手动运行
npm run test
在feature分支经过测试并合并到master后进行发布。
首先,检出master并pull最新的提交。
git checkout master git pull
接下来,运行npm run release。
之后,cd ./dist然后运行npm login和npm publish以在npm上发布更改。


AI一键生成PPT,就用博思AIPPT!
博思AIPPT,新一代的AI生成PPT平台,支持智能生成PPT、AI美化PPT、文本&链接生成PPT、导入Word/PDF/Markdown文档生成PPT等,内置海量精美PPT模板,涵盖商务、教育、科技等不同风格,同时针对每个页面提供多种版式,一键自适应切换,完美适配各种办公场景。


AI赋能电商视觉革命,一站式智能商拍平台
潮际好麦深耕服装行业,是国内AI试衣效果最好的软件。使用先进AIGC能力为电商卖家批量提供优质的、低成本的商拍图。合作品牌有Shein、Lazada、安踏、百丽等65个国内外头部品牌,以及国内10万+淘宝、天猫、京东等主流平台的品牌商家,为卖家节省将近85%的出图成本,提升约3倍出图效率,让品牌能够快速上架。


企业专属的AI法律顾问
iTerms是法大大集团旗下法律子品牌,基于最先进的大语言模型(LLM)、专业的法律知识库和强大的智能体架构,帮助企业扫清合规障碍,筑牢风控防线,成为您企业专属的AI法律顾问。


稳定高效的流量提升解决方案,助力品牌曝光
稳定高效的流量提升解决方案,助力品牌曝光


最新版Sora2模型免费使用,一键生成无水印视频
最新版Sora2模型免费使用,一键生成无水印视频


实时语音翻译/同声传译工具
Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。


选题、配图、成文,一站式创作,让内容运营更高效
讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。


AI辅助编程,代码自动修复
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。


最强AI数据分析助手
小浣熊家族Raccoon,您的AI智能助手,致力于通过先进的人工智能技术,为用户提供高效、便捷的智能服务。无论是日常咨询还是专业问题解答,小浣熊都能以快速、准确的响应满足您的需求,让您的生活更加智能便捷。


像人一样思考的AI智能体
imini 是一款超级AI智能体,能根据人类指令,自主思考、自主完成、并且交付结果的AI智能体。
最新AI工具、AI资讯
独家AI资源、AI项目落地

微信扫一扫关注公众号