Node.js 使用Firebase功能和Amazon SES发送电子邮件

Node.js 使用Firebase功能和Amazon SES发送电子邮件,node.js,google-cloud-functions,amazon-ses,massmail,Node.js,Google Cloud Functions,Amazon Ses,Massmail,我只想通过Firebase功能和AWS简单电子邮件服务(SES)从验证域和验证电子邮件地址(仍在沙箱中)发送一封电子邮件来测试连接。因此,我安装了node ses并创建了以下代码。我对webapp和nodejs使用vuejs // The Cloud Functions for Firebase SDK to create Cloud Functions and setup triggers. const functions = require('firebase-functions'); /

我只想通过Firebase功能和AWS简单电子邮件服务(SES)从验证域和验证电子邮件地址(仍在沙箱中)发送一封电子邮件来测试连接。因此,我安装了node ses并创建了以下代码。我对webapp和nodejs使用vuejs

// The Cloud Functions for Firebase SDK to create Cloud Functions and setup triggers.
const functions = require('firebase-functions');

// The Firebase Admin SDK to access Firestore.
const admin = require('firebase-admin');
admin.initializeApp();

// AWS Credentials
var ses = require('node-ses'), 
    client = ses.createClient({
        key: '...', 
        secret: '...',
        amazon: 'https://email-smtp.eu-west-3.amazonaws.com'
});

exports.scheduledFunction = functions.pubsub.schedule('every 10 minutes').onRun((context) => {

// Give SES the details and let it construct the message for you.
client.sendEmail({
    to: 'support@myVerfiedDomain.com'
  , from: 'do_not_reply@myVerfiedDomain.com'
  //, cc: 'theWickedWitch@nerds.net'
  //, bcc: ['canAlsoBe@nArray.com', 'forrealz@.org']
  , subject: 'Test'
  , message: 'Test Message'
  , altText: 'Whatever'
 }, function (err, data, res) {
  console.log(err)
  console.log(data)
  console.log(res)
 })
})
问题是,我甚至无法部署此函数:每次收到相同的错误消息时:

...
+  functions: created scheduler job firebase-schedule-scheduledFunction-us-central1
+  functions[scheduledFunction(us-central1)]: Successful upsert schedule operation. 

Functions deploy had errors with the following functions:
        scheduledFunction(us-central1)

To try redeploying those functions, run:
    firebase deploy --only "functions:scheduledFunction"

To continue deploying other features (such as database), run:
    firebase deploy --except functions

Error: Functions did not deploy properly.
但如果我部署一个简单的Firebase函数,它就可以工作了。所以这与我的设置无关

有人知道我做错了什么吗

谢谢!!
克里斯

我找到了解决办法。我仍然不知道它如何与
节点ses
配合使用,但我知道它如何与
节点邮箱
配合使用

  • 安装nodemailer(
    npm i nodemailer
  • 安装NodeEmailr ses传输
  • 将区域更改为适合您的设置的区域
  • 在Firebase函数的
    index.js
    中输入以下内容(放入AWS凭据)
  • ---下面是源代码---

    //Firebase SDK的云函数用于创建云函数和设置触发器。
    const functions=require('firebase-functions');
    //访问Firestore的Firebase管理SDK。
    const admin=require('firebase-admin');
    admin.initializeApp();
    //点头者
    var nodeEmailer=require('nodeEmailer');
    var ses=require('nodemailer-ses-transport');
    //创建传送机
    var transporter=nodeEmailer.createTransport(ses({
    accessKeyId:“…”,
    secretAccessKey:“…”,
    地区:“欧盟-西-3”
    }));
    exports.sendmail=functions.pubsub.schedule(“每1分钟”).onRun((上下文)=>{
    发送邮件({
    发件人:'sender@yourVerifiedDomain.com',
    致:'receiver@yourVerifiedDomain.com',
    主题:“电子邮件测试”,
    html:“标题”,
    /*
    附件:[
    {
    文件名:“报告”,
    路径:“C:\\xampp\\htdocs\\js\\report.xlsx”,
    contentType:“应用程序/vnd.ms excel”
    }
    ]
    */
    },
    功能(错误、数据){
    如果(错误)抛出错误;
    console.log('Email sent:');
    控制台日志(数据);
    }); 
    });
    
    我找到了一个解决方案。我仍然不知道它如何与
    节点ses
    配合使用,但我知道它如何与
    节点邮箱
    配合使用

  • 安装nodemailer(
    npm i nodemailer
  • 安装NodeEmailr ses传输
  • 将区域更改为适合您的设置的区域
  • 在Firebase函数的
    index.js
    中输入以下内容(放入AWS凭据)
  • ---下面是源代码---

    //Firebase SDK的云函数用于创建云函数和设置触发器。
    const functions=require('firebase-functions');
    //访问Firestore的Firebase管理SDK。
    const admin=require('firebase-admin');
    admin.initializeApp();
    //点头者
    var nodeEmailer=require('nodeEmailer');
    var ses=require('nodemailer-ses-transport');
    //创建传送机
    var transporter=nodeEmailer.createTransport(ses({
    accessKeyId:“…”,
    secretAccessKey:“…”,
    地区:“欧盟-西-3”
    }));
    exports.sendmail=functions.pubsub.schedule(“每1分钟”).onRun((上下文)=>{
    发送邮件({
    发件人:'sender@yourVerifiedDomain.com',
    致:'receiver@yourVerifiedDomain.com',
    主题:“电子邮件测试”,
    html:“标题”,
    /*
    附件:[
    {
    文件名:“报告”,
    路径:“C:\\xampp\\htdocs\\js\\report.xlsx”,
    contentType:“应用程序/vnd.ms excel”
    }
    ]
    */
    },
    功能(错误、数据){
    如果(错误)抛出错误;
    console.log('Email sent:');
    控制台日志(数据);
    }); 
    });
    
    // The Cloud Functions for Firebase SDK to create Cloud Functions and setup triggers. 
    const functions = require('firebase-functions');
    
    // The Firebase Admin SDK to access Firestore. 
    const admin = require('firebase-admin');
    admin.initializeApp();
    
    // Nodemailer 
    var nodemailer = require('nodemailer');
    var ses = require('nodemailer-ses-transport');
        
    // Create transporter
    var transporter = nodemailer.createTransport(ses({
        accessKeyId: '...',
        secretAccessKey: '...',
        region: 'eu-west-3'
    }));
    
    exports.sendEmail = functions.pubsub.schedule('every 1 minutes').onRun((context) => {
        transporter.sendMail({
            from: 'sender@yourVerifiedDomain.com',
            to: 'receiver@yourVerifiedDomain.com',
            subject: 'Email Testing',
            html: '<h1>Title</h1>',
                /*
                attachments: [
                    {
                    filename: 'report',
                    path: 'C:\\xampp\\htdocs\\js\\report.xlsx',
                    contentType: 'application/vnd.ms-excel'
                    }
                ]
                */
        },
        function(err, data) {
            if (err) throw err;
            console.log('Email sent:');
            console.log(data);
        }); 
    });