import { Directus } from '@directus/sdk'; import fs from 'fs' import yaml from 'js-yaml' import nodemailer from 'nodemailer' import crypto from 'crypto' const DIRECTUS_URL = process.env.DIRECTUS_URL const DIRECTUS_TOKEN = process.env.DIRECTUS_TOKEN async function sendMail() { // Envoi de mail const directus = new Directus(DIRECTUS_URL, { auth: { staticToken: DIRECTUS_TOKEN }}); let transporter = nodemailer.createTransport({ host: "mail.mailo.com", port: 465, secure: true, // upgrade later with STARTTLS auth: { user: "simon@weko.io", pass: "JfXO1LLkCaVO1wT", }, }); const name = "A Petit Point" const contact = "Bénédicte JOUHANNAUD-DUBOST" const mail = "simon@lamelio.fr" // send mail with defined transport object let info = await transporter.sendMail({ from: '"Simon CONSTANS" ', // sender address to: '"' + contact + '" <' + mail + '>', // list of receivers subject: "Demande de texte pour le bulletin municipal 2022", // Subject line text: `Bonjour ${contact}, Je vous contact au sujet du bulletin municipal 2022 de Crémeaux. Vous êtes la personne identifié pour remplir la partie de l'association «${name}». Si ce n'est pas le cas pouvez vous transférer le mail à la personne concernée. Nous avons mis en place un système pour que vous puissiez remplir directement en ligne et nous faciliter le travail de mise en page. Vous pouvez vous connecter : - à l'adresse suivante : ${DIRECTUS_URL} - avec l'identifiant : ${mail} - et le mot de passe suivant : blablabla Merci de remplir la partie votre document avant le 1 janvier 2022. Si vous avez un souci envoyez un mail à communication@cremeaux.fr. Cordialement, -- Simon CONSTANS de la commission communication de la municipalité de Crémeaux.` // "Hello world?", // plain text body // html: "Hello world?", // html body }); console.log(info) } class Cremeaux { constructor() { this.directus = new Directus(DIRECTUS_URL, { auth: { staticToken: DIRECTUS_TOKEN }}); this.transporter = nodemailer.createTransport({ host: "mail.mailo.com", port: 465, secure: true, // upgrade later with STARTTLS auth: { user: "simon@weko.io", pass: "JfXO1LLkCaVO1wT", }, }) } async associationCreate(association, user) { const Association = await this.directus.items('Association') return Association.createOne({ denomination: association.denomination, user_created: user.id }) } async userCreate(association) { // const role = '450a67e7-c1ad-46c1-bc38-7b5a82803f72' // const users = yaml.load(fs.readFileSync('./directus-users.yml', 'utf8')); const user = { first_name: association.prenom, last_name: association.nom, email: association.mail, password: association.password, telephone: association.telephone, language: 'fr-FR', role: '82da3185-0bf0-497b-a72f-e0d6fa1645e2' } const Users = await this.directus.items('directus_users') return Users.createOne(user); } async bulletinCreate(association, user) { const Bulletin = await this.directus.items('Bulletin') return Bulletin.createOne({ titre: association.denomination, user_created: user.id }); } async sendMail(compte, bulletin, association) { const name = compte.denomination const contact = `${compte.prenom} ${compte.nom}` const mail = compte.mail const password = compte.password // send mail with defined transport object return await this.transporter.sendMail({ from: '"Simon CONSTANS" ', // sender address to: '"' + contact + '" <' + mail + '>', // list of receivers subject: "Demande de texte pour le bulletin municipal 2022", // Subject line text: `Bonjour ${contact}, Je vous contact au sujet du bulletin municipal 2022 de Crémeaux. Vous êtes la personne identifié pour remplir la partie de l'association « ${name} ». Si ce n'est pas le cas, pouvez vous transférer le mail à la personne concernée. Nous avons mis en place un système pour que vous puissiez remplir directement en ligne et nous faciliter le travail de mise en page, sans avoir à passer par de nombreux mails. Vous pouvez vous connecter : - à l'adresse : ${DIRECTUS_URL} - avec l'identifiant : ${mail} - et le mot de passe : ${password} Une fois connecté, vous pouvez remplir : - les informations spécifiques de l'association ainsi que son bureau : ${DIRECTUS_URL}/admin/content/Association/${association.id} - le texte pour le bulletin : ${DIRECTUS_URL}/admin/content/Bulletin/${bulletin.id} - changer votre mot de passe : ${DIRECTUS_URL}/admin/users/me Merci de remplir les informations avant le 10 janvier 2022. Si vous avez un souci vous pouvez retrouver une fiche explicative à cette adresse https://md.weko.io/contenu_cremeaux_fr ou envoyez un mail à com@cremeaux.fr Cordialement, -- Simon CONSTANS pour la commission communication de la municipalité de Crémeaux.` // "Hello world?", // plain text body // html: "Hello world?", // html body }); } } async function main() { // await associationsCreate() const cremeaux = new Cremeaux() const associations = JSON.parse(fs.readFileSync('./associations.json', 'utf8')) // const associations = await cremeaux.assocationsReadMany() for (const association of associations) { // if (association.prenom == 'Sandra') { console.log(`Traitement de ${association.denomination} :`) let user = { id: '9f4578b3-22b9-4b1d-91ca-eaf4fbc84a1e' } let password = '' if (association.mail) { association.password = crypto.createHash('sha256').update(association.mail, 'utf8').digest('hex').substring(association.mail.lenght, 10) // Création de l'utilisateur user = await cremeaux.userCreate(association) console.log(`- L'utilisateur '${user.email}' a été créé avec le mot de passe '${password}'.`) } // Création du bulletin const bulletin = await cremeaux.bulletinCreate(association, user); console.log(`- Le bulletin de l'association ${bulletin.titre} a été créé.`) // Création d'une association const asso = await cremeaux.associationCreate(association, user); console.log(`- L'association ${asso.denomination} a été créé.`) if (association.mail) { // Envoi d'un mail const mail = await cremeaux.sendMail(association, bulletin, asso) console.log(mail) } // } } } main().catch(console.error);