前端的 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 或 后端服务器 是常见的实现方式。