import express from 'express'; import nodemailer from 'nodemailer'; import cors from 'cors'; const app = express(); const PORT = process.env.PORT || 3001; // Middleware app.use(cors()); app.use(express.json()); // SMTP Configuration const smtpConfig = { host: 'smtp-relay.brevo.com', port: 587, secure: false, // TLS auth: { user: '9e8314001@smtp-brevo.com', pass: 'xsmtpsib-d4a7d55a9c3d79a2b4d8f5c17b0ac5e47530f0615e7e9945e9fdf97b90487c32-LXW7Hihe7Qb5J2tM' } }; // Create transporter const transporter = nodemailer.createTransport(smtpConfig); // Welcome email template const createWelcomeEmail = (customerEmail) => { return { from: '"CCDW" ', to: customerEmail, subject: '👋 欢迎来到 CCDW!我们很高兴认识您', html: ` 欢迎来到 CCDW

✨ CCDW

AI智能解决方案

您好!欢迎认识我们 👋

非常高兴收到您的来信!感谢您对 CCDW 的关注。

我们是一家专注于 AI 智能化解决方案的公司,致力于帮助企业和个人提升工作效率,释放创造力。

🤔 请问您想了解什么呢?

无论是 AI 咨询、智能化转型、还是定制化开发需求,我们都很乐意与您交流探讨!

您可以直接回复此邮件,或通过以下方式联系我们:

📞 联系方式

邮箱: bob@ccdw.xyz
电话: 186 0210 9196
联系人: Bob

期待与您的交流! 🚀

Bob
CCDW 团队

© 2026 CCDW - 释放AI的力量,创造无限可能

`, text: ` 您好!欢迎认识我们 👋 非常高兴收到您的来信!感谢您对 CCDW 的关注。 我们是一家专注于 AI 智能化解决方案的公司,致力于帮助企业和个人提升工作效率,释放创造力。 🤔 请问您想了解什么呢? 无论是 AI 咨询、智能化转型、还是定制化开发需求,我们都很乐意与您交流探讨! 您可以直接回复此邮件,或通过以下方式联系我们: 📞 联系方式 邮箱:bob@ccdw.xyz 电话:186 0210 9196 联系人:Bob 期待与您的交流! 🚀 Bob CCDW 团队 © 2026 CCDW - 释放AI的力量,创造无限可能 ` }; }; // Send welcome email endpoint app.post('/api/send-welcome-email', async (req, res) => { try { const { email } = req.body; if (!email) { return res.status(400).json({ success: false, message: '请提供邮箱地址' }); } // Validate email format const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; if (!emailRegex.test(email)) { return res.status(400).json({ success: false, message: '邮箱格式不正确' }); } const mailOptions = createWelcomeEmail(email); await transporter.sendMail(mailOptions); console.log(`✅ Welcome email sent to: ${email}`); res.json({ success: true, message: '欢迎邮件已发送!请查收您的邮箱。' }); } catch (error) { console.error('❌ Email sending failed:', error); res.status(500).json({ success: false, message: '邮件发送失败,请稍后重试。', error: error.message }); } }); // Health check app.get('/api/health', (req, res) => { res.json({ status: 'ok', timestamp: new Date().toISOString() }); }); // Serve static files in production // 假设部署结构: // /root // /dist (前端构建产物) // /server (后端代码) import path from 'path'; import { fileURLToPath } from 'url'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); // 任何非 /api 开头的请求,都尝试服务静态文件 // 注意:这应该放在 API 路由定义之后 app.use(express.static(path.join(__dirname, '../dist'))); // SPA Fallback: 所有未匹配的 GET 请求都返回 index.html app.get('*', (req, res) => { if (req.path.startsWith('/api')) { return res.status(404).json({ success: false, message: 'API endpoint not found' }); } res.sendFile(path.join(__dirname, '../dist/index.html')); }); // Start server app.listen(PORT, '0.0.0.0', () => { console.log(`🚀 Email server running on port ${PORT}`); });