Отправить html письмо

152
23 марта 2019, 13:40

Я отправляю html письмо с картинкой.

Вот такие заголовки отправляю серверу

"From: =?utf-8?b?R2xvYmFsIERlbnQ=?= 
X-Mailer: zm php script
Mime-Version: 1.0
Content-Type: multipart/mixed;
Content-Type: multipart/alternative;
 boundary="dentsend.ru-2018"
"

Вот так выглядит тело письма

"--dentsend.ru-2018
Content-type: multipart/related;
 boundary="dentsend.ru-2018-1"
--dentsend.ru-2018-1
Content-type: text/html; charset="utf-8"
Content-Transfer-Encoding: 8bit
--dentsend.ru-2018-1
Content-Type: image/jpg
 name="file.2.jpg"
Content-Transfer-Encoding:base64
Content-ID: 
Content-Disposition: inline
 filename="file.2.jpg"
YjMxMTIzMTIyMTMyMf/Y/+AAEEpGSUYAAQEBASwBLAAA/+0ALFBob3Rvc2hvcCAzLjAAOEJJTQPt
AAAAAAAQASwAAAABAAEBLAAAAAEAAf/hft1odHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvADw/
eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+DQo8eDp4
bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1
LjYtYzE0MyA3OS4xNjEzNTYsIDIwMTcvMDkvMDctMDE6MTE6MjIgICAgICAgICI+DQoJPHJkZjpS
REYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMj
Ij4NCgkJPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJs
Lm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFw
LzEuMC8iIHhtbG5zOnhtcEdJbWc9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9nL2ltZy8i
IHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJl
... дальше бинарник очень длинный
--dentsend.ru-2018--
"

Письмо приходит, но картинки в теле письма нет вообще, а во вложение файл непонятного расширения с именем no_name.

В чём здесь ошибка? как это пофиксить?

Answer 1

Как вариант примерно так:

$subject = "тема письма"; 
$message ="Текст сообщения"; 
// текст сообщения, здесь вы можете вставлять таблицы, рисунки, заголовки, оформление цветом и т.п.
$filename = "file.doc";
// название файла
$filepath = "files/file.doc";
// месторасположение файла

//исьмо с вложением состоит из нескольких частей, которые разделяются разделителем
$boundary = "--".md5(uniqid(time())); 
// генерируем разделитель
$mailheaders = "MIME-Version: 1.0;\r\n"; 
$mailheaders .="Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n"; 
// разделитель указывается в заголовке в параметре boundary 
$mailheaders .= "From: $user_email <$user_email>\r\n"; 
$mailheaders .= "Reply-To: $user_email\r\n"; 
$multipart = "--$boundary\r\n"; 
$multipart .= "Content-Type: text/html; charset=windows-1251\r\n";
$multipart .= "Content-Transfer-Encoding: base64\r\n";    
$multipart .= \r\n;
$multipart .= chunk_split(base64_encode(iconv("utf8", "windows-1251", $message)));
// первая часть само сообщение
// Закачиваем файл 
    $fp = fopen($filepath,"r"); 
        if (!$fp) 
        { 
            print "Не удается открыть файл22"; 
            exit(); 
        } 
$file = fread($fp, filesize($filepath)); 
fclose($fp); 
// чтение файла

$message_part = "\r\n--$boundary\r\n"; 
$message_part .= "Content-Type: application/octet-stream; name=\"$filename\"\r\n";  
$message_part .= "Content-Transfer-Encoding: base64\r\n"; 
$message_part .= "Content-Disposition: attachment; filename=\"$filename\"\r\n"; 
$message_part .= \r\n;
$message_part .= chunk_split(base64_encode($file));
$message_part .= "\r\n--$boundary--\r\n";
// второй частью прикрепляем файл, можно прикрепить два и более файла
$multipart .= $message_part;
mail($to,$subject,$multipart,$mailheaders);
// отправляем письмо 
//удаляем файлы через 60 сек.
if (time_nanosleep(5, 0)) {
        unlink($filepath);
}
// удаление файла
READ ALSO
Динамическая подгрузка модулей

Динамическая подгрузка модулей

Вообщем есть 4 сервиса, у каждого сервиса свое ядро свой конфиг свое пространство имен и есть апи который принимает запрос и проверяет состояние...

141
PHP array и дерево

PHP array и дерево

у меня есть база с подобным набором данных

126
Изменить подстроку в строке с помощью регулярного выражения

Изменить подстроку в строке с помощью регулярного выражения

Есть такая строка [mod]тут может быть что угодно[/mod], она находится в неком тексте ( строке ), нужно средствами php заменить выше приведенную строку...

139
Как исправить приход на почту?

Как исправить приход на почту?

Приходит серверным емейломX-Mailer:PHP/7

174