Il doctype standard per le email HTML è XHTML 1.0 Transitional — garantisce il comportamento più consistente tra i client. L'attributo xmlns su <html> abilita il namespace per i commenti condizionali Outlook.
<!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" lang="it">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="format-detection" content="telephone=no">
<title>Oggetto email</title>
<style type="text/css">
/* regole globali e media query qui */
</style>
</head> format-detection=telephone=no — impedisce a iOS di linkare automaticamente i numeri di telefono nel testo<title> viene mostrato nel pannello di anteprima di alcuni client (es. Apple Mail)Il preheader è il testo di anteprima visibile nelle inbox prima di aprire l'email, subito dopo l'oggetto. Va inserito come primissimo elemento del body, nascosto visivamente con CSS.
<body>
<!-- Preheader: visibile nell'anteprima inbox, nascosto nell'email -->
<span style="display:none; font-size:0; line-height:0; max-height:0; max-width:0;
opacity:0; overflow:hidden; mso-hide:all;">
Testo preheader, idealmente 85-100 caratteri.
</span>
<!-- wrapper principale -->
</body> width="100%" + tabella interna a 600px fissacellpadding="0" cellspacing="0" border="0"role="presentation" sulle tabelle layout (accessibilità)<table width="100%" cellpadding="0" cellspacing="0" border="0" role="presentation">
<tr>
<td align="center" bgcolor="#f4f4f4">
<!-- Tabella contenuto, max 600px -->
<table width="600" cellpadding="0" cellspacing="0" border="0" role="presentation"
style="max-width:600px;">
...
</table>
</td>
</tr>
</table> La maggior parte dei client email rimuove o ignora il blocco <style>. Tutti gli stili critici devono essere inline direttamente sull’elemento.
style — gli apici singoli causano problemi in alcuni parserfont: bold 16px/1.5 Arial, sans-serif invece di 4 dichiarazioni separate<style> nel <head> si usa per media query e reset globali — non per stili di layout!important nel CSS inline: alcuni client lo ignorano#ffffff — evitare shorthand #fff, rgba(), hsla()color) sia lo sfondo (bgcolor su td + background-color inline)bgcolor sull’attributo HTML ha supporto più ampio di background-color CSS in OutlookArial, Helvetica, sans-serif oppure Georgia, 'Times New Roman', serifline-height sempre in px, non in unità relative o percentualitext-decoration: none inline sui link — preferire la regola nel blocco <style>tddiv vuoti come spacer — preferire <br> o celle td con altezza fissaborder dello stesso colore del background: evita il rendering inconsistente in OutlookI client moderni (Apple Mail, Outlook su iOS/macOS, Gmail su Android) invertono o modificano i colori in dark mode. Alcune casistiche sono gestibili con CSS.
@media (prefers-color-scheme: dark) {
.email-body { background-color: #1a1a1a !important; }
.email-container { background-color: #2d2d2d !important; }
.email-text { color: #f0f0f0 !important; }
}
/* Outlook 2019+ dark mode */
[data-ogsc] .email-body { background-color: #1a1a1a !important; } <style> head funzionano per Apple Mail, iOS mail, Outlook appcolor-scheme: light dark nel meta per indicare il supporto esplicitowidth e height come attributi HTML (non solo CSS)display:block su ogni <img> — rimuove il gap verticale che i client aggiungono sotto le immagini inlinealt sempre compilato: molti client bloccano le immagini per default e mostrano solo l’althttps://dominio.it/img/logo.png)<img src="https://dominio.it/img/banner.jpg"
width="600" height="200"
alt="Descrizione immagine"
style="display:block; border:0;"> Il metodo più compatibile usa una tabella con la cella td come sfondo e un <a> con border per simulare il padding.
<!-- Metodo border (compatibile con Outlook) -->
<table cellpadding="0" cellspacing="0" border="0" role="presentation">
<tr>
<td align="center" bgcolor="#0066cc" style="border-radius:4px;">
<a href="https://dominio.it/link"
style="display:inline-block;
border:12px solid #0066cc;
font:bold 16px/1 Arial,sans-serif;
color:#ffffff;
text-decoration:none;
white-space:nowrap;">
Scopri di più
</a>
</td>
</tr>
</table> white-space:nowrap evita che il testo del pulsante vada a capobackground-image CSS non è supportato in Outlook su Windows. Usare la soluzione ibrida con VML (Vector Markup Language) nei commenti condizionali.
<!--[if gte mso 9]>
<v:rect xmlns:v="urn:schemas-microsoft-com:vml" fill="true" stroke="false"
style="width:600px; height:200px;">
<v:fill type="frame" src="https://dominio.it/img/bg.jpg" color="#cccccc"/>
<v:textbox inset="0,0,0,0">
<![endif]-->
<!-- contenuto sovrapposto allo sfondo -->
<!--[if gte mso 9]>
</v:textbox>
</v:rect>
<![endif]--> Per i client che non supportano né CSS né VML, specificare sempre un bgcolor di fallback sulla cella td.
Outlook su Windows (2007–2019) usa il motore di rendering Word — il più problematico. I commenti condizionali HTML permettono di servire markup specifico solo a Outlook.
<!--[if mso]> Solo Outlook <![endif]-->
<!--[if !mso]><!--> Non Outlook <!--<![endif]-->
<!--[if gte mso 9]> Outlook 2007 e superiori <![endif]--> display:block sull’imgwidth sia come attributo che in CSStable e td non funziona; alternativa: usare VML o immagini<!-- reset margin Outlook su paragrafi -->
<style>
p { margin: 0; Margin: 0; }
</style> lang sull’<html> per screen reader e client di traduzione automaticarole="presentation" su tutte le tabelle usate solo per layout (non per dati)