前端用 JavaScript 能否发邮件?

前端的 JavaScript 本身是不能直接发送邮件的,因为浏览器环境限制了直接访问邮件服务器的权限,以防止滥用。不过,有几种方法可以间接实现通过 JavaScript 发送邮件:

1. 使用第三方邮件服务 API

最常见的做法是通过第三方邮件服务提供的 API 来发送邮件,例如:

EmailJS

这是一个流行的服务,允许你通过 JavaScript 直接从前端发送邮件,无需服务器端支持。你可以注册一个帐户,并获取 API 密钥和模板,然后使用 EmailJS API 发送邮件。


emailjs.send("service_id", "template_id", {
  from_name: "Your Name",
  to_name: "Recipient Name",
  message: "Hello, this is a test email!"
})
.then(function(response) {
  console.log("Success:", response);
}, function(error) {
  console.log("Failed:", error);
});
    

SMTP.js

这个库可以让你在客户端直接使用 SMTP 协议发送电子邮件。它通过 SMTP 协议连接到邮件服务器,要求你提供邮件服务器的认证信息。


Email.send({
  SecureToken: "your_secure_token",
  To: '[email protected]',
  From: "[email protected]",
  Subject: "Test Email",
  Body: "This is a test email"
}).then(function (message) {
  alert(message);
});
    

2. 使用 Web 后端来发送邮件

另一种常见的做法是前端发送请求到你的后端服务器,后端再通过 SMTP 或邮件 API(如 SendGrid、Mailgun、Amazon SES 等)来发送邮件。这样可以避免暴露敏感的邮件服务器信息。

前端代码(发送请求)


fetch("/send-email", {
  method: "POST",
  headers: {
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    to: "[email protected]",
    subject: "Test Email",
    message: "Hello, this is a test email!"
  })
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error("Error:", error));
    

后端代码(Node.js 示例)


const nodemailer = require("nodemailer");

app.post("/send-email", (req, res) => {
  const { to, subject, message } = req.body;
  let transporter = nodemailer.createTransport({
    service: "gmail", // 使用邮件服务
    auth: {
      user: "[email protected]",
      pass: "your_email_password"
    }
  });

  let mailOptions = {
    from: "[email protected]",
    to,
    subject,
    text: message
  };

  transporter.sendMail(mailOptions, (error, info) => {
    if (error) {
      return res.status(500).send(error.toString());
    }
    res.status(200).send("Email sent: " + info.response);
  });
});
    

总结

  • JavaScript 在前端 不能直接发送邮件。
  • 使用 第三方服务 API后端服务器 是常见的实现方式。

发表回复