如何使用 ReactJS 和 SendGrid 发送电子邮件?

IT技术 node.js reactjs sendgrid sendgrid-api-v3
2021-05-04 00:37:35

我在 SendGrid 上有设置和帐户。我已经获得了 API 密钥和 Node.js 方法。我正在使用 React js 创建一个 Web 应用程序。我想通过 SendGrid 发送电子邮件。我找不到任何解决方案。请举例说明我的问题。

4个回答
//Form.js
class Form extends React.Component {
  constructor() {
    super();
    this.handleSubmit = this.handleSubmit.bind(this);
  }

  handleSubmit(event) {
    event.preventDefault();
    const data = new FormData(event.target);

    fetch('/api/form-submit-url', {
      method: 'POST',
      body: data,
    });
  }

  render() {
    return (
      <form onSubmit={this.handleSubmit}>
        <label htmlFor="username">Enter username</label>
        <input id="username" name="username" type="text" />

        <label htmlFor="email">Enter your email</label>
        <input id="email" name="email" type="email" />

        <label htmlFor="birthdate">Enter your birth date</label>
        <input id="birthdate" name="birthdate" type="text" />

        <button>Send data!</button>
      </form>
    );
  }
}
//index.js

    const sgMail = require('@sendgrid/mail');
    sgMail.setApiKey(process.env.SENDGRID_API_KEY);
    const msg = {
      to: test@example.com',
      from: 'test@example.com',
      subject: 'Sending with SendGrid is Fun',
      text: 'and easy to do anywhere, even with Node.js',
      html: '<strong>and easy to do anywhere, even with Node.js</strong>',
    };

sgMail.send(msg);

React 是不可能的,因为它是一个前端库,如果你尝试使用 react 来实现,你会得到这些错误

---> 拒绝设置不安全的标头“User-Agent”

如果您需要设置这些标头,那么您需要从您的服务器而不是访问者的浏览器发出请求。

所以这是不可能的,你需要为它使用一些后端或火力。

您可以使用MailJS,并将 sendgrid 用于事务服务。它很容易使用。

有多种解决方案可用。

  1. 您可以使用 nodeMailer :https ://nodemailer.com/about/
  2. 节点邮件程序甚至专门为 Sendgrid 编写了传输:https ://www.npmjs.com/package/nodemailer-sendgrid-transport
  3. 您可以通过 sendgrid 本身使用节点包:https : //github.com/sendgrid/sendgrid-nodejs/tree/main/packages/mail