Sails.js - 用于欧盟域的 Mailgun API 基础 URL

Sails.js - Mailgun API base URL for EU domains

我目前正在使用 Sails.js v1.1,我面临的问题是我的电子邮件域是欧盟域。目前无法通过 sails-hook-organicsmailgun-js 设置主机参数 (* 'host' - the mailgun host (default: 'api.mailgun.net')),唯一接受的参数是:

    // Initialize the underlying mailgun API wrapper lib.
    var mailgun = Mailgun({
      apiKey: inputs.secret,
      domain: inputs.domain,
    });

现在,我可以 'hot-fix' 在生产中使用它,但应该有一个更好的更永久的解决方案,它不包括放弃 'sails-hook-organics',至少是 mailgun 集成。任何建议表示赞赏。

通过设置它对我有效:

mailgun 域:'mg.your_domain.eu',

mailgunSecret: ‘secret_key,

in config/custom.js 并使用这些变量,sails.config.custom,mailgunSecret 和 sails.config.custom.mailgunDomain in api/hooks/custom/index.js, api/helpers/send-template-email.js 等.

终于找到了解决这个问题的方法。它是 sails-hook-organics 问题和 mailgun-js (npm module) 问题的组合。我的问题是 mailgun 域在欧盟区,所以当我使用默认的 sailsjs 配置变量 (mailgunDomain, mailgunSecret) 发送电子邮件时,我收到 'Forbidden' 响应。

这是由于 host 参数 mailgun-js 预期或退回到默认值 api.mailgun.net。对于欧盟区域域,这应该是 api.eu.mailgun.net 并且无法将其包含在当前的 sails 实现和配置选项中。永久解决这个问题的方法是 'patch' mailgun-js 文件 node_modules/mailgun-js/lib/mailgun.js。因为我使用的是 heroku,所以我希望它在每次部署时都保持不变。实现此目的的简单方法是在 package.json 中创建一个 postinstall 脚本,例如 "postinstall": "patch --forward node_modules/mailgun-js/lib/mailgun.js < patches/mailgun.patch && grunt build".

mailgun.patch 文件的内容是通过发出此命令 diff -Naur node_modules/mailgun-js/lib/mailgun.js patches/mailgun.js > patches/mailgun.patch 创建的差异,该命令在两个文件上获得差异,后者是我的 node_modules/mailgun-js/lib/mailgun 的副本。 js 文件,但在第 25 行进行了编辑,内容为:this.host = 'api.eu.mailgun.net'; 这就是全部内容,设置此主机参数以修复 EU 区域禁止响应。

感谢 Mats Byrkjeland 关于修补方法的文章 https://opensource.christmas/2019/4

我认为之前关于差异补丁的回答是过度设计。您可以简单地使用主机参数来设置它。

const mailGunConfig = require("mailgun-js")({
  apiKey: process.env.MAIL_GUN_API_KEY,
  domain: mydomain.org,
  host: "api.eu.mailgun.net"
});