【发布时间】:2022-01-23 06:36:57
【问题描述】:
我正在使用 React 开发 SPA,我正在使用带有 Express 和 Google API 的 Nodemailer 通过 /contactos 的联系表发送电子邮件。一切正常,但部署过程失败。
我有一个如下所示的netlify.toml 文件:
[build]
functions = "functions"
command = "node functions/mailer.js && npm run build"
一个名为 functions 的文件夹,其中我有一个名为 mailer.js 的文件,并且那里有与 Nodemailer 相关的所有代码:
require('dotenv').config();
const nodemailer = require('nodemailer');
const { google } = require('googleapis');
const express = require('express');
const path = require('path');
const app = express();
const cors = require('cors');
app.use(express.static(path.join(__dirname, 'public')));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cors());
app.post('/enviar', (req, res) => {
console.log(req.body.formData);
const userInfo = req.body.formData;
const EMAIL = process.env.REACT_APP_EMAIL;
const CLIENT_ID = process.env.REACT_APP_CLIENT_ID;
const CLIENT_SECRET = process.env.REACT_APP_CLIENT_SECRET;
const REDIRECT_URI = process.env.REACT_APP_REDIRECT_URI;
const REFRESH_TOKEN = process.env.REACT_APP_REFRESH_TOKEN;
const oAuth2Client = new google.auth.OAuth2(
CLIENT_ID,
CLIENT_SECRET,
REDIRECT_URI
);
oAuth2Client.setCredentials({ refresh_token: REFRESH_TOKEN });
const sendMail = async () => {
try {
const accessToken = await oAuth2Client.getAccessToken();
const transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
type: 'OAuth2',
user: EMAIL,
clientId: CLIENT_ID,
clientSecret: CLIENT_SECRET,
refreshToken: REFRESH_TOKEN,
accessToken: accessToken,
},
});
let mailOptions = {
from: `${userInfo.firstName} ${userInfo.lastName} <${userInfo.email}>`,
to: EMAIL,
subject: `Correo enviado por ${userInfo.firstName} ${userInfo.lastName} desde el sitio web`,
text: `${userInfo.message}`,
html: `
<p>¡Tienes un nuevo correo electrónico enviado desde el sitio web de LynStore!</p>
<h3>Detalles del contacto:</h3>
<ul>
<li>Nombre: ${userInfo.firstName} ${userInfo.lastName}</li>
<li>Correo: ${userInfo.email}</li>
</ul>
<h3>Mensaje:</h3>
<p>${userInfo.message}</p>
`,
};
const result = await transporter.sendMail(mailOptions);
return result;
} catch (err) {
console.log('Error!!!!!!!', err);
}
};
sendMail()
.then((result) => res.json({ status: 'success' }))
.catch((error) => {
res.json({ status: 'fail' });
console.log('Error en el envío!', error.message);
});
});
const PORT = process.env.PORT || 3001;
app.listen(PORT, () => {
console.log(`Server is running on port: ${PORT}`);
});
这些是 Netlify 上部署日志的最后 27 行:
4:09:12 PM: ────────────────────────────────────────────────────────────────
4:09:12 PM: Netlify Build
4:09:12 PM: ────────────────────────────────────────────────────────────────
4:09:12 PM:
4:09:12 PM: ❯ Version
4:09:12 PM: @netlify/build 26.0.2
4:09:12 PM:
4:09:12 PM: ❯ Flags
4:09:12 PM: baseRelDir: true
4:09:12 PM: buildId: 61c2425eebc157000771ab02
4:09:12 PM: deployId: 61c2425eebc157000771ab04
4:09:12 PM:
4:09:12 PM: ❯ Current directory
4:09:12 PM: /opt/build/repo
4:09:12 PM:
4:09:12 PM: ❯ Config file
4:09:12 PM: /opt/build/repo/netlify.toml
4:09:12 PM:
4:09:12 PM: ❯ Context
4:09:12 PM: production
4:09:12 PM:
4:09:12 PM: ────────────────────────────────────────────────────────────────
4:09:12 PM: 1. build.command from netlify.toml
4:09:12 PM: ────────────────────────────────────────────────────────────────
4:09:12 PM:
4:09:12 PM: $ node functions/mailer.js && npm run build
4:09:13 PM: Server is running on port: 3001
4:38:47 PM: Build exceeded maximum allowed runtime
【问题讨论】:
标签: reactjs express nodemailer netlify