首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >transporter.sendMail不是一个函数,我将node.js与nodemailer一起使用

transporter.sendMail不是一个函数,我将node.js与nodemailer一起使用
EN

Stack Overflow用户
提问于 2021-09-26 15:32:34
回答 1查看 320关注 0票数 0

这是我的app.js文件这段代码看起来是正确的,但是得到了一个transporter.sendMail is not a function错误。

代码语言:javascript
复制
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发送邮件的项目。

代码语言:javascript
复制
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....');
})
EN

回答 1

Stack Overflow用户

发布于 2021-09-26 17:03:14

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

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

下面我对发送邮件代码的位置做了一个注释。

代码语言:javascript
复制
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
})

这就是最终的结果。

代码语言:javascript
复制
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....');
})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69336390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档