email - 从 Firebase webapp 发送邮件

标签 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');

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

最佳答案

2019 年更新:或者,您可以使用新的 Trigger Email Firebase Extension (目前处于测试阶段)。


正如我在评论中提到的,问题是:您的 Web 应用程序是使用 NodeJS 构建的,并且您正试图将其托管在静态主机环境 ( Firebase Hosting ) 上。但是 Firebase 也有 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。

关于email - 从 Firebase webapp 发送邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47980573/

相关文章:

node.js - 通过 Office365 smtp(MEANjs 脚手架)使用 nodemailer 发送电子邮件时出错

c++ - QT Future Watcher 带邮件客户端

Javamail IMAP 检索特定日期时间内的最新电子邮件

使用参数调用 exe 的 HTML 超链接

javascript - 如何查询Firestore以通过字符串字段获取文档(搜索引擎友好的Slug)

node.js - 已部署 Nodemailer 的 Firebase 功能,但没有日志且无法与数据库正常工作

node.js - ETIMEDOUT 在 Nodejs Openshift 应用程序中使用 nodemailer 连接错误

php - 在php中回显html是否可能会导致html输出错误?

flutter - Flutter 中的 Firebase 后台消息处理程序产生重复的隔离并运行应用程序两次

android - 点击通知未启动应用程序