Включить HTML-шаблон электронной почты в код PHP - PullRequest
0 голосов
/ 17 ноября 2011

У меня есть действительно красивый HTML-шаблон, который мне нужно внедрить в мою почтовую систему.В настоящее время я использую это для отправки электронных писем:

$to   = $dbuser;
$subject = "Welcome";
$from = "support@mysite.com";
$headers = "From: $from";
$server = ""; 

ini_set ("SMTP", $localhost);

$url="";
$msg="$url";    
$body = Example Text!

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

Как бы я включил шаблон HTML (наряду с CSS) непосредственно в переменную $ body моей формы электронной почты php?

I 'Я провел немало исследований, но я не могу найти ничего существенного.

Ответы [ 5 ]

2 голосов
/ 17 ноября 2011

Один из способов сделать это, который я использовал в прошлом, - создать страницу как обычно (используя html / php и т. Д.), А затем использовать file_get_contents ($ url) следующим образом:

$body = file_get_contents("http://mydomain.com/emailtemplates/template.php?name=John Doe&subject=Hello");

Поскольку вы используете http: // php выполняется, а не втягивается в шаблон, просто, но эффективно!

Я бы также посоветовал вам использовать встроенный css и не бойтесь использовать таблицы!

2 голосов
/ 17 ноября 2011

Отсутствует заголовок, необходимый почтовому клиенту для интерпретации сообщения как HTML. Добавьте следующее к своим заголовкам:

$headers = "From: " . $from . "\r\n";
$headers .= "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=iso-8859-1" . "\r\n";
1 голос
/ 17 ноября 2011

http://php.net/manual/en/function.mail.php - пример # 5

также помните, что в электронных письмах HTML настоятельно рекомендуется использовать встроенный CSS и форматирование старой школы HTML, где это возможно, для обеспечения максимальной совместимости с различными почтовыми клиентами,Также нет divs - просто старый добрый table -s

0 голосов
/ 16 декабря 2011

Вчера я написал это для себя:

  1. Создайте HTML-код и поместите его в файл с именем "./email.html". Скопируйте и
  2. вставьте приведенный ниже код вФайл php в том же каталоге, что и файл html.
  3. Измените имена изображений, если вы используете их в HTML, просто сделайте так: src = "cid: world.jpg"

И это все ... я думаю.=)

//attachment file paths/names
$files[0] = './world.jpg';
$files[1] = './world2.jpg';

$to = '';
$bcc = "";
$subject = '';
                    $from = "";

$htmlx = '';

$handle = @fopen("./email.html", "r");
if ($handle) {
    while (($buffer = fgets($handle, 4096)) !== false) {
        $htmlx .= $buffer;
    }
    if (!feof($handle)) {
        echo "Error: unexpected fgets() fail\n";
    }
    fclose($handle);
}

$semi_rand = md5(time());
$mime_boundary = "==Multipart_Boundary_x".$semi_rand."x";

$headers = "From: $from \n";
$headers .= "Reply-To: $from \n";
$headers .= 'Bcc: '. $bcc . "\n";
$headers .= "MIME-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . ' boundary="'.$mime_boundary.'"'."\n";
$headers .= "X-Author: <Timothy Martens>\n";



$message  = '--'.$mime_boundary."\n";
$message .= 'Content-Type: text/html; charset=UTF-8'."\n";
$message .= "Content-Transfer-Encoding: 7bit\n\n\n". $htmlx . "\n\n\n";


// preparing attachments
for($i=0;$i<count($files);$i++){
    if(is_file($files[$i])){
        $message .= "--".$mime_boundary."\n";
        $fp = @fopen($files[$i],"rb");
        $data = @fread($fp,filesize($files[$i]));
        @fclose($fp);
        $data = chunk_split(base64_encode($data));
        $message .= "Content-Type: application/octet-stream; name=\"".basename($files[$i])."\"\n" .
        "Content-Description: ".basename($files[$i])."\n" .
        "Content-ID: <".basename($files[$i]).">\n".
        "Content-Disposition: attachment;\n" . " filename=\"".basename($files[$i])."\"; size=".filesize($files[$i]).";\n" .
        "Content-Transfer-Encoding: base64\n\n" . $data . "\n\n";
    }
}
$message .= "--".$mime_boundary."--";

if (mail($to, $subject, $message, $headers)) {
    echo 'Your message has been sent.'."\n";
} else {
    echo 'There was a problem sending the email.'."\n";
}
0 голосов
/ 17 ноября 2011

Прежде всего вам нужно добавить несколько заголовков, чтобы HTML-код отображался правильно.Взято из PHP-документации mail (), вот как вы это делаете:

$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

После этого я предполагаю, что $ body - это то место, где должен быть текст, поэтому нужно поместить весь HTMLмежду кавычками (экранирование каждой кавычки в вашем HTML с обратной косой чертой), и это почти все.

...