由于安全限制,无法使用客户端 JavaScript 直接从 Web 浏览器发送电子邮件。浏览器会阻止不受信任的代码访问电子邮件服务器等敏感资源,以保护用户隐私。要发送电子邮件,您需要一个服务器端组件来安全地处理电子邮件传输。
目录
使用服务器端方法发送电子邮件
解决方案是在客户端使用 JavaScript 向服务器发送请求。然后,服务器使用合适的库处理电子邮件发送。这将敏感信息与客户端分离并增强安全性。
这是一个使用fetch
API 的客户端示例:
async function sendEmail(recipient, subject, body) {
const response = await fetch('/send', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ recipient, subject, body }),
});
if (response.ok) {
console.log('电子邮件发送成功!');
} else {
console.error('电子邮件发送失败:', response.status);
}
}
sendEmail('[email protected]', '测试邮件', '这是一封测试邮件。');
此代码向服务器端点 (/send
) 发送 POST 请求。服务器端代码(例如,使用 Node.js 和 Nodemailer)接收此请求,处理电子邮件详细信息,并使用 SMTP 服务器发送电子邮件。
保护服务器凭据
切勿将您的 SMTP 服务器凭据(主机、用户名、密码)直接嵌入到您的客户端 JavaScript 代码中。这是一个重大的安全风险。服务器应安全地管理这些凭据,通常使用环境变量或公众无法访问的配置文件。
这是一个服务器端代码示例(Node.js 与 Nodemailer 和 dotenv):
require('dotenv').config();
const nodemailer = require('nodemailer');
const transporter = nodemailer.createTransport({
service: process.env.EMAIL_SERVICE,
auth: {
user: process.env.EMAIL_USER,
pass: process.env.EMAIL_PASSWORD,
},
});
// ... (处理 POST 请求并使用 transporter.sendMail()) ...
这会从.env
文件中加载凭据,使它们与您的代码库分开,并且不会纳入版本控制(将.env
添加到您的.gitignore
中)。请记住配置您的电子邮件提供商以允许安全性较低的应用程序或使用应用程序密码。
结论
从 Web 应用程序发送电子邮件需要服务器端组件才能安全地传输电子邮件。客户端 JavaScript 可促进用户交互和与服务器的通信,而服务器则处理该过程的敏感部分。优先考虑将凭据置于客户端代码之外的安全措施对于构建强大且安全的电子邮件发送系统至关重要。