API Microsoft

This commit is contained in:
2026-06-16 10:33:35 +02:00
parent fb05201fd7
commit 663c57306d
12 changed files with 821 additions and 40 deletions

View File

@@ -1,42 +1,62 @@
import nodemailer from "nodemailer"
let transporter
const transporters = {}
function isSmtpConfigured(config) {
return Boolean(
config.smtpHost &&
config.smtpPort &&
config.smtpUser &&
config.smtpPassword &&
config.smtpFromEmail
config.host &&
config.port &&
config.user &&
config.password &&
config.fromEmail
)
}
function getTransporter() {
if (transporter) {
return transporter
function getSmtpConfig(config, suffix) {
const key = suffix.charAt(0).toUpperCase() + suffix.slice(1)
return {
host: config[`smtpHost${key}`],
port: config[`smtpPort${key}`],
secure: config[`smtpSecure${key}`],
user: config[`smtpUser${key}`],
password: config[`smtpPassword${key}`],
fromEmail: config[`smtpFromEmail${key}`],
fromName: config[`smtpFromName${key}`],
}
}
function getFrom(config) {
return config.fromName
? `"${config.fromName}" <${config.fromEmail}>`
: config.fromEmail
}
function getTransporter(suffix) {
if (transporters[suffix]) {
return transporters[suffix]
}
const config = useRuntimeConfig()
const config = getSmtpConfig(useRuntimeConfig(), suffix)
if (!isSmtpConfigured(config)) {
return null
}
transporter = nodemailer.createTransport({
host: config.smtpHost,
port: Number(config.smtpPort),
secure: String(config.smtpSecure).toLowerCase() === "true",
transporters[suffix] = nodemailer.createTransport({
host: config.host,
port: Number(config.port),
secure: String(config.secure).toLowerCase() === "true",
connectionTimeout: 10000,
greetingTimeout: 10000,
socketTimeout: 15000,
auth: {
user: config.smtpUser,
pass: config.smtpPassword,
user: config.user,
pass: config.password,
},
})
return transporter
return transporters[suffix]
}
function escapeHtml(value) {
@@ -50,15 +70,14 @@ function escapeHtml(value) {
export async function sendParcDemandEmails(payload) {
const config = useRuntimeConfig()
const mailer = getTransporter()
const smtpConfig = getSmtpConfig(config, "parc")
const mailer = getTransporter("parc")
if (!mailer || !config.parcRequestRecipientEmail) {
return false
}
const from = config.smtpFromName
? `"${config.smtpFromName}" <${config.smtpFromEmail}>`
: config.smtpFromEmail
const from = getFrom(smtpConfig)
const adminSubject = `WONDIF - Formulaire de demande Parc instrumental - ${payload.name}`
const adminText = [
@@ -144,7 +163,8 @@ function getProjetLyceeSummary(payload) {
export async function sendProjetLyceeEmails(payload) {
const config = useRuntimeConfig()
const mailer = getTransporter()
const smtpConfig = getSmtpConfig(config, "aec")
const mailer = getTransporter("aec")
if (!mailer) {
console.warn("Email projet lycée non envoyé: configuration SMTP incomplète.")
@@ -156,9 +176,7 @@ export async function sendProjetLyceeEmails(payload) {
return false
}
const from = config.smtpFromName
? `"${config.smtpFromName}" <${config.smtpFromEmail}>`
: config.smtpFromEmail
const from = getFrom(smtpConfig)
const summary = getProjetLyceeSummary(payload)
@@ -262,7 +280,8 @@ function getProjetAcademieSummary(payload) {
export async function sendProjetAcademieEmails(payload) {
const config = useRuntimeConfig()
const mailer = getTransporter()
const smtpConfig = getSmtpConfig(config, "aec")
const mailer = getTransporter("aec")
if (!mailer) {
console.warn("Email projet académie non envoyé: configuration SMTP incomplète.")
@@ -274,9 +293,7 @@ export async function sendProjetAcademieEmails(payload) {
return false
}
const from = config.smtpFromName
? `"${config.smtpFromName}" <${config.smtpFromEmail}>`
: config.smtpFromEmail
const from = getFrom(smtpConfig)
const summary = getProjetAcademieSummary(payload)
const fullName = `${payload.lastName} ${payload.firstName}`