generated from gitea_admin/default
192 lines
5.2 KiB
JavaScript
192 lines
5.2 KiB
JavaScript
import nodemailer from "nodemailer"
|
|
|
|
let transporter
|
|
|
|
function isSmtpConfigured(config) {
|
|
return Boolean(
|
|
config.smtpHost &&
|
|
config.smtpPort &&
|
|
config.smtpUser &&
|
|
config.smtpPassword &&
|
|
config.smtpFromEmail
|
|
)
|
|
}
|
|
|
|
function getTransporter() {
|
|
if (transporter) {
|
|
return transporter
|
|
}
|
|
|
|
const config = useRuntimeConfig()
|
|
|
|
if (!isSmtpConfigured(config)) {
|
|
return null
|
|
}
|
|
|
|
transporter = nodemailer.createTransport({
|
|
host: config.smtpHost,
|
|
port: Number(config.smtpPort),
|
|
secure: String(config.smtpSecure).toLowerCase() === "true",
|
|
connectionTimeout: 10000,
|
|
greetingTimeout: 10000,
|
|
socketTimeout: 15000,
|
|
auth: {
|
|
user: config.smtpUser,
|
|
pass: config.smtpPassword,
|
|
},
|
|
})
|
|
|
|
return transporter
|
|
}
|
|
|
|
export async function sendParcDemandEmails(payload) {
|
|
const config = useRuntimeConfig()
|
|
const mailer = getTransporter()
|
|
|
|
if (!mailer || !config.parcRequestRecipientEmail) {
|
|
return false
|
|
}
|
|
|
|
const from = config.smtpFromName
|
|
? `"${config.smtpFromName}" <${config.smtpFromEmail}>`
|
|
: config.smtpFromEmail
|
|
|
|
const adminSubject = `WONDIF - Formulaire de demande Parc instrumental - ${payload.name}`
|
|
const adminText = [
|
|
"Une nouvelle demande a été envoyée depuis le formulaire du Parc instrumental.",
|
|
"",
|
|
`Type de demande : ${payload.requestType}`,
|
|
`Nom : ${payload.name}`,
|
|
`Email : ${payload.email}`,
|
|
`Telephone : ${payload.phone}`,
|
|
`Structure : ${payload.organization}`,
|
|
"",
|
|
"Message :",
|
|
payload.message,
|
|
].join("\n")
|
|
|
|
const userSubject = "ONDIF - Confirmation de votre demande - Parc instrumental"
|
|
const userText = [
|
|
`Bonjour ${payload.name},`,
|
|
"",
|
|
"Votre demande a bien été transmise à l'équipe du Parc instrumental.",
|
|
"Nous reviendrons vers vous dans les meilleurs délais.",
|
|
"",
|
|
"Recapitulatif :",
|
|
`Type de demande : ${payload.requestType}`,
|
|
`Structure : ${payload.organization}`,
|
|
`Telephone : ${payload.phone}`,
|
|
"",
|
|
"Votre message :",
|
|
payload.message,
|
|
].join("\n")
|
|
|
|
await Promise.all([
|
|
mailer.sendMail({
|
|
from,
|
|
to: config.parcRequestRecipientEmail,
|
|
replyTo: payload.email,
|
|
subject: adminSubject,
|
|
text: adminText,
|
|
}),
|
|
mailer.sendMail({
|
|
from,
|
|
to: payload.email,
|
|
subject: userSubject,
|
|
text: userText,
|
|
}),
|
|
])
|
|
|
|
return true
|
|
}
|
|
|
|
function formatProjetLyceePriority(priority) {
|
|
if (priority === null || priority === undefined) return "Non renseigné"
|
|
if (priority === 0) return "Non souhaité"
|
|
return `Priorité ${priority}`
|
|
}
|
|
|
|
function getProjetLyceeSummary(payload) {
|
|
const projectWishes = [
|
|
["Concert-rencontre", payload.concertRencontrePriority],
|
|
["Parcours Entrer dans la peau d'un professionnel du spectacle", payload.immersionPriority],
|
|
["Parcours EAC", payload.eacPriority],
|
|
["Concert commente", payload.concertCommentePriority],
|
|
]
|
|
.filter(([, priority]) => priority >= 1 && priority <= 4)
|
|
.map(([label, priority]) => `${label} : ${formatProjetLyceePriority(priority)}`)
|
|
|
|
return [
|
|
`Etablissement scolaire : ${payload.schoolName}`,
|
|
`Departement : ${payload.department}`,
|
|
`Ville : ${payload.city}`,
|
|
`Enseignant coordinateur : ${payload.coordinatorName}`,
|
|
`Email : ${payload.email}`,
|
|
`Telephone : ${payload.phone}`,
|
|
`Discipline enseignee : ${payload.discipline}`,
|
|
`Niveau de classe : ${payload.classLevel}`,
|
|
`Nombre probable d'eleves concernes : ${payload.studentCount}`,
|
|
...(projectWishes.length ? ["", "Souhaits de projet :", ...projectWishes] : []),
|
|
"",
|
|
"Periode souhaitée :",
|
|
payload.projectPeriod,
|
|
].join("\n")
|
|
}
|
|
|
|
export async function sendProjetLyceeEmails(payload) {
|
|
const config = useRuntimeConfig()
|
|
const mailer = getTransporter()
|
|
|
|
if (!mailer) {
|
|
console.warn("Email projet lycée non envoyé: configuration SMTP incomplète.")
|
|
return false
|
|
}
|
|
|
|
if (!config.scolaireRequestRecipientEmail) {
|
|
console.warn("Email projet lycée non envoyé: destinataire scolaire manquant.")
|
|
return false
|
|
}
|
|
|
|
const from = config.smtpFromName
|
|
? `"${config.smtpFromName}" <${config.smtpFromEmail}>`
|
|
: config.smtpFromEmail
|
|
|
|
const summary = getProjetLyceeSummary(payload)
|
|
|
|
const adminSubject = `WONDIF - Candidature projet lycee - ${payload.schoolName}`
|
|
const adminText = [
|
|
"Une nouvelle candidature a été envoyée depuis le formulaire Projet lycée.",
|
|
"",
|
|
summary,
|
|
].join("\n")
|
|
|
|
const userSubject = "ONDIF - Confirmation de votre candidature - Projet lycée"
|
|
const userText = [
|
|
`Bonjour ${payload.coordinatorName},`,
|
|
"",
|
|
"Votre candidature à un projet avec l'Orchestre national d'Île-de-France a bien été transmise.",
|
|
"L'équipe d'action culturelle reviendra vers vous d'ici fin juin 2026 afin de vous informer de la suite donnée à votre candidature.",
|
|
"",
|
|
"Recapitulatif :",
|
|
summary,
|
|
].join("\n")
|
|
|
|
await Promise.all([
|
|
mailer.sendMail({
|
|
from,
|
|
to: config.scolaireRequestRecipientEmail,
|
|
replyTo: payload.email,
|
|
subject: adminSubject,
|
|
text: adminText,
|
|
}),
|
|
mailer.sendMail({
|
|
from,
|
|
to: payload.email,
|
|
subject: userSubject,
|
|
text: userText,
|
|
}),
|
|
])
|
|
|
|
return true
|
|
}
|