运输车.sendMail不是一个函数,我使用node.js与nodemailer



这是我的app.js文件,这段代码似乎是正确的,但得到transporter.sendMail is not a function错误。

const links = document.querySelectorAll('.link');

links.forEach(link => {
link.addEventListener('click', () =>{
links.forEach(ele => ele.classList.remove('active'));
link.classList.add('active');
})
})
// contact form
const contactBtn = document.querySelector('.contact-btn');
const firstName = document.querySelector('.first-name');
const lastName = document.querySelector('.last-name');
const email = document.querySelector('.email');
const msg = document.querySelector('.message');
contactBtn.addEventListener('click', () => {
if(firstName.value.length && 
lastName.value.length && email.value.length && msg.value.length ){
fetch('/mail', {
method: 'post',
headers: new Headers({'Content-Type': 'application/json'}),
body: JSON.stringify({
firstname: firstName.value,
lastname: lastName.value,
email: email.value,
msg: msg.value,

})
.then(res => res.json())
.then(data => {
alert(data);
})
})
}
})

这是我的server.js文件。这个文件中的错误是什么?我已经尝试了几个小时,但没有得到输出。我是一个初学者,正在尝试使用nodemailer发送邮件。

const express = require('express');
const path = require('path');
const nodemailer = require('nodemailer');
const dotenv = require('dotenv');
var firstname = '#';
firstname.substring(1); 
var lastname = '#';
lastname.substring(1); 
var email = '#';
email.substring(1); 
var msg = '#';
msg.substring(1); 
var transporter = '#';
transporter.substring(1);
dotenv.config();
let initialPath = path.join(__dirname, "public");
let app = express();
app.use(express.static(initialPath));
app.use(express.json());
app.get('/', (req, res) => {
res.sendFile(path.join(initialPath, "index.html"));
})
app.post('/mail', (req, res) => {
const { firstname, lastname, email, msg } = req.body;

let transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: process.env.EMAIL,
pass: process.env.PASSWORD
}
})
})
const mailOptions = {
from: 'yyy@gmail.com',
to: 'xxx@gmail.com',
subject: 'Portfolio',
text: `First name: ${firstname}, nLast name: ${lastname}, 
nEmail: ${email}, nMessage: ${msg}`
}
transporter.sendMail(mailOptions, (err, result) => {
if (err){
console.log(err)
res.json('Oops error occurred')
} else{
res.json('thanks for emailing me');
}
})
app.listen('3000', () => {
console.log('listening....');
})

您正在post回调内部创建传输器,但在回调外部引用它,因此传输器变量引用全局var transporter = '#';而不是实际的电子邮件传输器。

这解释了sendMail函数不存在的原因,因为传输器是字符串而不是对象。

我在下面注释了发送邮件代码的位置。

app.post('/mail', (req, res) => {
const { firstname, lastname, email, msg } = req.body;

let transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: process.env.EMAIL,
pass: process.env.PASSWORD

}
})
// Put the send email config here
})

这就是最终的结果。

app.post('/mail', (req, res) => {
const { firstname, lastname, email, msg } = req.body;

let transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: process.env.EMAIL,
pass: process.env.PASSWORD

}
})
const mailOptions = {
from: 'yyy@gmail.com',
to: 'xxx@gmail.com',
subject: 'Portfolio',
text: `First name: ${firstname}, nLast name: ${lastname}, 
nEmail: ${email}, nMessage: ${msg}`
}

transporter.sendMail(mailOptions, (err, result) => {
if (err){
console.log(err)
res.json('Opps error occured')
} else{
res.json('thanks for e-mailing me');
}
})
})
app.listen('3000', () => {
console.log('listening....');
})

在我的情况下,它发生是因为我犯了一个拼写错误transporter.sendmail而不是transporter.sendMail。希望你明白你的错误

相关内容

最新更新