使用Nodejs后端发送网格

问题描述

我正在尝试使用SendGrid Mail服务发送邮件,并在Node.js服务器中引发错误400

这是来自sendgrid还是前端?

我也在羽毛笔富文本编辑器中获得了内容,因为我正在使用它

每次我在服务器中收到“ BAD REQUEST”,但其发送方式类似于[object null refence]

Mail.js,我在哪里创建函数

// SendGrid
const sgMail = require('@sendgrid/mail');
sgMail.setApiKey(process.env.SENDGRID_API_KEY);

// cb means callback for error or success
const sendEmail = (email,subject,content,cb) => {
  const msg = {
    from: email,to: 'oabdulazeez70@gmail.com',cc: 'letayokNow@gmail.com',subject: subject,text: content,// html: content,};
  sgMail
    .send(msg)
    .then(() => {
      console.log('Email sent');
      // console.log(cb(null,data));
    })
    .catch((error) => {
      console.error(error);
      // console.log(cb(error,null));
    });
};

module.exports = sendEmail;



index.js //server(backend)

const express = require('express');
const bodyParser = require('body-parser');
const exphbs = require('express-handlebars');
const cors = require('cors');
const path = require('path');
const dotenv = require('dotenv');
const app = express();

dotenv.config({ path: './config/config.env' });

// bring in SendEmail
const sendMail = require('./mail');

// View engine setup
app.engine('handlebars',exphbs({ defaultLayout: false }));
app.set('view engine','handlebars');

// Static folder
app.use('/public',express.static(path.join(__dirname,'public')));

// Body Parser Middleware
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(cors());

app.get('/',(req,res) => {
  res.sendFile(path.join(__dirname,'public','contact.html'));
  // res.sendFile('contact.html',{ root: '.' });
});
//old key
//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
app.post('/send',res) => {
  const { subject,to,email } = sendMail;
  sendMail(email,() => {
    if (err) {
      console.error(err.ResponseError);
      res.status(400).json({ message: 'Internal Error' });
    } else if (res.status(500)) {
      console.log('Error Something happned!');
    } else {
      console.log(data);
      res.json({ message: 'Message Sent' });
    }
  });
  console.log(req.body);
});

// Setting PORT from .env
const PORT = process.env.PORT || 5000;

// console.log(process.env);
app.listen(PORT,() => console.log(`Server Started on ${PORT}`));

app.js(朋友)

const getIds = (id) => {
  return document.getElementById(id);
};

const form = document.querySelector('#form');

form.addEventListener('submit',(e) => {
  e.preventDefault();
  const from = getIds('from').value;
  const subject = getIds('subject').value;
  const emailFormat = quill.root.innerHTML;
  const content = (getIds('content').value = emailFormat);
  const data = {
    from,};

  axios
    .post('/send',data,{
      headers: {
        'Content-Type': 'application/json',},})
    .then((res) => {
      form.reset();
      quill.setContents([{ insert: '\n' }]);
      M.toast({ html: 'Email Sent!!' });
      console.log(res);
    })
    .catch((err) => console.log(err));
});

先谢谢了。我真的很感激。

解决方法

您可以使用@sendgrid/mail NPM模块。

import sgMail from '@sendgrid/mail';
const setApiKey = () => sgMail.setApiKey(process.env.SENDGRID_API_KEY);

export const sendEmail = ({
  emailTo,data,emailFrom
}) => {
  return new Promise(async (resolve,reject) => {
    try {
      setApiKey();
      const msg = {
        to: [emailTo],from: emailFrom,// Use the email address or domain you verified above
        subject: 'Sending with Twilio SendGrid is Fun',html: '<strong>and easy to do anywhere,even with Node.js</strong>',};
      const result = await sgMail.send(msg);
      resolve(result);
    } catch (_e) {
      console.log('Error in sendEmail: ',_e.response.body);
      reject(_e.response.body);
    }
  });
};

针对您的情况,请使用此

    import sgMail from '@sendgrid/mail';
const setApiKey = () => sgMail.setApiKey(process.env.SENDGRID_API_KEY);

export const sendEmail = (email,subject,content) => {
  return new Promise(async (resolve,reject) => {
    try {
      setApiKey();
      const msg = {
        from: email,to: 'oabdulazeez70@gmail.com',cc: 'letayoknow@gmail.com',subject: subject,text: content,_e.response.body);
      reject(_e.response.body);
    }
  });
};


app.post('/send',(req,res) => {
  try {
    const { email,content } = req.body;
    await sendMail(email,content);
    res.json({ message: 'Message Sent' });
  } catch (error) {
    res.status(400).json({ message: 'Something went wrong' });
  }
  console.log(req.body);
});