@vista1x

PHP: почему не отправляются письма с HTML-тегами?

Здравствуйте!
Есть функция отправки письма с вложением, найденная на просторах интернета.
function send_mail($mail_to, $thema, $html, $path){ 
		if ($path) { 
			$fp = fopen($path,"rb");   
			if (!$fp) { 
				print "Cannot open file";   
				exit();   
			}   
			$file = fread($fp, filesize($path));   
			fclose($fp);   
		}  
		
		$name = $path; // в этой переменной надо сформировать имя файла (без всякого пути)  
		$EOL = "\r\n"; // ограничитель строк, некоторые почтовые сервера требуют \n - подобрать опытным путём
		$boundary     = "--".md5(uniqid(time()));  // любая строка, которой не будет ниже в потоке данных.  
		
		$headers    = "MIME-Version: 1.0$EOL";   
		$headers   .= "Content-Type: multipart/mixed; boundary=\"$boundary\"$EOL";  
		$headers   .= "From: varte";  
		 
		$multipart  = "--$boundary$EOL";   
		$multipart .= "Content-Type: text/html; charset=UTF-8$EOL";   
		$multipart .= "Content-Transfer-Encoding: base64$EOL";   
		$multipart .= $EOL; // раздел между заголовками и телом html-части 
		$multipart .= chunk_split(base64_encode($html));   
		$multipart .=  "$EOL--$boundary$EOL";   
		
		$multipart .= "Content-Type: application/octet-stream; name=\"$name\"$EOL";   
		$multipart .= "Content-Transfer-Encoding: base64$EOL";   
		$multipart .= "Content-Disposition: attachment; filename=\"$name\"$EOL";   
		
		$multipart .= $EOL; // раздел между заголовками и телом прикрепленного файла 
		$multipart .= chunk_split(base64_encode($file));   

		$multipart .= "$EOL--$boundary--$EOL";   
		if(!mail($mail_to, $thema, $multipart, $headers)) {
			return False;           // если не письмо не отправлено
		} else { 					// если письмо отправлено
			return True;  
		}  
		exit;  
	}

Дело вот в чем: если отправлять письмо с файлом и в тексте письма прописать html-теги, они обрабатываются нормально, а если файл не прикреплять - теги игнорируются и отображаются как текст. Как исправить функцию, что бы в обоих случаях html-теги воспринимались нормально?
Отправляю из формы так:
if(empty($doc)) {
mail($mail_to, $thm, $msg); 
} else {
send_mail($mail_to, $thm, $msg, $doc); 
}
  • Вопрос задан
  • 2548 просмотров
Пригласить эксперта
Ответы на вопрос 1
HorrorInferno
@HorrorInferno
веб-разработчик, бэкэндер
Попробуйте изменить заголовки на эти:
$headers  = "Content-type: text/html; charset=windows-1251 \r\n"; 
$headers .= "From: Birthday Reminder <birthday@example.com>\r\n"; 
$headers .= "Bcc: birthday-archive@example.com\r\n";
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы