Электронная почта через Google Cloud Functions вызывает ошибочный синтаксис - PullRequest
0 голосов
/ 12 января 2019

Я пытался использовать облачную функцию Google для отправки электронного письма после следующих примеров: https://github.com/firebase/functions-samples/tree/master/quickstarts/email-users и https://angularfirebase.com/lessons/sendgrid-v3-nodejs-transactional-email-cloud-function/ Затем мне пришлось внести некоторые коррективы в соответствии с развивающимися технологиями, и мой результат таков:

const functions = require('firebase-functions');
const cors = require('cors')({ origin: true });
const sendGrid = require('@sendgrid/mail');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
const db = admin.firestore();
const SENDGRID_API_KEY="***";
sgMail.setApiKey(SENDGRID_API_KEY);
sendGrid.setApiKey(functions.config().sendgrid.apikey);
sendGrid.setSubstitutionWrappers('{{', '}}');
exports.httpEmail = functions.https.onRequest((req, res) => {
cors( req, res, () => { 

const name  = req.body.toName;
const email = req.body.Email;
const id = req.body.ID;

const msg = {
    to: email,
    from: mail@homepage.com',
    subject: id,
    text: `Hello {{name}}`,
    html: `<h1>Hello {{name}}</h1>`
};

return sgMail.send(msg)

    .then(() => res.status(200).send('email sent!') )
    .catch(err => res.status(400).send(err) )

});});

Теперь это дает мне синтаксическую ошибку

/ user_code / index.js: от 20 до: {{email}}, ^ SyntaxError: неожиданный токен

{
  "name": "email",
  "description": "sending emails",
  "version": "0.0.1",
    "dependencies": {
    "sendgrid/mail": "^6.3.1",
    "cors": "^2.8.1",
    "moment": "^2.17.1",
    "firebase-admin": "~5.11.0",
    "firebase-functions": "^1.0.0"
  },
  "scripts": {
    "lint": "./node_modules/.bin/eslint --max-warnings=0 .",
    "serve": "firebase serve --only functions",
    "shell": "firebase experimental:functions:shell",
    "start": "npm run shell",
    "deploy": "firebase deploy --only functions",
    "logs": "firebase functions:log"
  },
  "private": true
}

И это дает мне ошибку разбора:

Невозможно проанализировать package.json, ошибка в строке 7, столбец 6

Обе ошибки не имеют смысла для меня, и мне пришлось внести 4 различных корректировки, которые заставляют меня сомневаться, что я нахожусь на правильном пути вообще. У кого-нибудь есть рабочий пример или учебник, включающий cors, текст с переменными и sendgrid? Или кто-то может решить сообщение об ошибке для меня?

1 Ответ

0 голосов
/ 22 января 2019
  1. Первая ошибка связана с отсутствием открывающей котировки в mail@homepage'
  2. секунда может быть до отсутствия '@' перед sendgrid/mail или без отступа при "dependencies"

Хотя sendgrid является хорошим вариантом, вы также можете посмотреть на nodemailer. Для этого не требуется ключ API. Оба метода работают одинаково, как показано в примере ниже.

app.yaml

runtime: nodejs8

package.json

{
  "dependencies": {
    "nodemailer": "^4.0.1",
    "@sendgrid/mail": "^6.3.1"
  }
}

app.js

const nodemailer = require('nodemailer');
const sendgridmail = require('@sendgrid/mail');

exports.sendEmail = (req, res) => {

  // destination email passed as argument
  var email = req.query.message;

  // sender email config (mailserver)
  var gmailEmail = process.env.EMAIL;
  var gmailPassword = process.env.PASSWORD;


  // Nodemailer config
  var mailTransport = nodemailer.createTransport({
    service: 'Gmail',
    auth: {
      user: gmailEmail,
      pass: gmailPassword
    }
  });

  var msg = {
    from: gmailEmail,
    to: email,
    subject: 'Nodemailer',
    text: 'Sent with Nodemailer'
  };

  mailTransport.sendMail(msg);

  // Sendgrid config
  sendgridmail.setApiKey(process.env.GRIDKEY);

  var msg = {
    from: gmailEmail,
    to: email,
    subject: 'Sendgrid',
    text: 'Sent with Sendgrid/mail'
  };

  sendgridmail.send(msg);

  return `Sent two emails with Sendgrid and Nodemailer`;
};

Примечание: , поскольку я использую Gmail в качестве почтового сервера, для возможности отправки с него электронной почты потребовались два дополнительных шага:

  1. Разрешить менее безопасные приложения
  2. Разрешить доступ к вашей учетной записи Google
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...