从Firebase webapp发送邮件

Bad*_*sha 2 email firebase nodemailer firebase-hosting

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');
Run Code Online (Sandbox Code Playgroud)

我正在开发一个firebase网络应用程序.我需要通过我的网络应用发送电子邮件.我看了一些教程,发现了一些代码.使用上面的代码,我可以发送电子邮件.它在端口9091中运行.当地址栏有www.mywebsite.com/sendMail时,将发送该消息.但是,当我将此页面托管到Firebase时,要对此代码进行哪些更改,是否必须更改端口号?请帮助我在我的网络应用程序中实现此代码.

Ros*_*des 9

正如我在评论中提到的,问题是:您的Web应用程序是使用NodeJS构建的,并且您尝试在静态主机环境(Firebase Hosting)上托管它.但Firebase还具有云功能 - 一种让您在NodeJS环境中运行功能的服务.因此,您应该将应用程序部署到该服务.

云功能入门非常简单.由于您已经设置了Firebase托管,因此您只需使用以下命令转到该目录并设置云功能:

firebase init functions
Run Code Online (Sandbox Code Playgroud)

将创建一个名为"functions"的新文件夹,index.js文件将自动添加到该文件夹​​中.现在,这是您要编写函数的文件(我们实际上只需要由HTTP触发的 1个函数来发送电子邮件).

因此,为了创建此功能,您将不再需要Express.您可以删除它然后更改您的index.js文件以添加firebase函数,因此它将变为:

//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');
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

现在,当您要发送消息时,可以使用此URL: https://us-central1-<project-id>.cloudfunctions.net/sendMail

替换<project-id>为您的Firebase项目ID.