Send an Email Using React.js + Express.js

前端 未结 2 834
谎友^
谎友^ 2020-12-23 23:33

I have built a web app using React.js in ES6. I currently want to create a basic \"Contact Us\" page and want to send an email. I am new to React and just discovered that I

相关标签:
2条回答
  • 2020-12-24 00:19

    @ryan-jenkin is completely correct.

    Alternatively, if you don't have / want jQuery as a dependency, you can use the native fetch api. Also, I typically set up my form so each input has a state, then use that state in the stringified blob.

    Client-side (React):

    handleSubmit(e){
      e.preventDefault()
    
      fetch('/contactus', {
        method: 'POST',
        headers: {
          'Accept': 'application/json',
          'Content-Type': 'application/json',
        },
        body: JSON.stringify({
          email: this.state.email,
          // then continue this with the other inputs, such as email body, etc.
        })
      })
      .then((response) => response.json())
      .then((responseJson) => {
        if (responseJson.success) {
          this.setState({formSent: true})
        }
        else this.setState({formSent: false})
      })
      .catch((error) => {
        console.error(error);
      });
    }
    
    render(){
      return (
        <form onSubmit={this.handleSubmit} >
          <input type="text" name="email" value={this.state.email} />
          // continue this with other inputs, like name etc
        </form>
      )
    }
    
    0 讨论(0)
  • 2020-12-24 00:25

    When the button is clicked, execute an ajax POST request to your express server, i.e "/contactus". /contactus can fetch the email, subject, and content out of the post data and send to the mail function.

    In React:

    $.ajax({
        url: '/contactus',
        dataType: 'json',
        cache: false,
        success: function(data) {
            // Success..
        }.bind(this),
        error: function(xhr, status, err) {
            console.error(status, err.toString());
        }.bind(this)
    });
    

    In express add the nodemailer code within an express post handler:

    app.post('/contactus', function (req, res) {
        // node mailer code
    });
    
    0 讨论(0)
提交回复
热议问题