在 TypeScript 中为 Firebase Cloud Function 配置 mailgun

Posted

技术标签:

【中文标题】在 TypeScript 中为 Firebase Cloud Function 配置 mailgun【英文标题】:Configure mailgun in TypeScript for Firebase Cloud Function 【发布时间】:2019-07-11 15:09:59 【问题描述】:

我正在 Firebase 中使用 Cloud Functions 发送一封电子邮件,使用 mailgun 在documentation 之后发送电子邮件。

我正在使用 TypeScript,但我找不到有关如何设置 API KEY、DOMAIN 以及最后如何发送电子邮件的示例。我找到的所有示例都在 javascript 中。

JavaScript 中的示例:

var API_KEY = 'YOUR_API_KEY';
var DOMAIN = 'YOUR_DOMAIN_NAME';
var mailgun = require('mailgun-js')(apiKey: API_KEY, domain: DOMAIN);

const data = 
  from: 'Excited User <me@samples.mailgun.org>',
  to: 'foo@example.com, bar@example.com',
  subject: 'Hello',
  text: 'Testing some Mailgun awesomeness!'
;

mailgun.messages().send(data, (error, body) => 
  console.log(body);
);

TypeScript

const API_KEY = 'YOUR_API_KEY';
const DOMAIN = 'YOUR_DOMAIN_NAME';

import * as mailgun from 'mailgun-js';
// How to set up ?

// How to send the email ?

我曾尝试使用ts-mailgun,这是一个用于发送电子邮件的包装器,但由于部署该功能时出错而无法正常工作。

我的目标是使用 TypeScript 正确配置 mailgun 以向用户发送电子邮件。

【问题讨论】:

您收到了什么错误,您是否已将计划升级到 Flame 或 Blaze...您需要其中一种付费计划才能向非 Google 服务发出 API 请求? 【参考方案1】:

npm i ts-mailgun

然后:


import  NodeMailgun  from 'ts-mailgun';

const mailer = new NodeMailgun();
mailer.apiKey = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'; // Set your API key
mailer.domain = 'mail.my-sample-app.com'; // Set the domain you registered earlier
mailer.fromEmail = 'noreply@my-sample-app.com'; // Set your from email
mailer.fromTitle = 'My Sample App'; // Set the name you would like to send from

mailer.init();

// Send an email to test@example.com
mailer
    .send('test@example.com', 'Hello!', '<h1>hsdf</h1>')
    .then((result) => console.log('Done', result))
    .catch((error) => console.error('Error: ', error));

来自ts-mailgun documentation

【讨论】:

host 如何用 ts-mailgun 改变? ts-mailgun 根本不适用于纱线 github.com/StatelessStudio/ts-mailgun/issues/… @AngelS.Moreno 这个问题已经解决了,它在 yarn 上工作了一段时间【参考方案2】:

这个问题来自一年多以前,但在检查了@types/mailgun-js 页面中链接的 GitHub 页面后:

https://github.com/DefinitelyTyped/DefinitelyTyped/blob/58081d555e64d07049d2da6115e5118240162c73/types/mailgun-js/index.d.ts#L18

您可以看到 ConstructorParams 接口,并查看它被调用的位置。看起来您需要实例化mailgun,如下所示。完成此操作后,这些类型开始为我工作。

import mg from 'mailgun-js';

const api_key = process.env.MG_API_KEY as string;
const DOMAIN = process.env.MG_DOMAIN as string;
const mailgun = new mg(apiKey: api_key, domain: DOMAIN);
const UsersMailList = mailgun.lists(process.env.USERS_LIST as string);

【讨论】:

以上是关于在 TypeScript 中为 Firebase Cloud Function 配置 mailgun的主要内容,如果未能解决你的问题,请参考以下文章

如何在 TypeScript 2 项目中为 Firebase 3 安装类型?

如何在 TypeScript 中为类属性动态分配值

firebase 云功能中带有 typescript 的 firebase-admin

如何在 TypeScript 中为对象动态分配属性?

如何在 TypeScript 中为对象动态分配属性?

为啥这个 NSString 在 FireBase 查询块中为空?