从 Firebase webapp 发送邮件
Sending mail from Firebase webapp
var express = require('express');
var app = express();
var nodemailer=require('nodemailer');
var transporter = nodemailer.createTransport('smtps://username@gmail.com:password@smtp.gmail.com');
app.get('/sendMail', function(req,res){
var mailOptions={
to: 'receiver@gmail.com',
subject: 'Test Mail',
html: 'Testing the Mail'
}
transporter.sendMail(mailOptions,function(err,response){
if(err){
res.end('Mail not sent');
}
else{
res.end('Mail sent');
}
});
}).listen(9091);
console.log('This is running');
我正在开发一个 firebase 网络应用程序。我需要通过我的网络应用程序发送电子邮件。我看了一些教程并找到了一些代码。使用上面的代码,我可以发送电子邮件。它在端口 9091 中运行。当地址栏有www.mywebsite.com/sendMail时发送消息。但是当我将这个页面托管到Firebase时,这段代码需要做哪些更改,是否必须更改端口号?。请帮助在我的网络应用程序中实施此代码。
2019 年更新: 或者,您可以使用新的 Trigger Email Firebase Extension(目前处于测试阶段)。
正如我在评论中提到的,问题是:您的 Web 应用程序是使用 NodeJS 构建的,您正试图将其托管在静态主机环境中(Firebase Hosting). But Firebase also has Cloud Functions - 一项让您 运行 在 NodeJS 环境中运行。因此您应该将应用程序部署到该服务。
Get Started with Cloud Functions真的很容易。由于您已经设置了 Firebase 托管,您只需转到该目录并使用以下命令设置 Cloud Functions:
firebase init functions
将创建一个名为 "functions" 的新文件夹,并且 index.js
文件将自动添加到该文件夹。现在这是您要编写函数的文件(我们实际上只需要 1 个函数 triggered by HTTP 来发送电子邮件)。
因此,为了创建此功能,您将不再需要 Express。你可以删除它,然后稍微更改你的 index.js 文件以添加 firebase-functions,这样它就会变成:
//var express = require('express'); No longer needed
//var app = express(); No longer needed
var nodemailer=require('nodemailer');
const functions = require('firebase-functions');
var transporter = nodemailer.createTransport('smtps://username@gmail.com:password@smtp.gmail.com');
exports.sendMail = functions.https.onRequest((req, res) =>{
var mailOptions={
to: 'receiver@gmail.com',
subject: 'Test Mail',
html: 'Testing the Mail'
}
transporter.sendMail(mailOptions,function(err,response){
if(err){
res.end('Mail not sent');
}
else{
res.end('Mail sent');
}
});
});
现在当你想发送消息时,你可以使用这个url:https://us-central1-<project-id>.cloudfunctions.net/sendMail
将 <project-id>
替换为您的 Firebase 项目 ID。
var express = require('express');
var app = express();
var nodemailer=require('nodemailer');
var transporter = nodemailer.createTransport('smtps://username@gmail.com:password@smtp.gmail.com');
app.get('/sendMail', function(req,res){
var mailOptions={
to: 'receiver@gmail.com',
subject: 'Test Mail',
html: 'Testing the Mail'
}
transporter.sendMail(mailOptions,function(err,response){
if(err){
res.end('Mail not sent');
}
else{
res.end('Mail sent');
}
});
}).listen(9091);
console.log('This is running');
我正在开发一个 firebase 网络应用程序。我需要通过我的网络应用程序发送电子邮件。我看了一些教程并找到了一些代码。使用上面的代码,我可以发送电子邮件。它在端口 9091 中运行。当地址栏有www.mywebsite.com/sendMail时发送消息。但是当我将这个页面托管到Firebase时,这段代码需要做哪些更改,是否必须更改端口号?。请帮助在我的网络应用程序中实施此代码。
2019 年更新: 或者,您可以使用新的 Trigger Email Firebase Extension(目前处于测试阶段)。
正如我在评论中提到的,问题是:您的 Web 应用程序是使用 NodeJS 构建的,您正试图将其托管在静态主机环境中(Firebase Hosting). But Firebase also has Cloud Functions - 一项让您 运行 在 NodeJS 环境中运行。因此您应该将应用程序部署到该服务。
Get Started with Cloud Functions真的很容易。由于您已经设置了 Firebase 托管,您只需转到该目录并使用以下命令设置 Cloud Functions:
firebase init functions
将创建一个名为 "functions" 的新文件夹,并且 index.js
文件将自动添加到该文件夹。现在这是您要编写函数的文件(我们实际上只需要 1 个函数 triggered by HTTP 来发送电子邮件)。
因此,为了创建此功能,您将不再需要 Express。你可以删除它,然后稍微更改你的 index.js 文件以添加 firebase-functions,这样它就会变成:
//var express = require('express'); No longer needed
//var app = express(); No longer needed
var nodemailer=require('nodemailer');
const functions = require('firebase-functions');
var transporter = nodemailer.createTransport('smtps://username@gmail.com:password@smtp.gmail.com');
exports.sendMail = functions.https.onRequest((req, res) =>{
var mailOptions={
to: 'receiver@gmail.com',
subject: 'Test Mail',
html: 'Testing the Mail'
}
transporter.sendMail(mailOptions,function(err,response){
if(err){
res.end('Mail not sent');
}
else{
res.end('Mail sent');
}
});
});
现在当你想发送消息时,你可以使用这个url:https://us-central1-<project-id>.cloudfunctions.net/sendMail
将 <project-id>
替换为您的 Firebase 项目 ID。