From eb465a81ffd3a398e7b520e89c7a5a5e77b07b3a Mon Sep 17 00:00:00 2001 From: Tristan Barlet Date: Wed, 14 Dec 2022 11:21:55 +0100 Subject: [PATCH 1/3] mise en place mail pour avertir admin (dans server : npm i nodemailer) --- server-api/api.js | 36 ++++ server-api/package-lock.json | 14 ++ server-api/package.json | 1 + src/App.js | 2 + src/pages/MailPourAdmin.js | 99 +++++++++++ src/pages/Parametres.js | 4 +- src/styles/components/_mailPourAdmin.scss | 201 ++++++++++++++++++++++ src/styles/index.scss | 3 +- 8 files changed, 358 insertions(+), 2 deletions(-) create mode 100644 src/pages/MailPourAdmin.js create mode 100644 src/styles/components/_mailPourAdmin.scss diff --git a/server-api/api.js b/server-api/api.js index b0292a5..a6d8d6a 100644 --- a/server-api/api.js +++ b/server-api/api.js @@ -3,6 +3,19 @@ const express = require('express'); const cors=require("cors"); const bodyparser = require('body-parser'); +const nodemailer = require('nodemailer'); + +// Créer un transporteur de mail +let transporter = nodemailer.createTransport({ + host: 'smtp.gmail.com', + port: 587, +// secure: true, // utiliser SSL + auth: { + user: 'stageodinnonoffi@gmail.com', + pass: 'pjjlofjkpnfpwkiz' + } +}); + const db = mysql.createConnection({ host: 'lfbn-cle-1-568-58.w92-157.abo.wanadoo.fr', user: 'crmuser', @@ -360,4 +373,27 @@ app.get('/Event/:iduser', (req, res) => { console.log(result); res.send(result); }); +}); + +app.post('/Mail/Avertir', (req, res) => { + // Définir les options du mail + let form = req.body; + console.log(form) + let mailOptions = { + from: '"JTT CRM" ', + to: 'Jeremy.DUCOURTHIALE@etu.uca.fr', + subject: form.objet, + text: form.raison + }; + + transporter.sendMail(mailOptions, (error, info) => { + if (error) { + console.log(error); + res.send(false) + } else { + console.log('Email sent: ' + info.response); + res.send(true) + } + }); + }); \ No newline at end of file diff --git a/server-api/package-lock.json b/server-api/package-lock.json index 478c9e4..e202ab0 100644 --- a/server-api/package-lock.json +++ b/server-api/package-lock.json @@ -21,6 +21,7 @@ "fullcalendar": "^5.11.3", "googleapis": "^105.0.0", "mysql": "^2.18.1", + "nodemailer": "^6.8.0", "parser": "^0.1.4" }, "devDependencies": { @@ -2286,6 +2287,14 @@ "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", "peer": true }, + "node_modules/nodemailer": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.8.0.tgz", + "integrity": "sha512-EjYvSmHzekz6VNkNd12aUqAco+bOkRe3Of5jVhltqKhEsjw/y0PYPJfp83+s9Wzh1dspYAkUW/YNQ350NATbSQ==", + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/nodemon": { "version": "2.0.20", "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.20.tgz", @@ -4636,6 +4645,11 @@ "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", "peer": true }, + "nodemailer": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.8.0.tgz", + "integrity": "sha512-EjYvSmHzekz6VNkNd12aUqAco+bOkRe3Of5jVhltqKhEsjw/y0PYPJfp83+s9Wzh1dspYAkUW/YNQ350NATbSQ==" + }, "nodemon": { "version": "2.0.20", "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.20.tgz", diff --git a/server-api/package.json b/server-api/package.json index eb95c4f..94e8247 100644 --- a/server-api/package.json +++ b/server-api/package.json @@ -21,6 +21,7 @@ "fullcalendar": "^5.11.3", "googleapis": "^105.0.0", "mysql": "^2.18.1", + "nodemailer": "^6.8.0", "parser": "^0.1.4" }, "description": "", diff --git a/src/App.js b/src/App.js index d84a7b5..f47d42c 100644 --- a/src/App.js +++ b/src/App.js @@ -13,6 +13,7 @@ import Calendrier from './pages/Calendrier'; import Repertoire from './pages/Repertoire'; import Parametres from './pages/Parametres'; import Chargement from './pages/Chargement'; +import MailPourAdmin from './pages/MailPourAdmin'; import AddContact from './components/Contact/AddContact' import { Component } from 'fullcalendar'; import RestartPassword from './pages/RestartPassword'; @@ -41,6 +42,7 @@ const App = () => { } /> } /> } /> + } /> } /> diff --git a/src/pages/MailPourAdmin.js b/src/pages/MailPourAdmin.js new file mode 100644 index 0000000..c44542e --- /dev/null +++ b/src/pages/MailPourAdmin.js @@ -0,0 +1,99 @@ +import React, {useState} from 'react'; +import NavigationDashboard from '../components/NavigationDashboard'; +import axios from 'axios'; +import Session from 'react-session-api'; +import { useNavigate } from 'react-router-dom'; + +const api = axios.create({ + baseURL: 'http://localhost:8080' + }) + +const MailPourAdmin = () => { + const [mailError, setMailError] = useState(false); + const [objetError, setObjetError] = useState(false); + const [descriptionError, setDescriptionError] = useState(false); + const [theme, setTheme] = useState("light"); + const navigate = useNavigate(); + + if (localStorage.getItem('theme') && localStorage.getItem("theme") !== '' && localStorage.getItem("theme") !== theme) { + setTheme(localStorage.getItem("theme")) + } + + function sendMail(e) { + e.preventDefault(); + + const formData = new FormData(e.currentTarget); + const values = Object.fromEntries(formData.entries()); + + console.log(values); + if (values.objet === '') { + setObjetError(true) + } else { + setObjetError(false) + } + if (values.raison === '') { + setDescriptionError(true) + } else { + setDescriptionError(false) + } + if (values.objet === '' || values.raison === '') { + return + } + values.objet = values.objet + "[user id : " + Session.get("idUser") + "]" + + + api.post('/Mail/Avertir',values).then (function(response) { + if (response.data) { + navigate('/dashboard') + } + else { + setMailError(true) + // e.reset(); + } + }); + + + } + + return ( + + + + +
+
+

Avertir un administrateur

+
+ +
+
+
+ +
+
+
+

Objet

+ +
+
+

Raison

+