Cześć,
mam formularz kontaktowy w mojej apce, który działa w wersji developerskiej, natomiast po deployu na heroku i now.sh już nie
Handler ze strony do wysłania na serwer (tutaj jest raqczej dobrze bo wiadomość dochodzi na server, bo dostaje response status 200:
axios({
method: "post",
url: "https://web-to-print-next-js-git-now.melotek.now.sh/api/order",
headers: { "content-type": "application/json",
},
data: {
na serwerze próbowałem wcześniej używać tylko nodemailera z ustawieniami smtp, i wszystko chulało, teraz wspomagam się sendgridem, ale nie pomaga, serwer ogólnie chula bo działa odświerzanie dynamicznych stron, ale meila po deployu jak nie chciał tak dalej nie chce wysłać. Kod trochę długi:
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 sgTransport = require('nodemailer-sendgrid-transport');
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) => {
const options = {
auth: {
api_key: process.env.SENDGRID_API_KEY
}
const mailer = nodemailer.createTransport(sgTransport(options));
mailer.use('compile', inlineBase64({cidPrefix: 'somePrefix_'}));
mailer.use('/public', express.static('public'));
const message = {
to: `${email}`,
from: 'wallgravve88@wp.pl',
subject: `Fototapeta od Fotodream, numer zamówienia: ${OrderId}`,
forceEmbeddedImages: true,
bcc: ['allegro@fotodream.shop', 'allegro@fotodream.pl', 'wallgravve88@wp.pl'],
html: `<body><body>'
mailer.sendMail(message, function(err, res) {
if (err) {
console.log(err)
}
console.log(res);
});
});
server.get("*", (req, res) => {
return handle(req, res);
});
Czy to jest problem z moim kodem, a może darmowe hostingi mają jakieś blokady? Będę wdzięczny z podzielenie się swoimi doświadczeniami. A płacę złotem za rozwiązanie problemu.