这是我的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....');
})发布于 2021-09-26 17:03:14
您在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....');
})https://stackoverflow.com/questions/69336390
复制相似问题