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ó

Següent revisió
Revisió prèvia
hestia:correu [2024/12/18 22:28] – creat 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%>
-  Hestia > Mail > Símbol "+" +Hestia > Mail > Símbol "+"  
 +{{:hestia:icones.png?nolink|}}
 </WRAP> </WRAP>
 +I ens preguntarà les dades bàsiques:
 +  * nom del compte
 +  * Paraula de pas.
 +  * A les opcions avançades podem posar alguns límits o reenviaments.
 +  * Adreça on enviar les credencials
 +
 +En tot moment, a la dreta, ens mostra tota la informació del compte que estem creant, però si posem un correu, aleshores tindrem tota aquesta informació al nostre correu per poder consultar després (o per compartir) tranquil·lament.
 +
 +===== Enviant correu des de PHP =====
 +Una de les llibreries típiques és PHPMailer.
 +
 +Per poder-la fer servir al labs hem de desactivar la verificació dels certificats de la següent forma
 +<code php>
 +try {
 +  $mail = new PHPMailer(true)
 +  $mail->SMTPOptions = array(
 +    'ssl' => array(
 +    'verify_peer' => false,
 +    'verify_peer_name' => false,
 +    'allow_self_signed' => true     
 +    )
 +  );
 +  $mail->isSMTP();
 +  $mail->SMTPAuth = true;
 +  $mail.....
 +  ...
 +</code>
 +I per depurar:
 +<code php>
 +    $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)
 +</code>
 +
 +==== Exemple complet ====
 +<code php config.php>
 +<?php
 +/* Fitxer de configuració: config.php */
 +
 +return [
 +    'server' => 'mail.test1.daw.inspedralbes.cat',
 +    'username' => 'info@test1.daw.inspedralbes.cat',
 +    'password' => 'UnPasswordMoltDificil!OiQueSi&',
 +    'port' => 587,
 +];
 +</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.1734560932.txt.gz · Darrera modificació: 2024/12/18 22:28 per ebota