Visualizzazione risultati 1 fino 5 di 5

Discussione: mail vengono ricevute in plain text senza html

  1. #1
    seintian non è connesso Utente Blog
    Data registrazione
    01-12-2021
    Messaggi
    27

    Question mail vengono ricevute in plain text senza html

    Salve,

    ho provato a fare in modo che tutte le mail che vengono mandate dal mio sito risultassero in un documento html con div e stili, come fanno in molti.

    Il codice in questione sarebbe:
    Codice:
    $email_headers = "MIME-Version: 1.0" . "\r\n";
    $email_headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";
    $email_headers .= 'From: <seintian@altervista.org>' . "\r\n";
    
    $pre_styles = "
    :root {
        --bg-color: rgb(10, 10, 10);
        --text-color: rgb(200, 200, 200);
        --fg-color: rgb(90, 25, 140);
        --darker-bg-color: rgb(30, 30, 30);
        --darkest-bg-color: rgb(20, 20, 20);
        --darker-text-color: rgb(170, 170, 170);
        --red-fg-color: rgb(200, 0, 0);
        --light-shadow: rgb(30, 30, 30);
    
        --topbar-height: 2rem;
        --optimal-article-width: 65ch;
        --card-border-width: 5px;
        --monospace-font-family: \"Consolas\", \"Andale Mono WT\", \"Andale Mono\", \"Lucida Console\", 
        \"Lucida Sans Typewriter\", \"DejaVu Sans Mono\", \"Bitstream Vera Sans Mono\", 
        \"Liberation Mono\", \"Nimbus Mono L\", \"Monaco\", \"Courier New\", Courier, monospace;
    
        font-size: 18px;
    }
    
    html, body {
        margin: 0;
        min-width: 100%;
        scroll-behavior: smooth;
        height: 100%;
    }
    * {
        box-sizing: content-box;
    }
    body {
        background-color: var(--bg-color);
        color: var(--text-color);
        font-family: Arial, Helvetica, sans-serif;
        word-break: break-word;
    }
    
    a {
        color: var(--text-color);
        transition: .2s;
    }
    a:hover {
        color: var(--fg-color);
    }
    a.no-link {
        text-decoration: none;
    }
    
    div#main {
        width: var(--optimal-article-width);
        margin: 2rem auto;
    }
    ";
    
    
    function sendMyMail($to, $subject, $body, $other_headers = "") {
        global $email_headers, $pre_styles;
    
        mail($to, $subject, 
        "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional //EN\" 
            \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
        <html xmlns=\"http://www.w3.org/1999/xhtml\" 
            xmlns:o=\"urn:schemas-microsoft-com:office:office\" 
            xmlns:v=\"urn:schemas-microsoft-com:vml\" lang=\"en\">
      
        <head>
            <meta property=\"og:title\" content=\"$subject\">
            <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">
            <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">
            <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">
    
            <title>$subject</title>
    
            <link rel=\"stylesheet\" type=\"text/css\" hs-webfonts=\"true\" 
                href=\"https://fonts.googleapis.com/css?family=Lato|Lato:i,b,bi\">
            
            <style type=\"text/css\">
            $pre_styles
            </style>
        </head>
        <body>" .
        $body .
        "</body></html>", $email_headers . $other_headers);
    }
    
    ?>
    Questa funzione, poi, verrebbe richiamata semplicemente in questo modo:
    Codice:
    sendMyMail($email, "Subscription to the newsletter", 
                    "<div id='main'>Ciao! Benvenuto nella mia newsletter :)</div>");
    Purtroppo, però, le mail arrivano col testo normale, senza alcuna formattazione, sia su Gmail che su altri servizi simili.

    Sbaglio qualcosa nel formattarla correttamente? Oppure Altervista non permette di mandarle in quel modo?

  2. #2
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,266

    Predefinito

    Lato AlterVista, non dovrebbero esserci problemi a spedire un'email in HTML. Ciò che rende il messaggio HTML è il contenuto, non una caratteristica del servizio.

    Detto questo, ad una prima occhiata il modo in cui la spedisci mi sembra incorretto: ho sempre visto l'HTML separato in una sezione del messaggio, quest'ultimo inviato come Content-Type: multipart/alternative.

    Invece di costruire il messaggio a mano, ti suggerirei di utilizzare una libreria come symfony/mailer o PHPMailer, che si occupano di tutti questi dettagli.

    Inoltre, è improbabile che client di posta, Gmail incluso, supportino feature più recenti come variabili CSS. Di solito si usa solo il minimo che la maggior parte dei client supporta, e questo purtroppo vuol dire anche attributi style="..." qua e la nell'HTML.

    Vedi ad esempio: https://www.smashingmagazine.com/202...mplates-tools/

  3. #3
    seintian non è connesso Utente Blog
    Data registrazione
    01-12-2021
    Messaggi
    27

    Predefinito

    Citazione Originalmente inviato da dreadnaut Visualizza messaggio
    Lato AlterVista, non dovrebbero esserci problemi a spedire un'email in HTML. Ciò che rende il messaggio HTML è il contenuto, non una caratteristica del servizio.

    Detto questo, ad una prima occhiata il modo in cui la spedisci mi sembra incorretto: ho sempre visto l'HTML separato in una sezione del messaggio, quest'ultimo inviato come Content-Type: multipart/alternative.

    Invece di costruire il messaggio a mano, ti suggerirei di utilizzare una libreria come symfony/mailer o PHPMailer, che si occupano di tutti questi dettagli.

    Inoltre, è improbabile che client di posta, Gmail incluso, supportino feature più recenti come variabili CSS. Di solito si usa solo il minimo che la maggior parte dei client supporta, e questo purtroppo vuol dire anche attributi style="..." qua e la nell'HTML.

    Vedi ad esempio: https://www.smashingmagazine.com/202...mplates-tools/
    Grazie della risposta :3

    All'inizio usavo PHPMailer per mandare le mail, o meglio, lo utilizzavo in localhost, perché su Altervista non funzionano librerie simili perché Altervista blocca quelle porte che vengono usate dalle stesse. Per questo motivo, l'unico modo (che io sappia) per mandare mail da un sito Altervista è utilizzare la funzione di PHP mail().

    Conseguentemente, come potrei evitare di costruire il messaggio a mano, se c'è un modo alternativo?

    In secondo luogo, potresti spiegarmi un po' più nel dettaglio come andrebbe costruito il messaggio con l'HTML separato?

    In ogni caso, hai ragione, ho letto proprio adesso che le mail formattate vanno scritte in un modo tale da assicurare la maggior compatibilità possibile tra i vari provider, considerando oltretutto che molte delle feature più moderne non sono effettivamente supportate da questi. Mi adopererò per sistemare gli stili, grazie del consiglio :)

  4. #4
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,192

    Predefinito

    Sul forum trovi esempi già fatti, vedi ad esempio qui.

    Ciao!

  5. #5
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,266

    Predefinito

    Se ricordo bene, sia symfony che PHPMailer possono essere configurati per spedire via mail() (funziona su
    AV) invece che via SMTP (non funziona su AV). Continuo a suggerire la libreria, invece di reinventare la ruota :D

    Edit: vedi questo esempio nel repo di PHPMailer

    Se poi pensi di spedire pochi messaggi, puoi appoggiarti ad un servizio esterno tipo SendGrid (100 email/giorno gratis), ed a quel punto usi la loro libreria.
    Ultima modifica di dreadnaut : 26-01-2022 alle ore 23.41.27

Tags for this Thread

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •