Tavion
@Tavion
front-end developer

Почему Яндекс.Почта не отображает вложенные фотографии отправленные с формы на сайте?

Есть на сайте форма (код обработчика приведён ниже). С формы отправляются данные полей и фотографии в base64. При отправке на gmail всё происходит корректно, при ручной пересылке с gmail на яндекс.почту, вложения также отображаются корректно, в свойствах письма данных по вложенным фотографиям присутствуют, но при отправке сообщений с формы на яндекс.почту он вложения отображает как пустые файлы. Как это можно исправить? (у заказчика яндекс.почта, поэтому нужно наладить это для яндекс.почту).

Код обработчика формы:

<?php
	$data = file_get_contents('php://input');
	$exploded =  explode('&', $data);

	$_phone = explode('=', $exploded[0]);
	$_name = explode('=', $exploded[1]);
	$_address = explode('=', $exploded[2]);
	$_message = explode('=', $exploded[3]);

	for ($x = 4; $x < count($exploded); $x++) {
		$_photo[] = explode('=', $exploded[$x]);
	}

	foreach ($_photo as $ph) {
		$photo[] = $ph[1];
	}

	$name = $_name[1];
	$phone = $_phone[1];
	$msg = $_message[1];
	$address = $_address[1];
	$to = '***@***.com';
	$from = '***@***.ru';
	$subject = '=?UTF-8?B?'.base64_encode("Заказ с ***.ru!").'?=';

	$body = "\nИмя: {$name}\nТелефон: {$phone}\nАдрес: {$address}\nКомментарий: \"{$msg}\"";

	email($from, $name, $to, $subject, $body, $photo);

	function email($mail_from, $from_name, $mail_to, $subject, $message, $file) {
		$uid = md5(time()); // Create unique boundary from timestamps 
		$headers = array();
		$headers[] = "MIME-Version: 1.0";
		$headers[] = "From: {$from_name} <{$mail_from}>";
		$headers[] = "Reply-To: {$mail_from}";
		$headers[] = "Content-Type: multipart/message; boundary=\"{$uid}\"";
		$headers[] = "This is a multi-part message in MIME format.";
		$headers[] = "--{$uid}";
		$headers[] = "Content-Type:text/plain; charset=utf-8"; // Set message content type
		$headers[] = "Content-Transfer-Encoding: 7bit";
		$headers[] = $message; // Dump message

		if (count($file) > 0) {
			for ($i = 0; $i < count($file); $i++) {
				$headers[] = "--{$uid}";
				$file_name = "photo{$i}.png"; // Get file name
				$img = str_replace('data:image/png;base64,', '', $file[$i]);
				$img = str_replace(' ', '+', $img);
				$file_contents = chunk_split($img); 
				$headers[] = "Content-Type:image/png; name=\"{$file_name}\""; // Set content type and file name
				$headers[] = "Content-Transfer-Encoding: base64"; // Set file encoding base
				$headers[] = "Content-Disposition: attachment; filename=\"{$file_name}\""; // Set file Disposition
				$headers[] = $file_contents; // Dump file
			}
		}
		
		$headers[] = "--{$uid}--"; //End boundary

		if (mail($mail_to, $subject, '', implode("\r\n", $headers) )) {
			echo 'SUCCESS';
		} else {
			echo 'FAIL';
		}
	}
?>
  • Вопрос задан
  • 1749 просмотров
Пригласить эксперта
Ответы на вопрос 1
@oleg8
а вот это попробуй прибить
$headers[] = "Content-Transfer-Encoding: 7bit";
и послать еще раз на яндех
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