Официант с sendEmail (SMTP)Javascript

Форум по Javascript
Ответить
Anonymous
 Официант с sendEmail (SMTP)

Сообщение Anonymous »

Привет всем, у вас есть идея, почему мой официант продолжает игнорировать мою отправку электронной почты после транзакции Sequelize.commit()
Сначала я поместил эту процедуру отправки электронной почты на свой контроллер, но такой идеал устарел, поскольку процедура не так уж сложна...
Во-вторых, я попытался сделать это с помощью try { ... } catch { ... }, но этот тип процесса прост, поэтому я попытался упростить его, и на самом деле это не помогло решить мою проблему...
[EDIT]
Код возвращает 201 ответ, поэтому мне было интересно, почему мою процедуру sendEmail постоянно игнорируют.
Ищу способ...

async createTicket(req) {
return new Promise((resolve, reject) => {
const busboy = Busboy({ headers: req.headers });

const fields = {};
const uploadedFiles = [];

const ticket_id = uuidv4();
fields.id = ticket_id;

busboy.on("field", (key, value) => {
fields[key] = value;
});

busboy.on("file", (fieldname, file, filename, encoding, mimetype) => {
if (!filename) return;

const original = typeof filename === "string" ? filename : filename?.filename;
const blobName = `${Date.now()}-${original}`;
const chunks = [];

file.on("data", (chunk) => chunks.push(chunk));

file.on("end", async () => {
const buffer = Buffer.concat(chunks);
const ext = blobName.split(".").pop().toLowerCase();
const safeMime = mime.lookup(ext) || mimetype || "application/octet-stream";

const uploaded = await FileUploadService.uploadBuffer(blobName, safeMime, buffer);

uploadedFiles.push({
filename: blobName,
file_type: ext,
mime_type: safeMime,
file_url: uploaded.url,
size: buffer.length
});
});
});

busboy.on("finish", async () => {
const transaction = await mdl_Tickets.sequelize.transaction();

try {
const userProfile = await mdl_UserProfile.findOne({
where: { user_id: fields.user_id },
transaction
});

if (!userProfile) {
await transaction.rollback();
return reject({
message: "User profile does not exist. Complete profile first."
});
}

const ticket = await mdl_Tickets.create(fields, { transaction });
for (const fileItem of uploadedFiles) {
await mdl_Files.create(
{
...fileItem,
uploaded_by: fields.user_id,
ticket_id
},
{ transaction }
);
}

await transaction.commit();
try {
const credentials = await mdl_UserCredentials.findOne({
where: { user_id: ticket.user_id },
attributes: ["email"]
});

if (credentials?.email) {
const { html, subject } = await EmailTemplate.as_renderAll("tickets", {
user: credentials,
ticket,
subject: "New ticket issued"
});

await sendEmail({
to: credentials.email,
subject,
html
});

console.log("[TicketService] Email sent to:", credentials.email);
} else {
console.warn("[TicketService] No email found for user:", ticket.user_id);
}

} catch (emailErr) {
console.error("[TicketService] Email error:", emailErr);
}

io.emit("tickets:new", ticket);
resolve({
ticket,
attachments: uploadedFiles.map((f) => f.filename)
});

} catch (err) {
await transaction.rollback();
reject(err);
}
});

req.pipe(busboy);
});
}

[EDIT]
Функция sendEmail взята из моего nodemailer
const sendEmail = async (options) => {
const { to, subject, html } = options;

try {
const result = transporter.sendMail({})
........



Подробнее здесь: https://stackoverflow.com/questions/798 ... email-smtp
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»