2012-06-28 31 views
34

Come posso inviare un'email in formato HTML con immagini usando PHP? Voglio avere una pagina con alcune impostazioni e un output HTML che viene inviato via e-mail a un indirizzo. Cosa dovrei fare? Il problema principale è quello di allegare files.how posso farlo?Invia HTML in e-mail tramite PHP?

+0

è il tuo problema inviando 'codice html'? Oppure inviando email usando PHP in generale? – Adi

risposta

80

E 'abbastanza semplice, lasciare le immagini sul server e inviare il PHP + CSS per loro ...

$to = '[email protected]'; 

$subject = 'Website Change Reqest'; 

$headers = "From: " . strip_tags($_POST['req-email']) . "\r\n"; 
$headers .= "Reply-To: ". strip_tags($_POST['req-email']) . "\r\n"; 
$headers .= "CC: [email protected]\r\n"; 
$headers .= "MIME-Version: 1.0\r\n"; 
$headers .= "Content-Type: text/html; charset=UTF-8\r\n"; 

$message = '<p><strong>This is strong text</strong> while this is not.</p>'; 


mail($to, $subject, $message, $headers); 

È questa linea che dice al mailer e il destinatario che l'e-mail contiene (si spera) ben formato HTML che avrà bisogno di interpretare:

$headers .= "Content-Type: text/html; charset=UTF-8\r\n"; 

Ecco il link che ho avuto l'info .. (link...)

avrete bisogno di sicurezza anche se ...

+0

che dire di CSS form, immagini e altri file come js di cui ha bisogno un file html? – Abadis

+3

@UmerHayat ha accettato, ma dovevamo iniziare da qualche parte, anche se si tratta solo di imparare cose Google ... – Chris

+0

@Abadis - I CSS possono essere eseguiti in entrambi i modi, incorporati nel file o esternamente come al solito con un file HTML . Le immagini possono essere imballate con credo (non l'ho mai fatto) o lasciate sul server e collegate a. Cerca immagini HTML se non sei sicuro del loro funzionamento: P – Chris

2

Il modo più semplice è probabilmente utilizzare solo Zend Framework o qualsiasi altro framework come CakePHP o Symphony.

Potete farlo anche con la funzione standard mail, ma avrete bisogno di un po 'più di conoscenza su come allegare le immagini.

In alternativa, è sufficiente ospitare le immagini su un server anziché collegarle. L'invio di posta HTML è documentato nella documentazione della funzione mail.

+1

L'aggiunta di framework è overkill IMO :) – gonatee

+0

@gonatee dipende dal livello di qualità che vuoi La risposta accettata non funzionerà per tutti tranne i casi più elementari. Se i casi di base sono tutto ciò che serve, allora usare 'mail()' andrà bene. Se avete bisogno di una soluzione più affidabile o di situazioni o richieste complesse, è probabilmente meglio affidarsi a un framework o una libreria che ha già attraversato dozzine di documenti RFC e anni di bug fixing. Se riesci a trovare una libreria dedicata o un framework che ti consenta di scegliere e scegliere le funzionalità che desideri, non ci sono molti motivi per affidarti a capire tutto da solo. – Martijn

15

È necessario codificare il codice html utilizzando il percorso assoluto per le immagini. Per percorso assoluto significa che devi caricare le immagini su un server e nell'attributo src delle immagini devi dare il percorso diretto come questo <img src="http://yourdomain.com/images/example.jpg">.

Di seguito si riporta il codice PHP per il vostro riferimento: - Il suo tratto da http://www.php.net/manual/en/function.mail.php

<?php 
// multiple recipients 
$to = '[email protected]' . ', '; // note the comma 
$to .= '[email protected]'; 

// subject 
$subject = 'Birthday Reminders for August'; 

// message 
$message = ' 
    <p>Here are the birthdays upcoming in August!</p> 
'; 

// To send HTML mail, the Content-type header must be set 
$headers = 'MIME-Version: 1.0' . "\r\n"; 
$headers .= 'Content-type: text/html; charset=UTF-8' . "\r\n"; 

// Additional headers 
$headers .= 'To: Mary <[email protected]>, Kelly <[email protected]>' . "\r\n"; 
$headers .= 'From: Birthday Reminder <[email protected]>' . "\r\n"; 


// Mail it 
mail($to, $subject, $message, $headers); 
?> 
7

ho un questo codice e verrà eseguito perfettamente per il mio sito

public function forgotpassword($pass,$name,$to) 
    { 
     $body ="<table width=100% border=0><tr><td>"; 
     $body .= "<img width=200 src='"; 
     $body .= $this->imageUrl(); 
     $body .="'></img></td><td style=position:absolute;left:350;top:60;><h2><font color = #346699>PMS Pvt Ltd.</font><h2></td></tr>"; 
     $body .='<tr><td colspan=2><br/><br/><br/><strong>Dear '.$name.',</strong></td></tr>'; 
     $body .= '<tr><td colspan=2><br/><font size=3>As per Your request we send Your Password.</font><br/><br/>Password is : <b>'.$pass.'</b></td></tr>'; 
     $body .= '<tr><td colspan=2><br/>If you have any questions, please feel free to contact us at:<br/><a href="mailto:[email protected]" target="_blank">[email protected]</a></td></tr>'; 
     $body .= '<tr><td colspan=2><br/><br/>Best regards,<br>The PMS Team.</td></tr></table>'; 
     $subject = "Forgot Password"; 
     $this->sendmail($body,$to,$subject); 
    } 

funzione di posta elettronica

function sendmail($body,$to,$subject) 
     { 
      //require_once 'init.php'; 


      $from='[email protected]';  
      $headersfrom=''; 
      $headersfrom .= 'MIME-Version: 1.0' . "\r\n"; 
      $headersfrom .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; 
      $headersfrom .= 'From: '.$from.' '. "\r\n"; 
      mail($to,$subject,$body,$headersfrom); 
     } 

immagine funzione di url è utilizzata per se si desidera modificare l'immagine che si ha chan ge in una sola funzione ho molte funzioni di posta come password dimenticata creare l'utente lì per sto usando la funzione di immagine url è possibile impostare direttamente il percorso.

function imageUrl() 
    { 
     return "http://".$_SERVER['SERVER_NAME'].substr($_SERVER['SCRIPT_NAME'], 0, strrpos($_SERVER['SCRIPT_NAME'], "/")+1)."images/capacity.jpg"; 
    } 
+1

Grazie, questo era quello che mi serviva – Abadis

+0

@Jalpesh Quindi per un file CSS si farebbe lo stesso? Fai riferimento al percorso assoluto e dovrebbe funzionare, giusto? –

+1

@FernandoSilva devi impostare il percorso assoluto e anche impostare la classe o l'id sull'elemento in modo tale che il tuo css funzionerà – Jalpesh

2

È possibile inviare facilmente l'e-mail con contenuto HTML tramite PHP. Usa il seguente script.

<?php 
$to = '[email protected]'; 
$subject = "Send HTML Email Using PHP"; 

$htmlContent = ' 
<html> 
<body> 
    <h1>Send HTML Email Using PHP</h1> 
    <p>This is a HTMl email using PHP by CodexWorld</p> 
</body> 
</html>'; 

// Set content-type header for sending HTML email 
$headers = "MIME-Version: 1.0" . "\r\n"; 
$headers .= "Content-type:text/html;charset=UTF-8" . "\r\n"; 

// Additional headers 
$headers .= 'From: CodexWorld<[email protected]>' . "\r\n"; 
$headers .= 'Cc: [email protected]' . "\r\n"; 
$headers .= 'Bcc: [email protected]' . "\r\n"; 

// Send email 
if(mail($to,$subject,$htmlContent,$headers)): 
    $successMsg = 'Email has sent successfully.'; 
else: 
    $errorMsg = 'Email sending fail.'; 
endif; 
?> 

codice sorgente e demo live possono essere trovati da qui - Send Beautiful HTML Email using PHP

4

inviando una e-mail HTML, non è molto diverso da l'invio di email normali utilizzando PHP. Ciò che è necessario aggiungere è il tipo di contenuto lungo il parametro dell'intestazione della funzione php mail(). Ecco un esempio.

<?php 
    $to = "[email protected]"; 
    $subject = "HTML email"; 
    $message = " 
    <html> 
    <head> 
    <title>HTML email</title> 
    </head> 
    <body> 
    <p>A table as email</p> 
    <table> 
    <tr> 
    <th>Firstname</th> 
    <th>Lastname</th> 
    </tr> 
    <tr> 
    <td>Fname</td> 
    <td>Sname</td> 
    </tr> 
    </table> 
    </body> 
    </html> 
    "; 
    // Always set content-type when sending HTML email 
    $headers = "MIME-Version: 1.0" . "\r\n"; 
    $headers .= "Content-type:text/html;charset=UTF-8" . "\r\b"; 
    $headers .= 'From: name' . "\r\n"; 
    mail($to,$subject,$message,$headers); 
?> 

È inoltre possibile controllare here per spiegazioni più dettagliate di w3schools