2012-06-28 11 views
34

Jak wysłać wiadomość e-mail w formacie HTML ze zdjęciami za pomocą PHP? Chcę mieć stronę z niektórymi ustawieniami i wyjściem HTML, które jest wysyłane pocztą e-mail na adres. Co powinienem zrobić? Głównym problemem jest dołączanie plików. Jak mogę to zrobić?Wysyłaj HTML w e-mailu przez PHP?

+0

jest Twój problem wysyłających 'kod HTML'? Lub wysyłając e-mail za pomocą PHP w ogóle? – Adi

Odpowiedz

80

To jest dość proste, pozostawić obrazów na serwerze i wysłać PHP + CSS do nich ...

$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); 

Jest to wiersz, który opowiada przesyłkę i odbiorcę, że wiadomość e-mail zawierającą (oby) dobrze uformowane HTML, który będzie musiał zinterpretować:

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

Oto link dostałem info .. (link...)

Musisz bezpieczeństwo choć ...

+0

co na temat formatowania css, obrazów i innych plików, takich jak js, których potrzebuje plik HTML? – Abadis

+3

@UmerHayat zgodził się, ale wszyscy musieliśmy od czegoś zacząć, nawet jeśli uczymy się tylko od Google ... – Chris

+0

@Abadis - CSS można zrobić w dowolny sposób, osadzić w pliku lub zewnętrznie jak zwykle z plikiem HTML . Obrazy można spakować myślami (nigdy tego nie zrobiłem) lub pozostawić na serwerze i połączyć z nimi. Wyszukaj obrazy HTML, jeśli nie masz pewności, jak działają: P – Chris

2

Najprostszym sposobem jest prawdopodobnie użycie Zend Framework lub innych frameworków takich jak CakePHP lub Symphony.

Można to również zrobić przy użyciu standardowej funkcji mail, ale potrzebna jest nieco większa wiedza na temat dołączania zdjęć.

Alternatywnie wystarczy umieścić obrazy na serwerze, zamiast je dołączać. Wysyłanie wiadomości HTML jest udokumentowane w dokumentacji funkcji mail.

+1

Dodanie frameworka to przesada IMO :) – gonatee

+0

@gonatee zależy od poziomu jakość, którą chcesz. Przyjęta odpowiedź nie będzie działać we wszystkich, oprócz najbardziej podstawowych przypadkach. Jeśli podstawowe sprawy są wszystkim, czego potrzebujesz, to używanie 'mail()' będzie w porządku. Jeśli potrzebujesz bardziej niezawodnego rozwiązania lub masz złożone sytuacje lub wymagania, prawdopodobnie powinieneś polegać na frameworku lub bibliotece, która już przechodziła przez dziesiątki dokumentów RFC i lata naprawiania błędów. Jeśli znajdziesz dedykowaną bibliotekę lub framework, który pozwala ci wybrać i wybrać pożądane funkcje, nie ma powodu, aby polegać na samodzielnym wyobrażaniu sobie tego. – Martijn

15

Musisz kodować swój html przy użyciu bezwzględnej ścieżki dla obrazów. Według ścieżki Absolute oznacza to, że musisz przesłać obrazy na serwer, a w atrybucie src obrazów podać bezpośrednią ścieżkę, taką jak ta <img src="http://yourdomain.com/images/example.jpg">.

Poniżej znajduje się kod PHP do refference: - Jest zrobione z 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

Mam ten kod i będzie działać doskonale na moim miejscu

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); 
    } 

funkcja elektronicznej

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); 
     } 

Funkcja url obrazu jest używana, jeśli chcesz zmienić obraz, który masz ge w tylko jednej funkcji mam wiele funkcji poczty jak zapomniałem hasła utwórz użytkownika tam, gdzie używam funkcji URL obrazu możesz bezpośrednio ustawić ścieżkę.

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

Dzięki, to było to, czego potrzebowałem – Abadis

+0

@Jalpesh Czyli dla pliku CSS po prostu zrobiłbyś to samo? Odniesienie do absolutnej ścieżki i powinno działać, prawda? –

+1

@FernandoSilva musisz ustawić absolutną ścieżkę, a także ustawić klasę lub identyfikator do elementu, więc na podstawie tego będziesz działał – Jalpesh

2

Możesz łatwo wysłać wiadomość e-mail z zawartością HTML przez PHP. Użyj następującego skryptu.

<?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; 
?> 

kod źródłowy i demo na żywo można znaleźć tutaj - Send Beautiful HTML Email using PHP

4

wysyłając e-mail html nie różni się zbytnio od normalnych wysyłania wiadomości e-mail za pomocą PHP. Co trzeba dodać, to rodzaj treści w parametrze nagłówka funkcji php mail(). Oto przykład.

<?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); 
?> 

Można również sprawdzić here dla bardziej szczegółowych wyjaśnień przez w3schools