部署Firebase Functions时使用MailerSend报错:MailerSend不是构造函数
问题解决方案
核心原因
你安装的是MailerSend SDK v2.2.0,但你明确需要使用兼容CommonJS的v1版本。v2版本采用ES模块导出结构,和v1的CommonJS导出完全不同,直接导致TypeError: MailerSend is not a constructor错误。
步骤1:安装正确的SDK版本
卸载当前的v2包,安装v1版本:
npm uninstall mailersend npm install mailersend@1
步骤2:修正代码导入与使用
按照v1 SDK的规范调整index.js,以下是完整的可运行示例(包含云函数封装):
const functions = require('firebase-functions') const admin = require('firebase-admin') admin.initializeApp() // 正确导入v1版本的MailerSend类及工具类 const MailerSend = require("mailersend").MailerSend; const Recipient = require("mailersend").Recipient; const EmailParams = require("mailersend").EmailParams; // 推荐使用Firebase环境变量配置API密钥,替代dotenv(部署后dotenv不生效) const MAILERSEND_API_KEY = functions.config().mailersend.api_key; const mailersend = new MailerSend({ api_key: MAILERSEND_API_KEY, }) // 封装为HTTP触发的云函数 exports.sendEmail = functions.https.onRequest(async (req, res) => { const recipients = [ new Recipient("client@example.com", "Your Client") ]; const emailParams = new EmailParams() .setFrom("your@domain.com") .setFromName("Your Name") .setRecipients(recipients) .setReplyTo("reply@domain.com") .setReplyToName("Support Team") .setSubject("Test Email from Firebase Functions") .setHtml("<h1>Hello from MailerSend v1!</h1>") .setText("Hello from MailerSend v1!"); try { await mailersend.send(emailParams); res.status(200).send("Email sent successfully"); } catch (error) { console.error("MailerSend error:", error); res.status(500).send("Failed to send email"); } })
步骤3:配置Firebase环境变量(替代dotenv)
本地开发和部署时,用Firebase官方的环境变量管理替代dotenv,避免部署后变量失效:
# 设置API密钥到Firebase配置 firebase functions:config:set mailersend.api_key="your-mailersend-api-key" # 本地开发时加载配置 firebase functions:config:get > .runtimeconfig.json
内容的提问来源于stack exchange,提问作者jonthornham
相关产品推荐
相关产品推荐

