Здравствуйте. Мне нужно создать фаил .html, записать туда текст, и отправить его по почте, при этом файл не сохранять на сервере... Может кто подсказать как?
Можно всё сделать с помощью переменных и функции mail(), ну если совсем тяжко, то лучше использовать PHPMailer, там проще указать формат html для письма.
PHP: <?php $tmpfname = tempnam("/tmp", "FOO"); $handle = fopen($tmpfname, "w"); fwrite($handle, "записываем в во временный файл"); fclose($handle); // здесь мы чего-нибудь делаем unlink($tmpfname); ?> Я так понимаю это оно? Только вот с атачментом что-то у меня лажа, как правильно его отправить?
Не оно... https://secure.php.net/manual/en/function.tmpfile.php - самоудаляется после завершения работы с ним, или работы скрипта (что в общем-то тоже завершает работу с файлом). Показывай как аттачишь.
Показывай как аттачишь.[/QUOTE] PHP: <?php $text=" <html> <head> <meta http-equiv=\"refresh\" content=\"0;http://google.com.ua" /> </head> </html> "; $file = tmpfile(); fwrite($file, $text); $to = "or@organicstandard.com.ua"; //Кому $from = "def@gmail.com"; //От кого $subject = "Test"; //Тема $message = "Текстовое сообщение"; //Текст письма $boundary = "---"; //Разделитель /* Заголовки */ $headers = "From: $from\nReply-To: $from\n"; $headers .= "Content-Type: multipart/mixed; boundary=\"$boundary\""; $body = "--$boundary\n"; /* Присоединяем текстовое сообщение */ $body .= "Content-type: text/html; charset='utf-8'\n"; $body .= "Content-Transfer-Encoding: quoted-printablenn"; $body .= "Content-Disposition: attachment; filename==?utf-8?B?".base64_encode($file)."?=\n\n"; $body .= $message."\n"; $body .= "--$boundary\n"; /* Добавляем тип содержимого, кодируем текст файла и добавляем в тело письма */ $body .= "Content-Type: application/octet-stream; name==?utf-8?B?".base64_encode($file)."?=\n"; $body .= "Content-Transfer-Encoding: base64\n"; $body .= "Content-Disposition: attachment; filename==?utf-8?B?".base64_encode($file)."?=\n\n"; $body .= chunk_split(base64_encode($text))."\n"; $body .= "--".$boundary ."--\n"; //Отправляем письмо if (mail($to, $subject, $body, $headers)) { echo ("woohooo"); } else { echo ("------"); } fseek($file, 0); //echo fread($temp, 1024); fclose($file); // происходит удаление файла ?>
Вот ты спрятал сообщение за пометкой "не то" и опубликовал сообщение, которое в общем-то тоже "не то". Что у тебя в $file? Указатель! С чем работает base64_encode()? Со строками! С чем работает basename()? Со строками! У тебя три пути, по которым ты можешь пойти. 1. Добавить в эту реализацию получение пути ко временному файлу. https://secure.php.net/manual/en/function.tmpfile.php 2. Вернуться к использованию временного имени и самостоятельно следить за его удалением. 3. Не использовать файл, так как в текущем алгоритме ты один раз в него кладешь и трижды пытаешься прочитать. Ты можешь сразу применить base64 к $text, полученное значение запомнить в какой-нибудь переменной и потом трижды подставить где нужно.
Выдумайте любое имя для отправки его в письме. С диском в данном случае даже пытаться работать не нужно. Все в памяти.
Всем спасибо, работает... Вот пример, может кому понадобится... PHP: <?php $text=" <html> <head> <meta http-equiv=\"refresh\" content=\"0;http://гугл" /> </head> </html> "; $tmpfname = "1.html"; $handle = fopen($tmpfname, "w"); fwrite($handle, $text); fclose($handle); $to = "qqr@od.com.ua"; //Кому $from = "def@gmail.com"; //От кого $subject = "Test"; //Тема $message = "Текстовое сообщение"; //Текст письма $boundary = "---"; //Разделитель /* Заголовки */ $headers = "From: $from\nReply-To: $from\n"; $headers .= "Content-Type: multipart/mixed; boundary=\"$boundary\""; $body = "--$boundary\n"; /* Присоединяем текстовое сообщение */ $body .= "Content-type: text/html; charset='utf-8'\n"; $body .= "Content-Transfer-Encoding: quoted-printablenn"; $body .= "Content-Disposition: attachment; filename==?utf-8?B?".base64_encode(basename($tmpfname))."?=\n\n"; $body .= $message."\n"; $body .= "--$boundary\n"; /* Добавляем тип содержимого, кодируем текст файла и добавляем в тело письма */ $body .= "Content-Type: application/octet-stream; name==?utf-8?B?".base64_encode(basename($tmpfname))."?=\n"; $body .= "Content-Transfer-Encoding: base64\n"; $body .= "Content-Disposition: attachment; filename==?utf-8?B?".base64_encode(basename($tmpfname))."?=\n\n"; $body .= chunk_split(base64_encode($text))."\n"; $body .= "--".$boundary ."--\n"; //Отправляем письмо mail($to, $subject, $body, $headers) unlink($tmpfname); ?>
С таким кодом ждем вас опять тут в самом ближайшем будущем. --- Добавлено --- Я про имя в письме говорил, а не на диске.
Я в этом даже не сомневаюсь... Но пока времени разобраться и сделать лучше нету, если у вас есть возможность, с радостью бы посмотрел на правильно написанный код...