я строю контактную форму в следующем js. Он отлично работает, но только на локальном хосте, после того как рабочий клиент отправляет сообщение на сервер, в противном случае сервер не отправляет письмо получателю.
Конечно, я жестко закодировал конечную точку для своего домена в контактной форме
axios({
method: "post",
url: "https://my-domain/api/order",
headers: { "content-type": "application/json",
},
и оставил бы тот же код на стороне сервера
const express = require("express");
const next = require("next");
const fetch = require("node-fetch");
const dev = process.env.NODE_ENV !== "production";
const app = next({ dev });
const bodyParser = require("body-parser");
const handle = app.getRequestHandler();
const server = express();
const cors = require("cors");
const fileUpload = require('express-fileupload');
const smtpTransport = require('nodemailer-smtp-transport');
const path = require('path');
const nodemailer = require('nodemailer');
const inlineBase64 = require('nodemailer-plugin-inline-base64');
const PORT = process.env.PORT || 3000;
server.use(cors({ origin: PORT }));
server.use('/public', express.static(path.join(__dirname, 'public')))
app
.prepare()
.then(() => {
server.listen(PORT || 3000, err => {
if (err) throw err;
console.log(`> Ready on http://localhost:${PORT}`);
});
})
.catch(ex => {
console.error(ex.stack);
process.exit(1);
});
server.use(bodyParser.json({limit: '50mb', extended: true}));
server.use(bodyParser.urlencoded({ limit: '50mb', extended: true}));
server.use(function(request, response, next) {
response.header("Access-Control-Allow-Origin", "*");
response.header(
"Access-Control-Allow-Headers",
"Origin, X-Requested-With, Content-Type, Accept"
);
next();
});
server.post("/api/order", async (request, response) => {
try {
const transporter = await nodemailer.createTransport(smtpTransport({
host: ' smtp.provider.eu',
port: 465,
secure: true,
debug: true,
auth: {
user: 'user',
pass: 'pass'
},
tls: { rejectUnauthorized: false } ,
}));
const mailOptions = {
from: 'userl',
to: `${email}`,
subject: `Order nr: ${OrderId}`,
forceEmbeddedImages: true,
bcc: [],
html: `<body>
</body>`,
attachments: [
]
};
// console.log(request.body)
transporter.use('compile', inlineBase64({cidPrefix: 'somePrefix_'}));
transporter.use('/public', express.static('public'));
transporter.sendMail(mailOptions,
(error, info) => {
if (error) {
console.log("Error while sending email"+" "+error);
} else {
console.log('Email sent: ' + info.response);
}
});
console.log("success");
return response.send("{success}");
} catch (error) {
console.log(error)
}
});
server.get("*", (req, res) => {
return handle(req, res);
});
Я буду очень рад любому совету, как чтобы исправить это.