Eines de l'usuari

Eines del lloc


hestia:correu

Diferències

Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.

Enllaç a la visualització de la comparació

Ambdós costats versió prèviaRevisió prèvia
Següent revisió
Revisió prèvia
hestia:correu [2024/12/19 08:02] – [Enviant correu des de PHP] ebotahestia:correu [2025/01/09 18:45] (actual) – canviat títol ebota
Línia 5: Línia 5:
 Protocol d'enviament de correus: SMTP\\ Protocol d'enviament de correus: SMTP\\
 Protocol bàsic de recollida de correus: POP\\ Protocol bàsic de recollida de correus: POP\\
-Protocol avançat de recollida de correus: SMTP\\+Protocol avançat de recollida de correus: IMAP\\
 </WRAP> </WRAP>
-I també són interessats de conèixer els conceptes de MTA, MTX... Però per fer una aplicació que envia i rep correus no són del tot necessàris +I també són interessats de conèixer els conceptes de MTA, MTX... Però per fer una aplicació que envia i rep correus no són del tot necessaris 
-===== Creació d'un compte de correu =====+===== Habilitar el correu en un domini =====
 Des del panell de Hestia, quan es crea un [[hestia:domini]], hi ha una casella de verificació pq. també crei el domini pel correu (bàsicament és un registre [[hestia:DNS]] de tipus MX). Des del panell de Hestia, quan es crea un [[hestia:domini]], hi ha una casella de verificació pq. també crei el domini pel correu (bàsicament és un registre [[hestia:DNS]] de tipus MX).
  
 Ara bé, si no s'ha creat el domini del correu, es pot crear a posteriori. Ara bé, si no s'ha creat el domini del correu, es pot crear a posteriori.
   Hestia -> Mail -> Add Mail Domain   Hestia -> Mail -> Add Mail Domain
-Una vegada creat podem crear comptes de correu segons les necessitats del projecte (el número de comptes i la quantitat de mails enviats tenen un sistema de quotes que l'administrador de Hestia pot modificar)+Una vegada creat podem crear comptes de correu segons les necessitats del projecte (el nombre de comptes i la quantitat de mails enviats tenen un sistema de quotes que l'administrador de Hestia pot modificar)
 ===== Creació d'un compte de correu ===== ===== Creació d'un compte de correu =====
 <WRAP center round info 60%> <WRAP center round info 60%>
Línia 60: Línia 60:
     'server' => 'mail.test1.daw.inspedralbes.cat',     'server' => 'mail.test1.daw.inspedralbes.cat',
     'username' => 'info@test1.daw.inspedralbes.cat',     'username' => 'info@test1.daw.inspedralbes.cat',
