Eridani
@Eridani
Мимо проходил

Не видно текста сообщения php mail?

День добрый.
Написал форму отправки, на gmail весь текст $message приходит, как и вложения (2 файла), а на яндекс или мейл.ру вложения приходят с нулевым весом, текста нет.
В чем может быть причина?
$message = ' <p>Доброго дня, '. $result['name'] .'!</p>';
		$message .= ' <p>По Вашему запросу направляю подробную информацию по тарифам и моему опыту работы. </p>';
		$message .= ' <p>Скорее всего у Вас появятся ко мне вопросы. Давайте пообщаемся по телефону, я могу позвонить. Напишите удобное время и часовой пояс.</p>';
		$message .= ' <p>Надеюсь, я смогу Вам помочь. До скорого!</p>';
		$message .= ' <p>-----------------------------------------------------------</p>';
		$message .= ' <p>С самыми теплыми пожеланиями! <br/>Шишкина Наталья</p>';
		$message .= ' <p>**** | <a href="mailto:***@list.ru">***@list.ru</a></p>';
		$message .= ' <p><img src="'.$_SERVER['HTTP_HOST'].'/images/nataliya-mini.png" width="200"/></p>';

		$headers = "MIME-Version: 1.0;\r\n"; 
		$headers .="Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n"; 
		$headers .= "From: Шишкина Наталья <admin@".$_SERVER['HTTP_HOST'].">\r\n"; 
		$headers .= "Reply-To: ***@list.ru\r\n"; 

		$multipart = "--$boundary\r\n"; 
		$multipart .= "Content-Type: text/html; charset=windows-1251\r\n";
		$multipart .= "Content-Transfer-Encoding: base64\r\n";    
		$multipart .= chunk_split(base64_encode(iconv("utf8", "windows-1251", $message)));			

		
		$message_part = "";
		foreach($files as $onefile) {
				
			// Закачиваем файл 
				$fp = fopen($onefile['filepath'],"r"); 
					if (!$fp) 
					{ 
						print $fp;
						
						exit(); 
					} 
			$file = fread($fp, filesize($onefile['filepath'])); 	
			
			$message_part .= "\r\n--$boundary\r\n"; 
			$message_part .= "Content-Type: application/octet-stream; name=". $onefile['filepath'] ."\r\n";  
			$message_part .= "Content-Transfer-Encoding: base64\r\n"; 
			$message_part .= "Content-Disposition: attachment; filename=". $onefile['filename'] ."\r\n"; 
			$message_part .= chunk_split(base64_encode($file));
			
		}

		$multipart .= $message_part. "--$boundary--\n";;
		
		mail($to, $subject, $multipart, $headers);
  • Вопрос задан
  • 288 просмотров
Решения вопроса 1
Скорей всего, не хватает пустой строки между заголовками парта и телом (перед chunk_split), добавьте дополнительный \r\n в обоих местах.

Но еще обязательно надо в заголовках енкодить все восьмибитные символы в quoted-printable или base64, иначе From у вас неправильный. Например
From: =?windows-1251?b?строка_в_base64?=

Имя файла тоже лучше брать в двойные кавычки если оно может содержать пробелы или пунктуацию. Если там могут быть не-ASCII символы - то тоже енкодить.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
DKLINE Санкт-Петербург
от 120 000 до 150 000 ₽
Laptop.ru Москва
от 130 000 до 170 000 ₽
Laptop.ru Москва
от 150 000 до 190 000 ₽
17 июн. 2021, в 22:01
35000 руб./за проект
17 июн. 2021, в 20:24
22000 руб./за проект
17 июн. 2021, в 20:23
5000 руб./за проект