Форма React: как отправить электронное письмо с помощью Nodemailer

Я пытаюсь отправить письмо на свой адрес электронной почты GoDaddy из окна контактов моего веб-сайта, используя NodeMailer. Но при отправке получаю 500 ошибку net::ERR_EMPTY_RESPONSE .

Я также рассмотрел некоторые решения из SO, но, похоже, я пропустил некоторые встречи или около того. Должен ли я изменить свою конфигурацию или что-либо, связанное с получением электронной почты в почтовом ящике godaddy? Любое предложение, что нужно сделать здесь.

//ReactForm

class BookAConsultation extends Component{
    constructor(props){
        super(props);
        this.state={
            name: '',
            phone: '',
            email: '',
            comment: ''
        };
        this.handleOnChange = this.handleOnChange.bind(this);
        this.handleOnSubmit = this.handleOnSubmit.bind(this);
    }

    handleOnChange = (e) => {
        this.setState({ [e.target.name] : e.target.value });
    }

    async handleOnSubmit(e) {
        e.preventDefault();
        const { name,  phone, email, comment } = this.state;
        const bookConsultation = await axios.post('api/consultation',{
            name,
            phone,
            email,
            comment
        })
    }

    render(){
        return(
            <Container>
            <Grid  className="book-a-consultation-header">

                <Cell col={6} >
                    <div className="book-a-consultation">
                        <Form onSubmit ={this.handleOnSubmit}>
                            <FormGroup>
                                <div className="row ">
                                    <Label for="name">Name*</Label>
                                    <Input type="text" name="name" id="name" placeholder="Name"
                                    className="mb-3"
                                    onChange={this.handleOnChange}/>

                                    <Label for="phone">Phone Number*</Label>
                                    <Input type="text" name="phone" id="phone" placeholder="Phone Number"
                                    className="mb-3"
                                    onChange={this.handleOnChange}/>

                                    <Label for="email">Email Id*</Label>
                                    <Input type="email" name="email" id="email" placeholder="Email"
                                    className="mb-3"
                                    onChange={this.handleOnChange}/>

                                    <Label for="comment">Additional Comment</Label>
                                    <textarea type="text" name="comment" id="comment" placeholder="Comment"
                                    className="mb-3"
                                    onChange={this.handleOnChange}/>

                                    <Button
                                        color="dark"
                                        style={{marginTop: '2rem'}}
                                        block
                                    >Book Free Consultation</Button>
                                </div>
                            </FormGroup>
                        </Form>
                    </div>
                </Cell>
            </Grid> 
            </Container>

        )
    }
}

//Сервер.js

app.post('/api/consultation', (req, res) => {
    nodemailer.createTestAccount((err, account) => {
        const htmlEmail = `
            <h3>Contact deatails </h3>
            <ul>

                <li>Name: ${req.body.name} </li>
                <li>Phone: ${req.body.phone} </li>
                <li>Email: ${req.body.email} </li>
            </ul>
            <h3> Message <h3>
            <p>${req.body.content}</p>

        `
        let mailerConfig = {    
            host: "smtpout.secureserver.net",  
            secure: true,
            secureConnection: false, // TLS requires secureConnection to be false
            tls: {
                ciphers:'SSLv3'
            },
            requireTLS:true,
            port: 465,
            debug: true,
            auth: {
                user: "[email protected]",
                pass: "password"
            }
        };
        let transporter = nodemailer.createTransport(mailerConfig);

        let mailOptions = {
            from: '[email protected]',
            to: '[email protected]',
            replyTo: '[email protected]',
            subject: 'Some Subject',
            text: req.body.content,
            html: htmlEmail
        };

        transporter.sendMail(mailOptions, (err, info) => {
            if (error) {
                console.log('error:', err);
            } else {
                console.log('Message sent: %s', info.content);
                console.log('Message URL: %s', nodemailer.getTestMessageUrl);
            }
        });
    })
})

//ошибка

введите здесь описание изображения


person Tammy    schedule 18.06.2020    source источник
comment
С вашего server.js вам нужно отправить ответ   -  person Manos Kounelakis    schedule 18.06.2020
comment
Что-то вроде res.sendStatus(200). Однако фактический ответ зависит от того, был ли ваш почтовый запрос успешным или нет.   -  person Manos Kounelakis    schedule 18.06.2020
comment
@ManosKoonelakis спасибо за ваше время. Но отправил на почту. Здесь что-то не так?   -  person Tammy    schedule 18.06.2020
comment
Электронная почта отправляется. Однако ваш server.js также должен отправить вам ответ, чтобы исходный запрос завершился. Смотрите ответ @forgived   -  person Manos Kounelakis    schedule 18.06.2020
comment
Да, я пробовал с ответом @forgived, но он отвечает так же, как и моя текущая ошибка.   -  person Tammy    schedule 18.06.2020
comment
Кажется, проблема на моей стороне, потому что я не активирую электронную почту на сервере godaddy. Это решено сейчас   -  person Tammy    schedule 18.06.2020


Ответы (1)


Кажется, все правильно, эта ошибка появляется, когда сервер ничего не отвечает, а интерфейсная часть ждет ответа, поэтому в вашем обратном вызове sendMail просто попробуйте использовать:

transporter.sendMail(mailOptions, (err, info) => {
  if (error) {
    // ERROR SERVER RESPONSE
    res.status(500).send({status: 'FAIL', msg: 'Internal error: email not sent'})
    ...
  } else {
    ...
    // SUCCESS SERVER RESPONSE
    res.status(200).json({status: 'OK', msg: 'Email sent'})
    ...
  }
});

Это должно решить проблему.

person forgived    schedule 18.06.2020
comment
Привет, спасибо за ваш ответ, но я все еще получаю ту же ошибку net::ERR_EMPTY_RESPONSE . - person Tammy; 18.06.2020
comment
Кажется, проблема на моей стороне, потому что я не активирую электронную почту на сервере godaddy. Но все же я отмечу этот ответ как принятый. Спасибо - person Tammy; 18.06.2020