-    'password' => 'Passw0rd!',+    'password' => 'UnPasswordMoltDificil!OiQueSi&',
     'port' => 587,     'port' => 587,
 ]; ];
 </code> </code>
 +
 +<WRAP center round info 60%>
 +El codi PHP té diverses parts
 +  - OPCIONAL. Activar la depuració
 +  - Preparació de l'objecte "$mail" de PHPMAiler (haureu de fer ''composer require PHPMailer'' per tenir la llibreria) 
 +  - Recepció dels paràmetres del formulari
 +  - Si hem rebut els paràmetres, envia el mail
 +    - Si no, no fem res.
 +    - Si error en el mail fa un echo "a sac" del missatge. Per fer-ho bé, el missatge estaria dins d'un div i s'hauria de mostrar correctament.
 +  - Al final, sempre, mostra els camps del formulari
 +</WRAP>
 +
 +
 +<code php index.php>
 +<?php
 +
 +/**
 + * Exemple de fitxer config.php:
 + * <?php
 + * return [
 +     'server' => 'smtp.example.com',
 +     'username' => 'nomusuari@example.com',
 +     'password' => 'contrassenyaSegura',
 +     'port' => 465,
 + * ];
 + */
 +
 +// Incloem la biblioteca PHPMailer
 +use PHPMailer\PHPMailer\PHPMailer;
 +use PHPMailer\PHPMailer\Exception;
 +
 +require 'vendor/autoload.php';
 +
 +// Incloem el fitxer de configuració
 +$config = require 'config.php';
 +
 +// Funció per enviar un correu electrònic
 +function enviarCorreu(string $destinatari, string $assumpte, string $missatge): bool
 +{
 +    global $config;
 +
 +    try {
 +        $mail = new PHPMailer(true);
 +        
 +        //activem el debug al màxim per veure tots els errors
 +        ini_set('display_errors', 1);
 +        ini_set('display_startup_errors', 1);
 +        error_reporting(E_ALL);
 +            // Opcions de depuració
 +        $mail->SMTPDebug = 2; // Nivells: 0 = cap, 1 = errors i missatges, 2 = missatges de l'estat del client/servidor, 3 = més detallat, 4 = traça detallada
 +        $mail->Debugoutput = 'html'; // Format de sortida (html o text)        
 +        
 +        //**El servidor té un problema amb els certificats i hem de deshabilitar un nivell de seguretat.
 +        //En un entorn real NO S'HAURIA DE FER, sinó que s'hauria d'arreglar la configuració 
 +        //del servidor**
 +        $mail->SMTPOptions = array(
 +               'ssl' => array(
 +               'verify_peer' => false,
 +               'verify_peer_name' => false,
 +               'allow_self_signed' => true
 +               )
 +        );        
 +
 +        // Configuració del servidor SMTP
 +        $mail->isSMTP();
 +        $mail->Host = $config['server'];
 +        $mail->SMTPAuth = true;
 +        $mail->Username = $config['username'];
 +        $mail->Password = $config['password'];
 +       #º $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;
 +        $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;   // Activar encriptació TLS
 +
 +        $mail->Port = $config['port'];
 +
 +        // Configuració del remitent i destinatari
 +        $mail->setFrom($config['username'], 'Nom del Remitent');
 +        $mail->addAddress($destinatari);
 +
 +        // Contingut del correu
 +        $mail->isHTML(true);
 +        $mail->Subject = $assumpte;
 +        $mail->Body = $missatge;
 +
 +        // Mostrar informació del servidor per consola
 +        error_log("Servidor: " . $mail->Host);
 +        error_log("Port: " . $mail->Port);
 +        error_log("Nom d'usuari: " . $mail->Username);
 +        error_log("Contrasenya: " . $mail->Password);
 +        error_log("------------------------------- ENVIA !");
 +       // Enviem el correu
 +        $mail->send();
 +        return true;
 +    } catch (Exception $e) {
 +        error_log("Error en enviar el correu: " . $mail->ErrorInfo);
 +        return false;
 +    }
 +}
 +
 +// Processar el formulari
 +if ($_SERVER['REQUEST_METHOD'] === 'POST') {
 +    // Sanejament de les dades del formulari
 +    $destinatari = filter_input(INPUT_POST, 'destinatari', FILTER_VALIDATE_EMAIL);
 +    $assumpte = filter_input(INPUT_POST, 'assumpte', FILTER_SANITIZE_STRING);
 +    $missatge = filter_input(INPUT_POST, 'missatge', FILTER_SANITIZE_STRING);
 +
 +    if ($destinatari && $assumpte && $missatge) {
 +        if (enviarCorreu($destinatari, $assumpte, $missatge)) {
 +            echo "El correu s'ha enviat correctament.";
 +        } else {
 +            echo "Hi ha hagut un error en enviar el correu.";
 +        }
 +    } else {
 +        echo "Si us plau, ompliu tots els camps correctament.";
 +    }
 +}
 +
 +?>
 +<!-- Fins aquí el PHP -->
 +<!-- Formulari HTML -->
 +<!DOCTYPE html>
 +<html lang="ca">
 +<head>
 +    <meta charset="UTF-8">
 +    <meta name="viewport" content="width=device-width, initial-scale=1.0">
 +    <title>Enviar Correu</title>
 +</head>
 +<body>
 +    <form method="post" action="">
 +        <label for="destinatari">Destinatari:</label>
 +        <input type="email" id="destinatari" name="destinatari" required>
 +<br>
 +        <label for="assumpte">Assumpte:</label>
 +        <input type="text" id="assumpte" name="assumpte" required>
 +<br>
 +        <label for="missatge">Missatge:</label>
 +        <textarea id="missatge" name="missatge" required></textarea>
 +
 +        <button type="submit">Enviar</button>
 +    </form>
 +</body>
 +</html>
 +</code>
 +
/home/admin/web/eines.inspedralbes.cat/public_html/dokuwiki/data/attic/hestia/correu.1734595366.txt.gz · Darrera modificació: 2024/12/19 08:02 per ebota