问题描述
我正在尝试使用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);
});