Отправляет пустое mail сообщение с вложением

Рейтинг: 0Ответов: 1Опубликовано: 10.04.2015

Решил прикрутить к своим email сообщениям возможность прикреплять файл. Вроде всё правильно написал, но после отправки сообщения с вложением, обнаруживаю на своей почте совершенно пустое сообщение. Отправляю с локального сервера через SendMail. Вот код серверной части:

$folder = "tmp/";
$attach_file = "test.png";
$boundary = "--".md5(uniqid(time()));
// ------------
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= "Content-Type: multipart/mixed; boundary=\"".$boundary."\"\r\n";
$message_text = "<html><body>HELLO WORLD!</body></html>";
$message = $boundary."\r\n";
$message .= 'Content-Type: text/html; charset=windows-1251'."\r\n";
$message .= 'Content-Transfer-Encoding: base64'."\r\n";
$message .= chunk_split(base64_encode(iconv("utf-8", "windows-1251", $message_text)))."\r\n";
// ------------
$open_attach = fopen($folder.$attach_file, "r");
if(!$open_attach) {
    echo "ОШИБКА ОТКРЫТИЯ ФАЙЛА";
} 
$read_attach = fread($open_attach, filesize($folder.$attach_file));
$message .= $boundary."\r\n";
$message .= "Content-Type: application/octet-stream; name = \"".$attach_file."\"\r\n";
$message .= "Content-Transfer-Encoding: base64"."\r\n"; 
$message .= "Content-Disposition: attachment; filename = \"".$attach_file."\"\r\n";
$message .= chunk_split(base64_encode(iconv("utf-8", "windows-1251", $read_attach)))."\r\n";
$message .= $boundary."--\r\n";
fclose($open_attach);
// ------------
if(!mail("1234@yandex.ru", "Hello World", $message, $headers)) {
    echo "ОШИБКА ОТПРАВКИ СООБЩЕНИЯ";
}

Почему приходит пустое сообщение?

Ответы

▲ 1

У вас не прочитался файл test.png. Попробуйте использовать функцию file_get_contents() и проверьте путь.

Кроме того нужно добавить дополнительный \r\n после каждого Content-Transfer-Encoding: base64

В Content-Type: multipart/mixed; boundary=ХХХХХХХХ нужно приводить boundary без -- (двух дефисов), а во всех остальных случаях - нужно.