使用nodemailer发送电子邮件时出现问题

问题描述 投票:0回答:1

当我想通过 React 网站或邮递员发送电子邮件时出现一些错误。在网站上显示无法发布/联系

这是index.js文件:

const express = require('express')
const app = express()

const nodemailer = require('nodemailer')
const cors = require('cors')
const bodyParser = require('body-parser')
const dotenv = require('dotenv')
const port  = process.env.PORT || 5000

const EmailSender = require('./SendEmail.js')

app.use(cors());
app.use(bodyParser.json({limit: "25mb"}));
app.use(bodyParser.urlencoded({limit: "25mb", extended: true}));
 app.use((req, res, next) => {
     res.setHeader("Access-Control-Allow-Origin", "*");
     next();
});

app.get('/', (req, res) => {
    res.send('Nothing important')
})


//send api
app.post('/send', async (req, res) => {
    try {
        const { user_email, messageSubject, message } = req.body
        EmailSender({user_email, messageSubject, message})
        res.json({msg: "Your message has been sent successfully"})
    } catch (error) {
        res.status(404).json({msg: "Error..."})
    }
})

app.listen(port, () => {
    console.log(`Server is now running at http://localhost:${port}`)
})

这是SendEmail.js 文件:

const nodemailer = require('nodemailer')
const dotenv = require("dotenv")

const Email = (options) => {
    let transporter = nodemailer.createTransport({
        service:'gmail', //maybe hotmail instead
        auth: {
            user: process.env.USER, //user or email
            pass: process.env.PASSWORD//password
        },
    })
    transporter.sendMail(options, (err, info) => {
        if(err) {
            console.log(err)
            return err;
        }
    })
}

const EmailSender = ({user_email, messageSubject, message}) => {
    const options = {
        from: user_email,
        to: process.env.USER,
        subject: messageSubject,
        message: message,
    }

    Email(options)
}

这是我的表格:

import React from 'react'
import axios from 'axios'

function ContactUs() {

  const [user_email, setEmail] = React.useState("");
  const [messageSubject, setSubject] = React.useState("");
  const [message, setMessage] = React.useState(""); 

  function sendEmail() {
    if(user_email && messageSubject && message) {
      axios
        .post("http://localhost:5000/send", {
          user_email: user_email,
          subject: messageSubject,
          message: message,
        })
          .then(() => alert("Email has been sent succesfuly"))
          .catch(() => alert("Something went wrong..."))
      return;
    }
  }

  return (
      <p className='title' id='Title' style={{display: show ? 'block' : 'none'}}>Contact Us</p>
        <form method='post'>
            <input type={'email'} id='emailInput' onChange={(e) => setEmail(e.target.value)} name='email' placeholder='email' required/>
            <input type={'text'} id='subject' onChange={(e) => setSubject(e.target.value)} name='subject' placeholder='subject' required/>
            <textarea type={'text'} id='message' onChange={(e) => setMessage(e.target.value)} name='message' placeholder='write a message...' required/>
            <button className='submit' type='submit' onClick={() => sendEmail()}>Submit</button>
        </form>
    </div>
  )
}

我尝试改变一些变量。我也在互联网上搜索过,但没有任何帮助。

我尝试做

error.reason
,但它显示“未定义”。

node.js reactjs express axios nodemailer
1个回答
0
投票

问题是我需要生成一个特殊的密码才能与 gmail 一起使用,因为 gmail 增强了安全性,可以降低未经授权的人入侵您的 gmail 的风险。您可以在帐户管理器中生成此密码。

© www.soinside.com 2019 - 2024. All rights reserved.